文章目录
- 安装
- 创建集群
- 清理集群
- 本机免密登录
- 镜像构建与运行
- Kubefile
- Sealer Image
- Clusterfile
sealer是阿里开源的一款分布式应用打包交付运行的解决方案;通过把分布式应用及其所依赖的数据库、中间件等一起打包成一个集群镜像,解决复杂应用的交付问题。
安装
安装非常简单,只需下载解压即可:
wget https://github.com/sealerio/sealer/releases/download/v0.9.0/sealer-v0.9.0-linux-amd64.tar.gz
tar xzvf sealer-v0.9.0-linux-amd64.tar.gz
mv sealer /usr/bin/
sealer要求docker的storage driver为Overlay2类型;在xfs文件系统上,需要d_type=true才支持:
xfs_info /data # 查看data文件所在分区ftype(ftype=1)才会支持overlay
创建集群
通过sealer run可快速创建集群:
- 集群元数据信息Clusterfile默认存储在:
/root/.sealer/[cluster-name]/Clusterfile
sealer run sealerio/kubernetes:v1.20.4 --masters {host-ip} --pk /root/.ssh/id_rsa
# --masters:指定主节点IP,多个用逗号分割
# --node:指定备节点IP,多个用逗号分割
# --pk:指定登录节点SSH(默认端口22,用户root)的密钥;
# --passwd:指定登录节点SSH的密码;(与pk二选一)
# 创建只有一个主节点的集群
sealer run docker.io/sealerio/kubernetes:v1.20.4 --masters 192.168.0.2 --pk /root/.ssh/id_rsa
指定yaml文件:sealer run -f Clusterfile
apiVersion: sealer.cloud/v2
kind: Cluster
metadata:
name: my-cluster
spec:
image: sealerio/kubernetes:v1.20.4
env:
- DOCKER_REGISTRY_HOME=/data/registry
- ROOTFS_DIR=/data/sealer
- DOCKER_DATA_ROOT=/data/docker
hosts:
- ips:
- 192.168.0.2
roles:
- master
registry:
localRegistry:
domain: sea.hub
port: 5000
ssh:
pk: /root/.ssh/id_rsa
port: "22"
user: root
status: {}
清理集群
可删除集群元数据文件或直接删除全部:
sealer delete -a
# 或
sealer delete -f /root/.sealer/my-cluster/Clusterfile
本机免密登录
使用pk创建集群时,需要设定本机免密登录:
ssh-keygen -t rsa # 全部默认(一路回车)
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
镜像构建与运行
可编写一个Kubefile,然后生成一个Sealer Image,最后通过一个Clusterfile来执行:
Kubefile: a file that describes how to build a Sealer Image.
Sealer Image: like docker image, and it contains all the dependencies you need to deploy a cluster or applications(like container images, yaml files or helm chart).
Clusterfile: a file that describes how to run a Sealer Image.
Kubefile
Kubefile类似Dockerfile,包含一系列构建cluster镜像的指令。
FROM {img-name}
:指定基础镜像,且是Kubefile中的第一条指令;COPY {SRC} {DST}
:复制内容(文件、文件夹)到rootfs下;# copy mysql.yamltorootfs/mysql.yaml COPY mysql.yaml . # copy directory apollo to rootfs/charts/apollo COPY apollo charts
LAUNCH {command args ...}
:指定在sealer run时启动的app列表;CMDS {command args ...}
:命令会在sealer run时执行,常用于启动程序或配置集群;- 有多条时,只有最后一条生效;
- 与LAUNCH冲突,推荐用LAUNCH;
CMDS ["kubectl apply -f recommended.yaml","echo success"]
APP APP_NAME scheme:path1 scheme:path2
:定义一个App,后面通过Launch来运行;# define a business app which contains a local shell file install.sh APP business local://install.sh
APPCMDS APP_NAME ["executable","param1","param2"]
:为应用指定命令,其context是指定app的目录;- 为某个应用指定多个APPCMDS时,只有最后一条生效;
- 只有在LAUNCH指令有此应用时,此应用的APPCMDS才生效;
- 没有为应用指定APPCMDS,会有缺省的命令行为:
- Helm Chart
- K8S YAML
- Linux Shell
LABEL <key>=<value> <key>=<value> <key>=<value> ...
:添加标签;- 标签会被子image继承;
CNI CNI_NAME scheme:path1 scheme:path2
:网络接口CNI插件;CSI CSI_NAME scheme:path1 scheme:path2
:容器存储接口CSI插件;
APP的schema支持:
local://{relative-path}
:相对编译上下文(目录)的相对路径;Path支持的类型:.sh
:shell脚本;.yml/.yaml
:kubernetes YAML文件;- Helm Chart目录
http(s)://{file-url}
:远程地址,build时会自动下载;
APP nginx local://nginx.yaml
APPCMDS nginx ["kubectl apply -f nginx.yaml -n nginx-namespace"]
LAUNCH ["nginx"]
sealer build -f kubefile -t my-snap:1.0.0 .
Sealer Image
通过sealer images
可查看本地镜像;sealer rmi {img}
可删除镜像;
Sealer Image是包含应用运行与发行所必须依赖的只读文件。
sealer build -f Kubefile -t my-app:1.0.0 --type=app-installer .
--type=kube-installer
:为默认值,包中包含集群信息;--type=app-installer
:包中只包含APP信息(安装时若集群不存在,则失败);
构建一个包的流程:
- 创建kubefile,如下
FROM sealerio/kubernetes:v1.20.4 #APP myApp local://myApp.yaml #LAUNCH ["myApp"] COPY myApp.yaml manifest CMDS ["kubectl apply -f manifest/myApp.yaml"]
- 构建:
sealer build -f kubefile -t my-app:1.0.0 .
- 打包:
sealer save -o myapp.tar my-app:1.0.0
- 加载:
sealer load -i myapp.tar
特殊目录:
- manifests目录: sealer build的时候会解析这个目录下面的所有yaml文件并把里面的容器镜像地址提取出来,然后拉取。用户标准的kubernetes yaml不放在这个目录的话不会处理;
- charts目录: sealer会执行helm template的能力,然后提取chart中的容器镜像地址,拉取并存储到集群镜像中。chart不拷贝到这个目录下不处理;
- manifests/imageList: 文件里面是其它需要拉取的镜像地址列表,比如镜像地址在CRD中sealer解析不到,那就需要手动配置到这个文件中。
Sealer会把用户自定义的kubeadm配置文件(与默认文件($Rootfs/etc/kubeadm.yml
)合并(只覆盖对应字段):
- merge规则:Clusterfile中的配置 > 集群镜像中的配置 > 默认kubeadm配置(硬编码在代码中);
- 自定义文件放置:
COPY kubeadm.yml etc
Clusterfile
Clusterfile用于描述集群状态,如节点信息、配置,以及一些列启动配置参数。
apiVersion: sealer.cloud/v2
kind: Cluster
metadata:
name: default-kubernetes-cluster
spec:
image: docker.io/sealerio/kubernetes:v1.22.15
ssh:
passwd: xxx
port: "2222"
hosts:
- ips: [ 192.168.0.2 ] # this master ssh port is different with others.
roles: [ master ]
ssh:
passwd: yyy
port: "22"
- ips: [ 192.168.0.3,192.168.0.4 ]
roles: [ master ]
- ips: [ 192.168.0.5 ]
roles: [ node ]