以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号!
目录
一、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 .