Sealos 部署 Kubernetes 高可用集群 — 生产级技术笔记

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. 架构图与服务器清单
  2. 前置准备
  3. [Sealos 安装与配置](#Sealos 安装与配置)
  4. 集群部署流程
  5. 集群验证
  6. 故障排查清单
  7. 生产加固建议
  8. 附录

一、架构图与服务器清单

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 注册会失败
  • 建议使用字母+数字的短命名(如 master01worker01
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):

bash 复制代码
sshpass -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(可选)

生成 Clusterfilesealos gen <images> --masters <ips> --nodes <ips> -p <pass> > Clusterfile

应用 Clusterfilesealos 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-systemtigera-operatorcalico-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 实际服务器部署验证,补充真实命令输出和故障排查 ---

相关推荐
東隅已逝,桑榆非晚1 小时前
C语言预处理详解:从宏到条件编译
c语言·笔记·算法
赵民勇11 小时前
fuse-overlayfs命令详解
linux·容器
sulikey11 小时前
个人Linux操作系统学习笔记6 - 操作系统与进程初识
linux·笔记·学习·操作系统·进程
XGeFei12 小时前
【Fastapi学习笔记(3)】——资源的层级关系、安全性-幂等性、Field、工厂函数
笔记·学习·fastapi
星恒随风13 小时前
Python 基础语法详解(一):从表达式、变量到数据类型
开发语言·笔记·python·学习
JAVA社区14 小时前
Java高级全套教程(十一)—— Kubernetes 超详细企业级实战详解
java·运维·微服务·容器·面试·kubernetes
暴躁小师兄数据学院14 小时前
【AI大数据工程师特训笔记】第14讲:Linux操作系统与shell脚本
大数据·人工智能·笔记
土狗TuGou15 小时前
SQL内功笔记 · 第8篇:事务的四大特性与隔离级别
数据库·笔记·后端·sql·mysql·oracle
智者知已应修善业15 小时前
【51单片机用T0定时器方式1,实现0.5S的时间间隔实现第一次一个灯亮、第二次二个灯亮,直到全部灯亮,然后重复整个过程】2023-12-29
c++·经验分享·笔记·算法·51单片机