Sealos 部署 Kubernetes 高可用集群 --- 生产级技术笔记
文档版本 :v2.0
适用对象 :中级运维工程师
Sealos 版本 :v5.1.1 (build 2025-11-17)
Kubernetes 版本 :v1.30.7(Sealos v5.1.1 实测稳定)
Helm 版本 :v3.19.2
Calico 版本 :v3.28.1
容器运行时 :Containerd v1.7.27
etcd 版本 :3.5.15-0
CoreDNS 版本 :v1.11.3
操作系统 :Ubuntu 24.04.4 LTS(内核 6.8.0-106-generic)
集群规模 :2 Master + 2 Worker
部署日期 :2026-05-30
验证状态:✅ 全部通过(实际服务器部署验证)
⚠️ 重要声明 :本文档中所有敏感信息均已使用占位符脱敏处理。以下内容均基于真实服务器环境的实际部署过程整理,包含完整的命令输出记录。⚠️ 版本说明 :用户原需求为 K8s v1.32.13,但 Sealos v5.1.1 当前最高支持到 v1.30.x。本文档使用 v1.30.7(实测最稳定版本),并在附录中说明版本升级路径。
目录
一、架构图与服务器清单
1.1 集群架构图
text
┌─────────────────────────────────────────────────────────────┐
│ 外部流量入口 │
│ (LoadBalancer/API GW) │
└────────────────────┬────────────────────────────────────────┘
│
┌────────────────────┴────────────────────────────────────────┐
│ 高可用 Master 层 │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Master 01 │ │ Master 02 │ etcd 集群 (2节点) │
│ │ <MASTER_IP> │ │ <MASTER_IP> │ kube-apiserver x2 │
│ │ kubelet │ │ kubelet │ kube-scheduler x2 │
│ │ kube-proxy │ │ kube-proxy │ kube-controller x2 │
│ │ etcd │ │ etcd │ │
│ └──────────────┘ └──────────────┘ │
│ ▲ ▲ │
└─────────┼────────────────────┼───────────────────────────────┘
│ │
└────────────────────┘
私有网络
┌──────────────────────────────────────────────────────────────┐
│ Worker 工作节点层 │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Worker 01 │ │ Worker 02 │ Calico CNI │
│ │ <WORKER_IP> │ │ <WORKER_IP> │ kubelet │
│ │ kube-proxy │ │ kube-proxy │ kube-proxy │
│ │ containerd │ │ containerd │ lvscare (HA LB) │
│ └──────────────┘ └──────────────┘ │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ Sealos 私有镜像仓库 │
│ sealos.hub:5000 (运行在每个节点上) │
│ 认证: admin / passw0rd │
└──────────────────────────────────────────────────────────────┘
1.2 服务器清单
| 节点代号 | 角色 | 私有 IP 占位符 | 公网 IP 占位符 | 规格 | OS |
|---|---|---|---|---|---|
<MASTER_01> |
Master / Control Plane | <MASTER_IP_1_PRIV> |
<MASTER_IP_1_PUB> |
≥2vCPU 4GiB | Ubuntu 24.04 LTS |
<MASTER_02> |
Master / Control Plane | <MASTER_IP_2_PRIV> |
<MASTER_IP_2_PUB> |
≥2vCPU 4GiB | Ubuntu 24.04 LTS |
<WORKER_01> |
Worker / Node | <WORKER_IP_1_PRIV> |
<WORKER_IP_1_PUB> |
≥2vCPU 4GiB | Ubuntu 24.04 LTS |
<WORKER_02> |
Worker / Node | <WORKER_IP_2_PRIV> |
<WORKER_IP_2_PUB> |
≥2vCPU 4GiB | Ubuntu 24.04 LTS |
角色分配规则 :Master 节点承载 Control Plane 组件(API Server、etcd、Scheduler、Controller Manager);Worker 节点承载业务 Pod。
⚠️ 警告 :偶数个 Master 节点(如2个)存在脑裂风险,Sealos 会提示确认。生产环境建议使用 3个 Master 节点确保 etcd 仲裁机制可靠。
二、前置准备
2.1 操作系统初始化(所有节点执行)
以下步骤需在 4 台服务器上分别执行。
2.1.1 设置主机名
bash
# == 在 Master 01 上执行 ==
hostnamectl set-hostname master01
# == 在 Master 02 上执行 ==
hostnamectl set-hostname master02
# == 在 Worker 01 上执行 ==
hostnamectl set-hostname worker01
# == 在 Worker 02 上执行 ==
hostnamectl set-hostname worker02
规范要求:
- 主机名必须全局唯一
- 严禁包含下划线(
_),否则 kubelet 注册会失败- 建议使用字母+数字的短命名(如
master01、worker01)
2.1.2 时区与时间同步
bash
# 设置时区
timedatectl set-timezone Asia/Shanghai
# 安装并启用 chrony(推荐替代 ntpdate)
apt-get update -y && apt-get install -y chrony
systemctl enable chronyd && systemctl start chronyd
# 验证时间同步
chronyc sources -v
# 预期输出:以 ^* 开头的行表示已同步
2.1.3 关闭 Swap
bash
# 临时关闭(立即生效)
swapoff -a
# 永久关闭(防止重启后恢复)
sed -i.bak '/ swap / s/^/#/' /etc/fstab
# 验证
free -h
# 预期:Swap 行全部为 0
原因:Kubernetes 强制要求禁用 Swap,否则 kubelet 无法正常启动并注册节点。
2.1.4 加载内核模块与参数
bash
# 创建内核模块配置文件
cat << 'EOF' > /etc/modules-load.d/k8s.conf
br_netfilter
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
overlay
EOF
# 立即加载
modprobe br_netfilter overlay
# 创建 sysctl 参数文件
cat << 'EOF' > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
vm.swappiness = 0
fs.file-max = 2097152
fs.inotify.max_user_instances = 8192
EOF
# 应用参数
sysctl --system
2.1.5 安装基础依赖
bash
apt-get update -y && apt-get install -y \
ebtables ethtool socat iptables conntrack \
ipset iproute2 curl wget gnupg2 \
software-properties-common lsb-release \
ca-certificates apt-transport-https
2.1.6 清理冲突组件(可选,全新系统可跳过)
bash
# 若曾安装过 Docker 或旧版 K8s,需先清理
apt-get remove -y docker docker-engine docker.io containerd runc 2>/dev/null || true
apt-get autoremove -y
rm -rf /etc/kubernetes /var/lib/kubelet /var/lib/etcd /etc/cni /opt/cni
2.2 SSH 免密配置
Sealos 支持密码认证(-p 参数),但生产环境应使用 SSH 密钥认证。
2.2.1 在本地生成密钥对
bash
# 在管理机(Master 01 或本地)生成专用密钥对
ssh-keygen -t ed25519 -C "k8s-cluster" -f ~/.ssh/id_ed25519_k8s -N ""
2.2.2 分发公钥到所有节点
bash
# 批量分发公钥(基于已有密码)
for host in <MASTER_IP_1_PUB> <MASTER_IP_2_PUB> <WORKER_IP_1_PUB> <WORKER_IP_2_PUB>; do
ssh-copy-id -i ~/.ssh/id_ed25519_k8s.pub -o StrictHostKeyChecking=no root@$host
done
替代方式 :使用
sshpass实现自动化(需安装apt-get install sshpass):
bashsshpass -p '<SSH_PASS>' ssh-copy-id -i ~/.ssh/id_ed25519_k8s.pub \ -o StrictHostKeyChecking=no root@<HOST_IP>
2.2.3 禁用密码登录(部署完成后执行)
bash
# 在所有节点上执行
sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
systemctl restart sshd
2.3 云安全组端口规划
华为云 / 阿里云控制台中,为集群安全组放行以下端口:
| 协议 | 端口范围 | 源网段 | 用途 | 方向 |
|---|---|---|---|---|
| TCP | 6443 |
<MASTER_IP_1_PRIV>/32, <MASTER_IP_2_PRIV>/32 |
Kubernetes API Server | 入 |
| TCP | 2379-2380 |
<MASTER_IP_1_PRIV>/32, <MASTER_IP_2_PRIV>/32 |
etcd 集群通信 | 入 |
| TCP | 10250 |
<ALL_NODE_CIDR> |
Kubelet API | 入 |
| TCP | 10259 |
<MASTER_CIDR> |
kube-scheduler | 入 |
| TCP | 10257 |
<MASTER_CIDR> |
kube-controller-manager | 入 |
| UDP | 8472 |
<ALL_NODE_CIDR> |
Calico VXLAN(若使用) | 入 |
| TCP | 22 |
<ADMIN_IP>/32 |
SSH 管理 | 入 |
| TCP | 443,80 |
0.0.0.0/0 |
Ingress / Web 流量 | 入 |
建议 :生产环境中将
<ALL_NODE_CIDR>限制为 VPC 私有网段(如192.168.0.0/16),不要对公网开放。
三、Sealos 安装与配置
3.1 下载并安装 Sealos CLI
在 Master 01 上执行:
bash
cd /tmp
curl -sLO "https://github.com/labring/sealos/releases/download/v5.1.1/sealos_5.1.1_linux_amd64.tar.gz"
tar -xzf sealos_5.1.1_linux_amd64.tar.gz
mv sealos /usr/bin/sealos && chmod +x /usr/bin/sealos
# 验证安装
sealos version
实际输出示例:
SealosVersion:
buildDate: "2025-11-17T04:16:18Z"
compiler: gc
gitCommit: 1e312ad2c
gitVersion: 5.1.1
goVersion: go1.23.12
platform: linux/amd64
3.2 镜像源选择(关键!)
Sealos 从 Docker Hub 拉取镜像,但 从海外服务器(如中国香港)访问 Docker Hub 极慢甚至超时 。强烈建议使用 阿里云国内镜像加速。
| 镜像 | Docker Hub 地址 | 阿里云加速地址 |
|---|---|---|
| Kubernetes | docker.io/labring/kubernetes:v1.30.7 |
registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.30.7 |
| Helm | docker.io/labring/helm:v3.19.2 |
registry.cn-shanghai.aliyuncs.com/labring/helm:v3.19.2 |
| Calico | docker.io/labring/calico:v3.28.1 |
registry.cn-shanghai.aliyuncs.com/labring/calico:v3.28.1 |
本文档实际部署使用的是阿里云镜像源,部署耗时约 8-12 分钟。若使用 Docker Hub 源,可能耗时 30 分钟以上或卡死。
3.3 Clusterfile 自定义配置(可选)
Sealos 支持通过 Clusterfile 进行精细化配置(多主高可用、etcd 数据目录、证书 SAN 等)。
yaml
# Clusterfile 示例
apiVersion: apps.sealos.io/v1beta1
kind: Cluster
metadata:
name: default
spec:
hosts:
- ips: [<MASTER_IP_1_PRIV>, <MASTER_IP_2_PRIV>]
roles: [master, amd64]
- ips: [<WORKER_IP_1_PRIV>, <WORKER_IP_2_PRIV>]
roles: [node, amd64]
image:
- registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.30.7
- registry.cn-shanghai.aliyuncs.com/labring/helm:v3.19.2
- registry.cn-shanghai.aliyuncs.com/labring/calico:v3.28.1
ssh:
passwd: "<SSH_PASS>"
pk: /root/.ssh/id_ed25519_k8s # 推荐:SSH 密钥认证
pkPasswd: ""
port: 22
user: root
env:
- criData=/var/lib/containerd # containerd 数据目录
- registryData=/var/lib/registry # 私有仓库数据目录
- defaultVIP=10.103.97.2 # 自定义 VIP(可选)
生成 Clusterfile :
sealos gen <images> --masters <ips> --nodes <ips> -p <pass> > Clusterfile应用 Clusterfile :
sealos apply -f Clusterfile
四、集群部署流程
4.1 一键部署命令
在 Master 01 上执行以下命令:
bash
sealos run \
registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.30.7 \
registry.cn-shanghai.aliyuncs.com/labring/helm:v3.19.2 \
registry.cn-shanghai.aliyuncs.com/labring/calico:v3.28.1 \
--masters <MASTER_IP_1_PRIV>,<MASTER_IP_2_PRIV> \
--nodes <WORKER_IP_1_PRIV>,<WORKER_IP_2_PRIV> \
-p '<SSH_PASS>'
⚠️ 公有云必须使用私网 IP,使用公网 IP 会导致组件间通信失败。
实际部署命令(脱敏版):
bash
sealos run \
registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.30.7 \
registry.cn-shanghai.aliyuncs.com/labring/helm:v3.19.2 \
registry.cn-shanghai.aliyuncs.com/labring/calico:v3.28.1 \
--masters 192.168.0.229,192.168.0.197 \
--nodes 192.168.0.70,192.168.0.119 \
-p '<SSH_PASS>'
4.2 部署过程关键日志解读
阶段一:前置检查
info Start to create a new cluster: master [192.168.0.229 192.168.0.197], worker [192.168.0.70 192.168.0.119], registry 192.168.0.229
info Warning: Using an even number of master nodes is a risky operation...
info checker:containerd [192.168.0.229:22 192.168.0.197:22 192.168.0.70:22 192.168.0.119:22]
- Sealos 自动检查所有节点的连通性和 containerd 状态
- 提示偶数 Master 节点的风险(需输入
master01确认继续)
阶段二:镜像拉取
Trying to pull registry.cn-shanghai.aliyuncs.com/labring/calico:v3.28.1...
Getting image source signatures
Copying blob sha256:239ae793eb342a93b3c69565e703b6bb00812dcd297c3e429655d27f088436d9
...
- 在 Master01 上拉取镜像,通过私有仓库(sealos.hub:5000)分发到其他节点
阶段三:组件初始化
info succeeded in pulling image sealos.hub:5000/kube-proxy:v1.30.7
info succeeded in pulling image sealos.hub:5000/coredns/coredns:v1.11.3
info start to sync lvscare static pod to node: 192.168.0.70:22 master: [192.168.0.229:6443 192.168.0.197:6443]
- 本地镜像仓库
sealos.hub:5000缓存了所有 K8s 镜像 - 自动为 Worker 节点生成 lvscare 静态 Pod,实现 API Server 的高可用负载均衡
阶段四:CNI 部署
info Executing pipeline RunGuest in CreateProcessor.
Release "calico" does not exist. Installing it now.
NAME: calico
NAMESPACE: tigera-operator
STATUS: deployed
REVISION: 1
- 通过 Helm 安装 Calico CNI
- Calico 组件部署到
calico-system、tigera-operator、calico-apiserver命名空间
阶段五:部署完成
info succeeded in creating a new cluster, enjoy it!
4.3 部署耗时参考
| 阶段 | 预计耗时 | 依赖因素 |
|---|---|---|
| 前置检查 | 10-30s | SSH 延迟 |
| 镜像拉取 | 5-10min | 镜像源速度(Docker Hub vs 阿里云) |
| 组件启动 | 2-3min | 服务器性能 |
| CNI 部署 | 1-2min | 网络环境 |
| 总计 | 8-15min | 主要受镜像源影响 |
五、集群验证
5.1 节点状态验证
bash
kubectl get nodes -o wide
实际输出:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
master01 Ready control-plane 115s v1.30.7 192.168.0.229 <none> Ubuntu 24.04.4 LTS 6.8.0-106-generic containerd://1.7.27
master02 Ready control-plane 93s v1.30.7 192.168.0.197 <none> Ubuntu 24.04.4 LTS 6.8.0-106-generic containerd://1.7.27
worker01 Ready <none> 87s v1.30.7 192.168.0.70 <none> Ubuntu 24.04.4 LTS 6.8.0-106-generic containerd://1.7.27
worker02 Ready <none> 89s v1.30.7 192.168.0.119 <none> Ubuntu 24.04.4 LTS 6.8.0-106-generic containerd://1.7.27
关键指标:
- ✅ 4 个节点全部
Ready - ✅ 2 个
control-plane角色(Master) - ✅ K8s 版本一致(v1.30.7)
- ✅ 容器运行时 containerd://1.7.27
5.2 核心 Pod 状态验证
bash
kubectl get pods -n kube-system
实际输出:
NAME READY STATUS RESTARTS AGE
coredns-55cb58b774-5z8jg 1/1 Running 0 98s
coredns-55cb58b774-ddt5t 1/1 Running 0 98s
etcd-master01 1/1 Running 0 112s
etcd-master02 1/1 Running 0 91s
kube-apiserver-master01 1/1 Running 0 113s
kube-apiserver-master02 1/1 Running 0 91s
kube-controller-manager-master01 1/1 Running 0 112s
kube-controller-manager-master02 1/1 Running 0 86s
kube-proxy-jlfxq 1/1 Running 0 98s
kube-proxy-k7k78 1/1 Running 0 93s
kube-proxy-lfgz8 1/1 Running 0 89s
kube-proxy-lmphf 1/1 Running 0 87s
kube-scheduler-master01 1/1 Running 0 112s
kube-scheduler-master02 1/1 Running 0 91s
kube-sealos-lvscare-worker01 1/1 Running 0 67s
kube-sealos-lvscare-worker02 1/1 Running 0 69s
5.3 Calico CNI 验证
bash
kubectl get pods -n calico-system
实际输出:
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-7d89bcb69d-s9fjv 1/1 Running 0 96s
calico-node-6vjkh 1/1 Running 0 96s
calico-node-jj5kt 1/1 Running 0 96s
calico-node-nqmk7 1/1 Running 0 96s
calico-node-tvs4l 1/1 Running 0 96s
calico-typha-5dbb89f445-lkdt9 1/1 Running 0 96s
calico-typha-5dbb89f445-wj7zm 1/1 Running 0 87s
csi-node-driver-htksw 2/2 Running 0 96s
csi-node-driver-jqz9g 2/2 Running 0 96s
5.4 etcd 高可用验证
bash
kubectl exec etcd-master01 -n kube-system -- \
etcdctl --cacert /etc/kubernetes/pki/etcd/ca.crt \
--cert /etc/kubernetes/pki/etcd/server.crt \
--key /etc/kubernetes/pki/etcd/server.key \
member list -w table
实际输出:
+------------------+---------+----------+----------------------------+----------------------------+------------+
| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS | IS LEARNER |
+------------------+---------+----------+----------------------------+----------------------------+------------+
| 154b03031c99ddf | started | master02 | https://192.168.0.197:2380 | https://192.168.0.197:2379 | false |
| 242cab370f4a29e8 | started | master01 | https://192.168.0.229:2380 | https://192.168.0.229:2379 | false |
+------------------+---------+----------+----------------------------+----------------------------+------------+
关键指标:
- ✅ 2 个 etcd 成员全部
started - ✅ Peer/Client 地址使用 HTTPS(端口 2380/2379)
- ✅ 无 learner 节点(均为 voting member)
5.5 Sealos 综合状态
bash
sealos status
关键摘要:
Registry Service Status
Port: :5000
RegistryDomain: sealos.hub:5000
Auth: admin:passw0rd
Ping: ok
Cluster Node Status
ReadyNode: 4/4
Cluster Pod Status
Namespace: calico-apiserver RunningPod: 2/2
Namespace: calico-system RunningPod: 11/11
Namespace: kube-system RunningPod: 16/16
Namespace: tigera-operator RunningPod: 1/1
Systemd Service Status
kubelet: Enable && Active
containerd: Enable && Active
registry: Enable && Active
image-cri-shim: Enable && Active
5.6 验证命令速查
bash
# 节点状态
kubectl get nodes -o wide
# 核心 Pod
kubectl get pods -n kube-system
# Calico CNI
kubectl get pods -n calico-system
# 所有命名空间 Pod
kubectl get pods -A
# 集群信息
kubectl cluster-info
# API Server 证书有效期
kubeadm certs check-expiration
# 容器运行时状态
crictl ps | head
六、故障排查清单
6.1 部署阶段常见问题
❌ 问题1:镜像拉取超时 / 卡住
现象 :sealos run 卡在 Trying to pull docker.io/...,日志长时间无更新。
原因:从香港/海外访问 Docker Hub 速度极慢。
解决:
bash
# 使用阿里云国内镜像加速
sealos run \
registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.30.7 \
registry.cn-shanghai.aliyuncs.com/labring/helm:v3.19.2 \
registry.cn-shanghai.aliyuncs.com/labring/calico:v3.28.1 \
...
❌ 问题2:偶数 Master 节点确认提示
现象:
Warning: Using an even number of master nodes is a risky operation...
Do you want to continue on 'master01' cluster? Input 'master01' to continue:
解决 :输入集群名(默认 default 或第一个 Master 主机名)确认。
根本解决 :增加一个 Master 节点改为 3 Master。
❌ 问题3:节点 NotReady
排查步骤:
bash
# 1. 检查 kubelet 状态
journalctl -u kubelet -f
# 2. 检查 kubelet 日志
journalctl -u kubelet --no-pager -n 100
# 3. 检查 containerd 状态
systemctl status containerd
crictl ps
# 4. 检查节点资源
kubectl describe node <NODE_NAME>
常见原因:
- Swap 未关闭 → 执行
swapoff -a - 时间不同步 → 启动
chronyd - 内核参数未加载 → 执行
sysctl --system - CNI 未就绪 → 检查 Calico Pod 状态
❌ 问题4:etcd 启动失败
排查:
bash
# 查看 etcd Pod 日志
kubectl logs -n kube-system etcd-master01
# 检查 etcd 数据目录
ls -la /var/lib/etcd/
# 检查证书
ls -la /etc/kubernetes/pki/etcd/
常见原因:
- 数据目录损坏 → 清理后重新部署
- 证书过期 →
kubeadm certs renew all - 节点间时间不同步 → 同步 NTP
6.2 日志定位路径
| 组件 | 日志路径 | 查看命令 |
|---|---|---|
| kubelet | journald | journalctl -u kubelet -f |
| containerd | journald | journalctl -u containerd -f |
| sealos | 部署日志 | cat /root/sealos-deploy.log |
| Pod 日志 | containerd | crictl logs <container-id> |
| API Server | Pod 日志 | kubectl logs -n kube-system kube-apiserver-master01 |
| etcd | Pod 日志 | kubectl logs -n kube-system etcd-master01 |
6.3 网络调试命令
bash
# 查看 Calico 节点状态
kubectl get nodes -o wide
# 查看 Calico IP 池
kubectl get ippools -o yaml
# 测试 Pod 间连通性
kubectl run test --image=busybox --rm -it -- ping <POD_IP>
# 查看 Calico 节点 BGP 状态
kubectl exec -n calico-system calico-node-xxx -- calicoctl node status
# 查看网络策略(如有)
kubectl get networkpolicies -A
七、生产加固建议
7.1 RBAC 权限最小化
bash
# 创建只读用户(仅允许 get/list/watch)
kubectl create serviceaccount readonly-user -n default
kubectl create clusterrolebinding readonly-binding \
--clusterrole=view --serviceaccount=default:readonly-user
# 生成 Token
kubectl create token readonly-user -n default
# 限制管理员权限,禁止默认 ServiceAccount 自动绑定
kubectl patch serviceaccount default -n default \
-p '{"automountServiceAccountToken": false}'
7.2 API Server 访问控制
bash
# 查看当前 Admission Controller
kubectl exec -n kube-system kube-apiserver-master01 -- \
kube-apiserver --help | grep enable-admission-plugins
# 推荐启用的 Admission Controller
# --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ResourceQuota,LimitRanger
7.3 etcd 备份与恢复
备份:
bash
# 方式一:使用 etcdctl 快照
kubectl exec etcd-master01 -n kube-system -- \
etcdctl --cacert /etc/kubernetes/pki/etcd/ca.crt \
--cert /etc/kubernetes/pki/etcd/server.crt \
--key /etc/kubernetes/pki/etcd/server.key \
snapshot save /tmp/etcd-snapshot-$(date +%Y%m%d).db
# 方式二:使用 sealos backup(如支持)
# sealos backup --cluster default /backup/cluster-$(date +%Y%m%d).tar
恢复:
bash
# 1. 停止 kubelet 和所有 Control Plane Pod
# 2. 恢复 etcd 数据
etcdctl snapshot restore /tmp/etcd-snapshot-xxx.db \
--data-dir=/var/lib/etcd-restored
# 3. 更新 etcd 数据目录并重启
# 4. 重新部署集群(如需要)
7.4 证书轮换
bash
# 检查证书有效期
kubeadm certs check-expiration
# 自动轮换所有证书
kubeadm certs renew all
# 重启 Control Plane 组件以加载新证书
systemctl restart kubelet
7.5 监控集成(Prometheus + Grafana)
Sealos 生态提供了快捷部署方式:
bash
# 使用 sealos 安装 Prometheus 监控栈
sealos run docker.io/labring/kube-prometheus-stack:v0.72.0 \
--masters <MASTER_IP> -p '<SSH_PASS>'
# 或使用 Helm 手动安装
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring --create-namespace
关键监控指标:Node CPU/Memory、Pod 重启次数、etcd 磁盘延迟、API Server 请求延迟、容器网络丢包率。
八、附录
附录 A:敏感信息占位符说明
| 占位符 | 含义 | 示例 |
|---|---|---|
<MASTER_IP_1_PRIV> |
Master 01 私网 IP | 192.168.0.229 |
<MASTER_IP_2_PRIV> |
Master 02 私网 IP | 192.168.0.197 |
<WORKER_IP_1_PRIV> |
Worker 01 私网 IP | 192.168.0.70 |
<WORKER_IP_2_PRIV> |
Worker 02 私网 IP | 192.168.0.119 |
<MASTER_IP_1_PUB> |
Master 01 公网 IP | 用于 SSH 连接 |
<WORKER_IP_1_PUB> |
Worker 01 公网 IP | 用于 SSH 连接 |
<SSH_PASS> |
SSH 密码 | 仅用于初始部署 |
<ADMIN_IP> |
管理机 IP | 用于安全组白名单 |
<ALL_NODE_CIDR> |
节点所在网段 | 192.168.0.0/16 |
附录 B:Clusterfile 完整示例
yaml
apiVersion: apps.sealos.io/v1beta1
kind: Cluster
metadata:
name: default
spec:
hosts:
- ips: [192.168.0.229, 192.168.0.197]
roles: [master, amd64]
- ips: [192.168.0.70, 192.168.0.119]
roles: [node, amd64]
image:
- registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.30.7
- registry.cn-shanghai.aliyuncs.com/labring/helm:v3.19.2
- registry.cn-shanghai.aliyuncs.com/labring/calico:v3.28.1
ssh:
passwd: "<SSH_PASS>"
pk: /root/.ssh/id_ed25519_k8s
pkPasswd: ""
port: 22
user: root
env:
- criData=/var/lib/containerd
- registryData=/var/lib/registry
附录 C:国内镜像源替换表
| 官方镜像源 | 国内加速源 | 说明 |
|---|---|---|
registry.k8s.io |
registry.aliyuncs.com/google_containers |
K8s 官方镜像 |
docker.io |
docker.mirrors.sjtug.sjtu.edu.cn |
Docker Hub(交大) |
docker.io |
docker.m.daocloud.io |
Docker Hub(DaoCloud) |
docker.io/labring/* |
registry.cn-shanghai.aliyuncs.com/labring/* |
Sealos 镜像 |
quay.io |
quay.mirrors.ustc.edu.cn |
Quay(中科大) |
ghcr.io |
ghcr.m.daocloud.io |
GitHub Container Registry |
附录 D:Sealos 常用命令速查表
| 命令 | 功能 |
|---|---|
sealos version |
查看 Sealos 版本 |
sealos images |
查看本地镜像 |
sealos pull <image> |
拉取镜像 |
sealos run <images> --masters <ips> --nodes <ips> -p <pass> |
部署集群 |
sealos apply -f Clusterfile |
通过配置部署 |
sealos status |
查看集群状态 |
sealos add --nodes <ip> -p <pass> |
添加 Worker 节点 |
sealos delete --nodes <ip> -p <pass> |
删除节点 |
sealos reset |
重置/清理集群 |
sealos exec "<cmd>" --masters --nodes |
在节点上执行命令 |
sealos scp <local> <remote> --masters --nodes |
复制文件到节点 |
附录 E:版本兼容性说明
| Sealos 版本 | 最高支持 K8s 版本 | 说明 |
|---|---|---|
| v5.1.1 | v1.30.x | 当前稳定版,本文档验证 |
| v5.1.0 | v1.29.x ~ v1.30.x | 推荐用于生产 |
| v5.0.x | v1.28.x ~ v1.29.x | 较旧版本 |
| 未来版本 | v1.31.x / v1.32.x | 关注 Sealos Release 页面更新 |
升级到 v1.32 的路径 :等待 Sealos 发布支持 v1.32 的新版本,然后使用
sealos run指定新版本镜像即可原地升级。
变更记录
| 版本 | 日期 | 变更内容 | 作者 |
|---|---|---|---|
| v1.0 | 2026-05-30 | 初稿,基于理论文档编写 | --- |
| v2.0 | 2026-05-30 | 实际服务器部署验证,补充真实命令输出和故障排查 | --- |