集群镜像重塑分布式应用交付

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
应用实时监控服务-应用监控,每月50GB免费额度
函数计算FC,每月15万CU 3个月
简介: 集群镜像把整个集群看成一台服务器,把 K8s 看成云操作系统,实现整个集群的镜像化打包和交付,为企业级软件提供一种“开箱即用”的应用封装技术。以行业 ISV 为例,集群镜像帮助企业解决了分布式软件的部署一致性难题、降低了交付出错率,最终指数级降低分布式软件的交付成本。 受docker等容器技术的启发,集群镜像将单机应用封装技术,上升到分布式集群维度,最终实现分布式软件的高效交付(build, share, run)。

作者:方海涛(中弈)


议题简介:集群镜像把整个集群看成一台服务器,把 K8s 看成云操作系统,实现整个集群的镜像化打包和交付,为企业级软件提供一种“开箱即用”的应用封装技术。以行业 ISV 为例,集群镜像帮助企业解决了分布式软件的部署一致性难题、降低了交付出错率,最终指数级降低分布式软件的交付成本。 受docker等容器技术的启发,集群镜像将单机应用封装技术,上升到分布式集群维度,最终实现分布式软件的高效交付(build, share, run)


1.png


分享人:

方海涛(中弈),sealer项目发起人,阿里云技术专家,拥有七年以上云原生从业经验,sealos 作者,数千家企业在生产环境中使用该项目。

 

目录:

•   背景介绍

•   应用交付困局

•   Sealer-集群镜像介绍

•   总结与规划

 

一、背景介绍

2.png

 

从应用视角看云的发展历程,就是一个不断屏蔽底层细节的过程。


•   最早是物理机;

•   openstack:做了资源虚拟化,但并未对应用管理做思考,注重了利用率;

•   Docker:主要考虑针对单个应用的打包;

•   kubernetes:管理整个集群,向下整个资源做抽象,向上整个分布式应用做管理,如何


部署、升级、配置等;


•   Serverless:聚焦业务逻辑,几乎对服务端运维管理不操心,更聚焦业务本身;

•   Wasm DApp:区块链里的合约和faas似乎朝着一个方向发展最终可能在某个点融合,大家关心的更少,直接把应用发布到运行着的世界计算机上;


业务只关心业务逻辑的一个不断迭代过程。最终云原生可以用极小的成本让业务简单开发稳定运行。

 

二、应用交付困局

 

1.  应用交付目前存的问题:交付周期长,交付成本高

 

a.  定制性/灵活性差:真正交付时不清楚客户需要的是什么,比如集群里包含哪种数据库,数据库架构是怎样的,配置是怎样的。还要与自己的SaaS软件无缝结合;


b.  协作困难:交付者和研发者不清楚彼此之间的功能逻辑需求等;


c.  交付一致性差:在测试环境正常,到客户环境中,可能会出现网络不通,缺少依赖等问题,导致无法正常交付,Docker只是解决了部分,并未彻底解决;

 

2.  Docker解决了一致性问题?

 

Docker仅解决了单个应用的镜像化问题,对于软件整体来说是包含非常多分布式组件的,并不能在整个集群纬度保证一致性。

 

3.  Kubernetes解决了什么问题?

 

Kubernetes很好的解决了分布式应用管理和资源的抽象问题,应用之间复杂的应用如何编排;然而对于交付而言这还远远不够,比如kubernetes本身如何最佳交付都是个问题,还有上面庞大的应用编排文件与镜像如何交付?

 

4.  Helm解决了应用整体编排但不打包

 

Helm只是把编排文件打包和参数的抽离,很好的管理了编排文件,但是并不会把所有依赖都管理起来,比如helm不会帮你管理k8s本身的交付,也不会帮你管理私有镜像仓库和集群中需要的镜像甚至二进制如何打包。更不会帮你处理交付时一些常规的操作如修改主机名,时间同步等。

 

三、 Sealer - 集群镜像介绍

 

定义:如同Docker或者虚拟机镜像一样,把整个集群当成一台机器把kubernetes当成操作系统,整个集群所有依赖整体打包的技术称之为集群镜像。

 

1.  集群镜像介绍

3.png


如上对比图所示:


•        驱动层:单机上有计算、存储、网络驱动,集群里是K8s容器运行CRICNICSI时的实现;

•        操作系统层:单机有ubuntu centos,集群里是Kubernetes

•        容器层:单机是Docker镜像,集群里运行着K8s的集群;

•        镜像层:单机是Docker镜像,而集群里是缺失的环节。

 

2.  集群镜像工作流

 

4.png

 

•        单机:书写Dockerfile,构建DockerImage,通过Docker Compose告诉如何去使用DockerImage,就可以run Docker,镜像可变动部分很少,通过Compose去灵活的控制操作;


•        集群:书写Kubefile,构建CloudImage,此镜像包含了该云需要的所有资源,对接ClusterfileClusterfile告知了云在运行时需要哪些参数,需要运行在哪些服务器上,或者是对接一个什么样的公有云,包括应用启动时Redis等的配置,去启动运行整个集群。启动运行包括上层所有依赖的数据库、中间件、SasS应用等。

Sealer最核心价值是将其中比较复杂的面向过程的细节全部像Docker一样进行了封装,但却是集群维度的,所有的依赖都会在集群镜像中。

 

3.  集群创建

5.png

 

定义一个类似于Docker文件的kubefile(如上图左边所示),进行创建Sealer集群镜像,包含了内嵌的kubernetes和它的所有依赖,到客户环境中,只需要提供好机器,装好操作系统,连接好网络就可以去运行Sealer

 

4.  集群分享与运行

 

6.png

 

如上图交付过程,将创建好的集群镜像可以pushDockerRedis,再pull或者save下来,save下来就是一个tar包,tar包到了客户环境可以load,这样就保证了在离线环境中同样可以把集群拉起来,配合Clusterfile,进行run

 

5.  Sealer发展历程

 

7.png

 

•        2020年5月:Sealer 项目的想法诞生;

•        2020年12月:开始设计,最初版本只有十几条指令,经过优化筛选,目前剩余5条,极大程度的降低了使用门槛,有Docker基础的使用者,能够很快明白上手;

•        2021年3月:代码开源;

•        2021年6月:发展了40多位开发者,30多位企业客户,同时也发展了20多个通用的CloudImages,包括MySQLRedis等,在其列表中拿来使用就可以,在通常情况比如在使用SaaS软件时,可能同时需要MySQLRedis,Sealer做的比较好的一点就是可以把你所需要的组合在一起,该镜像就可以专门服务于你。所以说Sealer 具有很好的灵活性和可组装性;

•        2021年9月:生产环境落地,有两个用户已经在生产环境中落地。

 

6.  高可用

 

8.png

 

•        在做高可用的时候不用再去依赖过重的组件;

•        如果启用Nginx做反向代理,流量会走Nginx的进程,当进程出现问题会影响整体的可用性,而ipvs负载只要内核在运行,上层管控组件出现问题时不会影响整个集群的高可用。

 

7.  容器镜像缓存机制

9.png

 

  • 传统方式交付一个新集群就需要对镜像地址进行修改,否则无法拉取到容器镜像;
  • 在打包时也需要对镜像地址进行修改;
  • Sealer采用完全透明的兼容方式让用户完全不用关心存储镜像的过程,整个构建和交付的过程不用修改任何镜像地址。

 

8.  插件机制

10.png

 

如上图所示,在集群交付时,总会有一些不通用的功能,比如:修改主机名称等。类似的需求可以做成对应的插件,也可以扩展出相应的插件。

 

9.  配置管理机制

11.png

 

在交付Redis时,账户密码等有变更,同样可以在Clusterfile中去定义一个Config,可以覆盖掉镜像里的任何的文件,不管是Helmvalues,还是etcd里的文件或者修改自定义的文件。Sealer的配置能力非常灵活,而且不会限制到底是使用哪种编排工具。

 

四、总结与规划

 

1.  客户列表

 

12.png


很多客户使用sealer极大的提升了交付稳定性和交付效率,把一周左右的交付周期缩短到了小时级别。

 

2.  Roadmap未来规划

 

13.png


•   V1.0版本发布:着重在整个核心功能,充分测试,高性能,高稳定性;

•   生态系统:让CloudImage足够多,更好用,比如让MySQLRedis等更好用;

•   社区推动:推动社区开发者,尽量把Sealer作为默认的安装方式,一键交付到客户的集群中。

 

3.  总结

14.png

 

为什么要使用集群镜像?

 

•   高质量可复用的镜像;

•   自定义灵活组装;

•   分钟级交付;例如在对接公有云时,传统方式3分钟把资源拉起来,而Sealer优化了并发,只需要30秒,在分发上性能也更高;

•   标准化协作:在集群维度软件的生产者直接制作镜像就可以很简单的被消费者消费;

•   广泛的适配性兼容性:几乎兼容了Linux支持Systemd的绝大多数版本;

 

使用集群镜像可以让大家在交付专有云的时候,不受技术的限制,降低交付成本,缩短交付周期,最终帮助SaaS软件或专有云交付场景,实现规模化,扩大利润,这是Sealer的终极目标。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
25天前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
131 2
|
6月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,展现卓越性能与性价比。其轻量版满足国产化需求,兼具高性能与低成本,适用于多种场景,推动数据库技术革新与发展。
|
4月前
|
安全 JavaScript 前端开发
HarmonyOS NEXT~HarmonyOS 语言仓颉:下一代分布式开发语言的技术解析与应用实践
HarmonyOS语言仓颉是华为专为HarmonyOS生态系统设计的新型编程语言,旨在解决分布式环境下的开发挑战。它以“编码创造”为理念,具备分布式原生、高性能与高效率、安全可靠三大核心特性。仓颉语言通过内置分布式能力简化跨设备开发,提供统一的编程模型和开发体验。文章从语言基础、关键特性、开发实践及未来展望四个方面剖析其技术优势,助力开发者掌握这一新兴工具,构建全场景分布式应用。
436 35
|
3月前
|
分布式计算 Java 大数据
Java 大视界 —— 基于 Java 的大数据分布式计算在气象数据处理与天气预报中的应用进展(176)
本文围绕基于 Java 的大数据分布式计算在气象数据处理与天气预报中的应用展开,剖析行业现状与挑战,阐释技术原理,介绍其在数据处理及天气预报中的具体应用,并结合实际案例展示实施效果。
|
5月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
Java 大视界 -- 基于 Java 的大数据分布式存储在视频监控数据管理中的应用优化(170)
本文围绕基于 Java 的大数据分布式存储在视频监控数据管理中的应用展开,分析管理现状与挑战,阐述技术应用,结合案例和代码给出实操方案。
|
6月前
|
并行计算 PyTorch 算法框架/工具
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
449 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
|
9月前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
7月前
|
机器学习/深度学习 存储
DeepSeek进阶开发与应用4:DeepSeek中的分布式训练技术
随着深度学习模型和数据集规模的扩大,单机训练已无法满足需求,分布式训练技术应运而生。DeepSeek框架支持数据并行和模型并行两种模式,通过将计算任务分配到多个节点上并行执行,显著提高训练效率。本文介绍DeepSeek中的分布式训练技术,包括配置与启动方法,帮助用户轻松实现大规模模型训练。数据并行通过`MirroredStrategy`同步梯度,适用于大多数模型;模型并行则通过`ParameterServerStrategy`异步处理大模型。DeepSeek简化了分布式环境配置,支持单机多卡和多机多卡等场景。
|
10月前
|
存储 分布式计算 负载均衡
分布式计算模型和集群计算模型的区别
【10月更文挑战第18天】分布式计算模型和集群计算模型各有特点和优势,在实际应用中需要根据具体的需求和条件选择合适的计算架构模式,以达到最佳的计算效果和性能。
343 62