作者 | fanux.中弈 sealos作者,sealer发起人
什么是集群镜像
顾名思义和操作系统.iso镜像或者Docker镜像类似,集群镜像是用一定的技术手段把整个集群的所有文件以一定格式打成的一个资源包。
对比单机和集群会发现一些有趣现象:
- 单机有计算存储网络这些驱动,集群有CNI/CSI/CRI的实现像是集群的驱动
- 操作系统单机有ubuntu centos这些,我们可以把kubernetes看成云操作系统
- 单机上可以运行docker容器 或者是虚拟机,相当于一个运行的实例,集群也有运行着k8s的实例
- 单机上的虚拟机镜像,docker镜像,所以随着云计算技术的发展,在集群这个纬度也会抽象出类似的镜像技术。
以基于kubernetes的集群镜像为例,里面包含了除操作系统以外的所有文件:
- docker的依赖的二进制与systemd配置,dockerd的配置,以及一个私有的容器镜像仓库
- kubernetes核心组件二进制,容器镜像,kubelet system配置等
- 应用需要用到的yaml配置或者helm chart,以及应用的容器镜像
- 其它脚本,配置与二进制工具等应用运行需要的所有依赖
同样集群镜像运行时肯定不是起一个容器或者装在一台机器上,而是这个镜像可以直接安装到多台服务器上或者直接对接到公有云的基础设施上。
sealer介绍
sealer是阿里巴巴开源的集群镜像的一个实现方式,项目地址: https://github.com/alibaba/sealer 要实现集群。
Docker解决了单个容器的镜像化问题,而sealer通过把整个集群打包,实现了分布式软件的Build Share Run!!!
试想我们要去交付一个SaaS应用,它依赖了mysql es redis这些数据库和中间件,所有东西都在kubernetes上进行编排,那如果没有集群镜像那要做如下操作:
- 找个工具去安装k8s集群
- helm install mysql es redis… 如果是离线环境可能还需要导入容器镜像
- kubectl apply yoursaas
看似好像也没那么复杂,但是其实从整个项目交付的角度来说是面向过程极易出错的
那现在如果现在提供另外一个方式只要一条命令解决上面的问题你会不会用?
sealer run your-saas-application-with-mysql-redis-es:latest
可以看到只需要run一个集群镜像整个集群就被整体交付了,细节复杂的操作都被屏蔽掉了,而且任何应用都可以使用相同的方式运行。那这个集群镜像是怎么来的呢: