文章目录
- 安装
 - 创建集群
 - 清理集群
 - 本机免密登录
 
- 镜像构建与运行
 - 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 chartsLAUNCH {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.shAPPCMDS 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 ]
                
















