前言
上回带大家进行了sealer的初体验,想必大家都轻松完爆了。接下来我将讲解一下sealer的总体架构,上车吧兄弟们,let’s go。
核心概念
首先 sealer引入了三个概念 CloudImage、Kubefile 和 Clusterfile。
CloudImage :相当于 DockerImage,其中 rootfs 是 kubernetes,他包含您的应用程序所有需要的依赖项(eg. docker image、yaml file 或 helm image...)。
Kubefile :用于描述了如何构建 CloudImage。
Clusterfile :定义要运行集群镜像的配置。
各位大佬一定对docker不陌生,docker 通过 Dockerfile 构建一个 docker 镜像,使用 compose 来运行容器。sealer也是异曲同工之妙,sealer 通过 Kubefile 构建一个 CloudImage,使用 Clusterfile 启动整个集群。
当然docker是对容器进行镜像化,sealer则是在更高维度,把整个k8s集群进行镜像化,使得分布式软件的交付more easy,简直就是build run share!!!
模块解析
看模块解析是一件很枯燥的事情,需要按住你骚动不安的心
。
sealer
--applications 里面写很多的Kubefile 目前有calico,helm的文件
--apply 用于 run 集群的
--build 用于制作镜像的
--check 做pre check :在装集群镜像之前去check一些东西,保证集群镜像能运行起来;post check:检测pod,server到底能不能通。
--client 跟k8s相关的都放这,比如调用k8s api获取node信息,等等一些东西
--cloud 相当于一个界面,就是可以不用shell脚本去执行sealer
--command 命令的代理,写一些系统中没有的命令,比如ipvs相关的控制命令
--common 一些通用的东西,常量等等
--config 就是配置管理,业务层的一些配置参数,比如helm 相关的配置里有密码啥的,通过这个进行注入
--docs 文档相关信息
--filesystem 怎么把镜像mount在一起,然后怎么发给机器,文件的清理
--guest 处理一些上层指令
--hack 就是一些脚本相关的东西
--image 处理镜像在本机上怎么存储的,怎么跟docker hub打交道的,涉及docker相关的东西
--ifra 对接各种公有云的,比如阿里云上怎么把虚拟机起起来
--ipvs 配置一些ipvs规则的
--logger 配置一些日志信息的
--parser 解析Kubefile
--runtime 管理整个k8s的生命周期
--sealer 具体的二进制,sealer的主入口man函数放在这里,sealer是标准的cabra工程.
--seautil 具体的二进制,也是标准的cabra工程,是命令的代理,帮我们去机器上执行一些系统上没有的命令
--test 是做集成测试的,e2e
--type 定义结构体
--utils 通用的工具方法,ssh,overlay2
--vender 维护依赖包的,go mod vender
架构图
实现层
实现层是在通用能力层复用库的基础上进行实现扩展,这一层即不关心镜像是从何而来的,也不关心各个模块的作用。
通用能力层
这一层主要是去实现和扩展集群镜像的能力,eg. 解析Kubefile、Clusterfile结构体的定义等等。
标准定义层
负责定义标准,在此标准下实现层都必须严格遵循,eg.Kubefile的定义。如果你要去实现build功能,那么必须按照Kubefile中定义的标准进行构建;集群在运行的时候也必须严格按照Clusterfile中定义的集群参数,去把集群运行起来;当然,基础镜像里所包含的文件,都必须遵循cloud rootfs里所定义的标准,并且需要遵循其标准的能力扩展方式。
结语
当你知道了sealer的核心、模块及架构之后,你心里就有底了,哦原来是这么玩的。好了,到站了,兄弟们下车,动动小手点个关注,点个赞,您的支持就是我的动力。
参考文献:
「1」. sealer官方文档