Sealos cluster image,也称为集群镜像,是 Sealos 工具的一个创新功能。该特性允许用户将 Kubernetes 云原生应用和插件打包成一个统一的 Docker 镜像,从而简化和标准化云原生生态下各种应用及插件的部署和管理。
helm upgrade --install
形式安装,便于版本快速迭代和升级。kubernetes 镜像:
镜像地址 | 镜像名称 | 说明 |
---|---|---|
docker.io/labring/kubernetes:<tag> |
kubernetes |
包含containerd容器运行时 |
docker.io/labring/kubernetes-docker:<tag> |
kubernetes-docker |
包含docker容器运行时 |
docker.io/labring/kubernetes-crio::<tag> |
kubernetes-crio |
包含crio-o容器运行时 |
application 镜像:
镜像地址 | 镜像名称 | 说明 |
---|---|---|
docker.io/labring/helm:<tag> |
helm | helm二进制文件 |
docker.io/labring/calico:<tag> |
calico | calico网络插件 |
docker.io/labring/openebs:<tag> |
openebs | openebs存储插件 |
...... | ...... |
Sealos 在 dockerhub 中的镜像使用 github action
自动构建,社区用户可以通过创建 github ISSUE 来触发构建任务,在ISSUE中通过支持的指令结合参数构建需要的镜像和版本,版本参数请参考应用官方网站、helm 仓库或 github release 页面。
已贡献的镜像可直接点击跳转 Github ISSUE 进行新版本构建: [ :arrow_forward: ] 点击创建ISSUE。
以构建新的nginx集群镜像为例,由于社区已在application
目录贡献了 nginx 构建脚本的实现,只需在ISSUE里搜索标题【Auto-build】nginx
,在评论框输入以下指令,结合镜像名称(固定)和镜像版本(与官方一致),即可构建出新版本的nginx集群镜像,构建完成后会自动上传至DockerHub。
示例指令如下:
/imagebuild_apps nginx v1.23.1
镜像配置存放位置及目录结构如下:
├── applications # 所有应用
│ ├── apisix # 应用名称
│ │ ├── latest # 应用版本
│ │ │ ├── entrypoint.sh # 安装脚本
│ │ │ ├── init.sh # 依赖下载
│ │ │ └── Kubefile # 镜像文件
│ │ └── README.md # 使用说明
│ ├── argocd
│ │ ├── latest
│ │ │ ├── entrypoint.sh
│ │ │ ├── init.sh
│ │ │ └── Kubefile
│ │ └── README.md
构建规则说明:
applications/<应用名称>
下的<应用版本>
,则执行<应用版本>
目录中的init.sh
脚本以及该目录上下文进行构建;latest
目录下的init.sh
脚本,并执行该脚本以及基于该目录上下文进行构建。目录结构说明:
init.sh
:名称不可变,内容可自定义,一般是需要下载一些helm chart、yaml文件以及不同架构的二进制文件,比如helm、kubectl-minio相关;
Kubefile
:镜像构建配置文件,支持 Docker/Kubefile 名称;
entrypoint.sh
:名称及内容自定义,一般封装应用实际部署命令,例如kubectl apply 或 helm install等;
charts
:该目录存放集群镜像需要的helm chart,sealos根据扫描的chart 解析镜像清单,build出registry目录放到与Kubefile同级的目录;
manifests
:该目录存放一些yaml文件,sealos会扫描manifests目录所有的镜像并build出registry目录放到与Kubefile同级的目录;
images/shim
:该目录主要存储一些额外的镜像列表,例如手动创建images_list.txt
,并build出registry目录放到与Kubefile同级的目录;
opt
:该目录存放一些二进制文件,比如helm、kubectl-minio等;
registry
:默认自动生成,该目录必须放在与Kubefile同级的目录,否则无法拷贝到master0的私有仓库,制作镜像也需要注意下。不要把registry存放到charts里,否则helm扫描慢导致OOM labring/sealos#1545;
模板渲染:如果需要模板,在etc、charts、manifests放一些 *.tmpl
结尾的文件可以被sealos run -e
环境变量渲染后去掉tmpl,比如渲染之前是aa.yaml.tmpl
渲染后 aa.yaml
,使用需要注意文件名不要与现有的文件冲突。
Github ISSUE支持的命令清单如下:
命令 | 说明 |
---|---|
/imagebuild_apps |
构建集群应用镜像 |
/imagebuild_dockerimages |
构建标准docker镜像 |
/imagesync |
同步镜像,有权限控制,只有机器人可操作 |
拉取代码到本地
$ git clone https://github.com/labring-actions/cluster-image.git
切换到集群镜像初始化脚本所在目录
$ cd cluster-image/applications/nginx/latest
执行初始化脚本下载相关依赖
$ bash init.sh amd64 nginx v1.25.6
执行sealos命令进行构建
$ sealos build -t docker.io/labring/nginx:v1.25.6 .
查看构建的镜像
$ sealos images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/labring/nginx v1.25.2 41328582759a 3 months ago 37.4 MB
贡献流程如下:
application
路径下其他应用的实现逻辑,编写自己应用的 init.sh
脚本、Kubefile
以及entrypoint.sh
。