个人技术分享

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号!

公众号二维码


目录

一、Sealer 简介

二、Sealer 下载、安装

三、Sealer 部署 Kubernetes 集群

四、Sealer 常用命令

五、Sealer 构建集群镜像(ClusterImage)


一、Sealer 简介

Sealer 项目诞生于阿里云智能,并于 2022 年 4 月 26 日正式成为 CNCF 官方的沙箱项目。

Sealer 项目旨在解决分布式软件的打包、分发与运行的标准化问题,提供了一种分布式应用交付方式。Sealer 通过将 Kubernetes 集群和所有应用程序的依赖关系打包到一个“集群镜像”中,解决了分布式应用交付的一致性问题。

笔者作为一名实施交付工作者,在第一次接触到 Sealer 时就发现它非常适合离线交付场景,可以降低在不同客户环境中进行应用交付的难度和复杂性,因此在后续工作中也进行了大量的实践。

Sealer 项目地址:GitHub - sealerio/sealer

Sealer 官网地址:sealer

Sealer 帮助文档:What is Sealer? | sealer


二、Sealer 下载、安装
# AMD架构
wget https://github.com/sealerio/sealer/releases/download/v0.8.7/sealer-v0.8.7-linux-amd64.tar.gz
tar -xzf sealer-v0.8.7-linux-amd64.tar.gz -C /usr/bin

# ARM架构
wget https://github.com/sealerio/sealer/releases/download/v0.8.7/sealer-v0.8.7-linux-arm64.tar.gz
tar -xzf sealer-v0.8.7-linux-amd64.tar.gz -C /usr/bin

# 查看版本信息
sealer version


三、Sealer 部署 Kubernetes 集群

1、准备工作

# 关闭防火墙
systemctl disable --now firewalld

# 关闭 selinxu
setenforce 0
sed -i ’s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config

# 清空 iptables 规则
iptables -F && iptables -t nat -F

# 禁用 swap 分区
swapoff -a
sed -i '/swap / s/^\(.*\)$/#\1/g' /etc/fstab

# /etc/hosts 文件添加条目(需要保证主机的 hostname 唯一)
172.16.200.166  master
172.16.200.167  node

# 配置主机间 SSH 免密(详细过程略)

2、部署集群

  • 方式一:sealer run
sealer run kubernetes:v1.19.8 -m 172.16.200.166 -n 172.16.200.167

🔔 提示一
# kubernetes:v1.19.8:指定集群镜像名称,可以通过命令 sealer search kubernetes 查询
# -m:即 --master,指定集群 Master 节点的 IP 地址,多个 IP 通过 ,进行分隔
# -n:即 --node,指定集群 Node 节点的 IP 地址,多个 IP 通过 ,进行分隔

🔔 提示二
# Sealer 默认使用 Calico 作为 CNI 组件
# Nginx-Ingress-Controller 等组件需要自行安装
  • 方式二:sealer apply
sealer apply -f clusterfile.yaml

🔔 提示
可以通过 clusterfile.yaml 自定义部署配置,如 kubeadm 配置、Docker 配置等

clusterfile.yaml 自定义配置示例

🔔 定义集群信息
---
apiVersion: sealer.cloud/v2
kind: Cluster
metadata:
  name: mycluster
spec:
  image: kubernetes:v1.19.13
  ssh:
    user: root
    pk: /root/.ssh/id_rsa
    passwd: xxxx
    port: 22
  hosts:
    - ips: [ 172.16.200.166 ]
      roles:
      - master
    - ips: [ 172.16.200.167 ]
      roles:
      - node

🔔 定义集群配置
---
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.19.13
etcd:
  local:
    dataDir: /data/etcd
networking:
  dnsDomain: cluster.local
  podSubnet: 10.10.0.0/16
  serviceSubnet: 10.96.0.0/22

🔔 定义 Calico 配置
---
apiVersion: sealer.aliyun.com/v1alpha1
kind: Config
metadata:
  name: calico
spec:
  path: etc/custom-resources.yaml
  data: |
    apiVersion: operator.tigera.io/v1
    kind: Installation
    metadata:
      name: default
    spec:
      registry: sea.hub:5000
      calicoNetwork:
        ipPools:
        - cidr: 10.10.0.0/16
        nodeAddressAutodetectionV4:
          interface: "eth.*|en.*"

