[docker]Sealer简介


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-app: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 ]

制作app镜像

用于在已安装sealer集群的机器上一键安装:

  • Kubefile
    FROM scratch
    
    copy my.app.yaml.tmpl  manifests/my.app.yaml.tmpl
    CMDS ["kubectl apply -f manifests/my.app.yaml"]
    
  • yaml.tmpl:可设定变量{{ .var }},在部署运行时会自动替换变量并生成对应的yaml文件。
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: test-cluster
      namespace: default
      labels:
        app: test-app
    spec:
      podManagementPolicy: OrderedReady
      replicas: {{ .APP_COUNT }}
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: test-app
      serviceName: test-service
      template:
        metadata:
          labels:
            app: test-app
          namespace: default
        spec:
          containers:
          - image: myApp:0.0.1
    
  • 制作镜像:会自动拉取yaml文件中的image
    # 通过--type=app-installer指定为APP包(否则为完整的集群包)
    sealer build -t my.sealer-app:0.0.1 --type=app-installer .
    
    # 保存为tar包
    sealer save -o my.sealer-app.tar my.sealer-app:0.0.1
    
  • 运行:需要已安装sealer集群
    # 加载镜像
    sealer load -i my.sealer-app.tar
    
    # 通过-e来指定变量的值(tmpl文件中的)
    sealer run -e APP_COUNT=2 my.sealer-app:0.0.1
    
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值