🔔 定义 Docker 配置
---
apiVersion: sealer.aliyun.com/v1alpha1
kind: Config
metadata:
  name: docker-config
spec:
  path: etc/daemon.json
  data: |
    {
      "bip": "192.168.100.1/24",
      "max-concurrent-downloads": 20,
      "log-driver": "json-file",
      "log-level": "warn",
      "log-opts": {
        "max-size": "10m",
        "max-file": "3"
      },
      "mirror-registries": [
        {
          "domain": "*",
          "mirrors": [
            "https://sea.hub:5000"
          ]
        }
      ],
      "exec-opts": [
        "native.cgroupdriver=systemd"
      ],
      "data-root": "/data/docker"
    }

3、实测结果

  • Sealer 部署单节点集群大约需要 3 分钟,部署三节点集群大约需要 5 分钟,相当高效
  • Sealer 支持的操作系统也很广泛,并同时支持 AMD 64 架构和 ARM 64 架构
RedHat 7/8
CentOS 7.5~8.5
CentOS stream 8、9
Ubuntu 16.04、18.04、22.04
EulerOS 2.0、2.5
openEuler 20.03
openSUSE 15.1~15.4、42.3
Rocky Linux 8.5~8.7
Alibaba Cloud Linux 2.1903 LTS、3.2104 LTS
Kylin V10
UOS V20
NeoKylin V7Update


四、Sealer 常用命令
# 详见 http://sealer.cool/docs/command/sealer.html
sealer --help
Usage:
  sealer [command]

Available Commands:
  apply       apply a kubernetes cluster
  build       build an cloud image from a Kubefile
  cert        update k8s API server cert
  check       check the state of cluster 
  completion  generate autocompletion script for bash
  debug       Create debugging sessions for pods and nodes
  delete      delete a cluster
  exec        exec a shell command or script on all node.
  gen         Generate a Clusterfile to take over a normal cluster which not deployed by sealer
  gen-doc     generate document for sealer CLI with MarkDown format
  help        Help about any command
  images      list all cluster images
  inspect     print the image information or clusterFile
  join        join node to cluster
  load        load image from a tar file
  login       login image repository
  merge       merge multiple images into one
  prune       prune sealer data dir
  pull        pull cloud image to local
  push        push cloud image to registry
  rmi         remove local images by name
  run         run a cluster with images and arguments
  save        save image to a tar file
  search      sealer search kubernetes
  tag         tag a image as a new one
  upgrade     upgrade your kubernetes cluster
  version     show sealer version

Flags:
      --config string   config file (default is $HOME/.sealer.json)
  -d, --debug           turn on debug mode
  -h, --help            help for sealer
      --hide-path       hide the log path
      --hide-time       hide the log time
  -t, --toggle          Help message for toggle

Use "sealer [command] --help" for more information about a command.
# 查看集群镜像
sealer images

# 添加 Master 节点
sealer join -m 172.16.200.168

# 删除 Master 节点
sealer delete -m 172.16.200.168

# 添加 Node 节点
sealer join -n 172.16.200.168

# 删除 Node 节点
sealer delete -n 172.16.200.168

# 在集群节点上批量执行 shell 命令
sealer exec "cat /etc/hosts"

# 查看集群统计信息
sealer check

# 删除集群
sealer delete -a

# 升级集群版本
sealer upgrade kubernetes:v1.20.0


五、Sealer 构建集群镜像(ClusterImage)

1、编写 kubefile 文件

Kubefile 与 Dockerfile 极其相似,由连续列出的各种命令(指令)和参数组成,用于在基础 ClusterImage 上自动执行指令,构建新的 ClusterImage。

  • Docker 使用 Dockerfile 构建 Docker 镜像,并使用 Docker 镜像运行 Docker 容器,解决了单主机应用程序的几乎所有交付问题
  • Sealer 使用 Kubefile 构建 ClusterImage,并使用 ClusterImage 运行 Kubernetes 集群,将交付概念扩展到集群级别,并且主要关注分布式应用程序的视角
FROM kubernetes:v1.19.13
 
COPY daemon.json etc/

附 kubefile 相关说明:sealer/docs/design/Kubefile.md at main · sealerio/sealer · GitHub

2、构建集群镜像

sealer build -t kubernetes:v1.19.13-fix -f kubefile .