VPP 生产 Kubernetes 高可用集群 — 部署过程笔记
文档性质:真实服务器实操记录(非模拟),所有命令输出均为实际执行结果
部署工具:Sealos v5.1.1(build 2025-11-17,gitCommit 1e312ad2c)
Kubernetes 版本:v1.30.7
CNI:Calico v3.28.1 |Helm:v3.19.2 |容器运行时:Containerd v1.7.27 |etcd:3.5.15-0 |CoreDNS:v1.11.3
操作系统:Ubuntu 24.04.4 LTS(内核 6.8.0-106-generic)
集群规模:3 控制面(其中 2 台计算节点兼任 master + worker)+ 1 台独立 Kuboard 管理机
部署日期:2026-07-10
验证状态:✅ 全部通过(节点 Ready、etcd 3 成员健康、组件全 Running、业务可调度、Kuboard 可访问)
目录
- 服务器清单与角色规划
- 架构图
- 连通性与环境预检
- 出网能力探测与安装通道决策
- 系统初始化预置
- 安装 Sealos
- 集群部署
- 计算节点去污点(master 兼 worker)
- 集群验证
- 部署 Kuboard v3 管理面板
- 离线部署包导出
- 踩坑与排障记录
- 访问信息汇总
- 生产加固建议
- 附录:全部脚本清单
一、服务器清单与角色规划
华为云 FlexusX 实例,可用区 3,规格 8vCPUs | 16GiB(实测可用内存 14Gi),系统盘 40G,Ubuntu 24.04.4 Server 64bit。
| 主机名 | ECS 名称 | 公网 IP(弹性 BGP 5Mbit/s) | 私网 IP | 集群角色 |
|---|---|---|---|---|
| vpp-prod-k8s-master-01 | ecs-f5b7-0001 | 27.106.122.167 | 192.168.0.94 | Master(控制面专用,保留污点不跑业务) |
| vpp-prod-k8s-node-01 | ecs-f5b7-0002 | 94.74.108.161 | 192.168.0.47 | Master + Worker(兼任) |
| vpp-prod-k8s-node-02 | ecs-f5b7-0003 | 159.138.136.150 | 192.168.0.65 | Master + Worker(兼任) |
| vpp-prod-middleware-01 | ecs-f5b7-0004 | 119.13.125.127 | 192.168.0.44 | Kuboard v3(独立部署,不加入集群) |
角色设计说明:
- 3 个 master 构成奇数控制面,etcd 可容忍 1 节点故障(quorum = 2),无脑裂风险。
- node-01 / node-02 既是 master 又承载业务 Pod(去除 control-plane 污点),符合"2 台计算节点部署微服务应用集群(AIF、ARIoT、vpp-data-forwarder 等)"的需求。
- master-01 保留
NoSchedule污点,作为纯控制面,保障 API Server / etcd / scheduler 资源不被业务抢占。 - middleware-01 独立跑 Kuboard 容器(Docker),与集群解耦,即便集群异常也能通过 Kuboard 排障。
二、架构图
外部访问 (公网/运维) │ ┌───────────────────────┼────────────────────────┐ │ │ │ ▼ ▼ ▼ ┌──────────────────────────────────────────┐ ┌──────────────────────┐ │ Kubernetes 控制面 (HA) │ │ vpp-prod-middleware-01 │ │ │ │ 119.13.125.127 │ │ ┌────────────────────┐ │ │ 192.168.0.44 │ │ │ vpp-prod-k8s-master-01 │ │ ┌──────────────────┐ │ │ │ 192.168.0.94 (纯控制面, 有污点) │ │ │ Kuboard v3 │ │ │ │ apiserver/etcd/scheduler/controller │◄──┼───│ (Docker容器) │ │ │ └────────────────────┘ │ │ │ :80 UI /:10081 │ │ │ │ │ └──────────────────┘ │ │ ┌────────────────────┐ ┌────────────────┐ │ └──────────────────────┘ │ │ vpp-prod-k8s-node-01 │ │vpp-prod-k8s-node-02│ │ │ 192.168.0.47 │ │192.168.0.65 │ │ Master+Worker 兼任 │ │ apiserver/etcd/... │ │apiserver/etcd/...│ │ 承载业务微服务 Pod │ │ + 业务 Pod │ │+ 业务 Pod │ │ │ └────────────────────┘ └────────────────┘ │ │ │ │ CNI: Calico v3.28.1 (Pod CIDR 100.64.0.0/10 段实测) │ │ 内置 Registry: sealos.hub:5000 (Sealos 自带镜像仓库) │ └──────────────────────────────────────────┘三、连通性与环境预检
原则:先只读预检,全部达标后才动手改配置。预检脚本仅采集信息,不做任何写操作。
对 4 台服务器逐台 SSH 登录(root/ 密码认证),采集结果汇总:
| 检查项 | 4 台结果 | 判定 |
|---|---|---|
| SSH 22 端口 | 全部可达,登录成功 | ✅ |
| OS 版本 | Ubuntu 24.04.4 LTS (Noble Numbat) | ✅ |
| 内核 | 6.8.0-106-generic | ✅ |
| CPU / 内存 | 8 vCPU / 14Gi 可用 | ✅ |
| 根分区 | /dev/vda1 40G,已用 10% | ✅ |
| swap | 无(0B) | ✅ 符合 K8s 要求 |
| 时间同步 | Asia/Shanghai,NTP active,System clock synchronized: yes | ✅ |
| containerd / docker | inactive(未装,无冲突) | ✅ |
| 监听端口 | 仅 22(sshd) | ✅ 无 6443/2379/10250 占用 |
| 防火墙 ufw | inactive | ✅ |
| br_netfilter | 未加载 | ⚠️ 需预置(见第五节) |
关键结论:4 台机器环境干净,无历史容器/K8s 残留,时间已同步,唯一需要处理的是内核模块与 sysctl(部署前统一预置)。
四、出网能力探测与安装通道决策
生产集群拉镜像必须先确认出网通道。对 4 台机器探测各安装源可达性(HTTP 状态码):
| 目标源 | 状态码 | 可用性 |
|---|---|---|
| get.sealos.io(Sealos 官方一键脚本) | 000 | ❌ 不可达(被墙) |
| github.com | 200 | ✅ |
| GitHub Release 二进制下载 | 302 | ✅ 可下 sealos 二进制 |
| Docker Hub (registry-1.docker.io) | 401 | ✅(401 为匿名正常响应) |
| Quay.io (Calico) | 401 | ✅ |
| 阿里云容器镜像 registry.cn-* | 401 | ✅ |
| 阿里云镜像站 mirrors.aliyun.com | 301 | ✅ |
| 华为云镜像站 mirrors.huaweicloud.com | 200 | ✅ |
| 华为云 SWR | 404/200 | ✅(可拉 Kuboard 镜像) |
决策:
- Sealos 官方脚本不可用 →改从 GitHub Release 直接下载 sealos 二进制(
sealos_5.1.1_linux_amd64.tar.gz)。 - 集群镜像走阿里云 labring 镜像源
registry.cn-shanghai.aliyuncs.com/labring/*(国内速度优于 Docker Hub)。 - Kuboard 镜像走华为云 SWR
swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3。
📌离线场景说明:本次目标 ECS 自带公网可在线拉取。若真实生产网完全离线,使用第十一节导出的离线包(
vpp-k8s-images.tar+sealos二进制 +kuboard-v3.tar)拷入内网即可,命令改为sealos load -i vpp-k8s-images.tar后sealos run本地镜像。
五、系统初始化预置
对 3 台 K8s 节点统一执行(middleware-01 只设主机名 + hosts + 装 Docker)。
5.1 设置主机名
hostnamectl set-hostname vpp-prod-k8s-master-01# 各机对应5.2 加载内核模块(持久化)
cat>/etc/modules-load.d/k8s.conf<<'EOF' br_netfilter overlay ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack EOFmodprobe br_netfilter overlay ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack5.3 内核参数 sysctl
cat>/etc/sysctl.d/k8s.conf<<'EOF' 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 EOFsysctl--system实测确认生效:
net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 15.4 配置 /etc/hosts(4 台一致)
cat>>/etc/hosts<<'EOF' # VPP K8s Cluster 192.168.0.94 vpp-prod-k8s-master-01 192.168.0.47 vpp-prod-k8s-node-01 192.168.0.65 vpp-prod-k8s-node-02 192.168.0.44 vpp-prod-middleware-01 EOF5.5 持久化禁用 swap
sed-i.bak'/ swap / s/^/#/'/etc/fstab# 本次实例本就无 swap,仅做持久化保险5.6 middleware-01 安装 Docker(供 Kuboard 运行)
apt-getupdate-yDEBIAN_FRONTEND=noninteractiveapt-getinstall-ydocker.io systemctlenabledocker&&systemctl restartdockerdocker--version# => Docker version 29.1.3, build 29.1.3-0ubuntu3~24.04.2六、安装 Sealos
在master-01(引导节点)安装 Sealos CLI:
cd/tmpcurl-sL-osealos.tar.gz\"https://github.com/labring/sealos/releases/download/v5.1.1/sealos_5.1.1_linux_amd64.tar.gz"tar-xzfsealos.tar.gz sealosmv-fsealos /usr/bin/sealos&&chmod+x /usr/bin/sealos sealos version实测输出:
SealosVersion:buildDate:"2025-11-17T04:16:18Z"gitVersion:5.1.1gitCommit:1e312ad2cgoVersion:go1.23.12platform:linux/amd64二进制 74MB,从 GitHub Release 下载约 30s。Sealos 会自动分发到其他节点,无需在每台手动装。
七、集群部署
7.1 部署命令(关键:使用私网 IP + 3 master)
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\--masters192.168.0.94,192.168.0.47,192.168.0.65\-p'1qaz@WSX'⚠️必须使用私网 IP(
192.168.0.x)。若填公网 IP,组件间通信(etcd peer、apiserver)会因走公网/带宽限速而失败或极慢。
7.2 部署过程日志(关键节点摘录)
info Start to create a new cluster: master [192.168.0.94 192.168.0.47 192.168.0.65], worker [], registry 192.168.0.94 info Executing pipeline Check in CreateProcessor. info checker:hostname / timeSync / containerd # 预检全过 info Executing pipeline PreProcess in CreateProcessor. Trying to pull registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.30.7 ... # 拉镜像 ... info Executing pipeline Join in CreateProcessor. info [192.168.0.47:22 192.168.0.65:22] will be added as master # 2/3 master join info start to copy kubeconfig / etc pki files to masters ...Sealos ASCII LOGO... Version: 5.1.1-1e312ad2c⏱️ 5Mbit/s 小带宽下镜像拉取(kubernetes + helm + calico)约需 12–15 分钟,是耗时主体。带宽充足时通常 3–5 分钟。
八、计算节点去污点(master 兼 worker)
sealos run默认所有 master 都带node-role.kubernetes.io/control-plane:NoSchedule污点。要让 node-01 / node-02 兼任 worker 承载业务,需去除其污点:
exportKUBECONFIG=/root/.kube/configforninvpp-prod-k8s-node-01 vpp-prod-k8s-node-02;dokubectl taint nodes$nnode-role.kubernetes.io/control-plane:NoSchedule- kubectl label nodes$nnode-role.kubernetes.io/worker=--overwritedone实测输出:
node/vpp-prod-k8s-node-01 untainted node/vpp-prod-k8s-node-01 labeled node/vpp-prod-k8s-node-02 untainted node/vpp-prod-k8s-node-02 labeled去污点后各节点污点状态(master-01 仍保留污点):
NODE TAINTS vpp-prod-k8s-master-01 [map[effect:NoSchedule key:node-role.kubernetes.io/control-plane]] vpp-prod-k8s-node-01 <none> vpp-prod-k8s-node-02 <none>💡为何不用
--nodes参数:见第十二节踩坑记录 —— Sealos 不允许同一 IP 同时出现在--masters和--nodes。正确做法就是只声明 master,再对计算节点去污点。
九、集群验证
9.1 节点状态(全部 Ready)
NAME STATUS ROLES VERSION INTERNAL-IP CONTAINER-RUNTIME vpp-prod-k8s-master-01 Ready control-plane v1.30.7 192.168.0.94 containerd://1.7.27 vpp-prod-k8s-node-01 Ready control-plane v1.30.7 192.168.0.47 containerd://1.7.27 vpp-prod-k8s-node-02 Ready control-plane v1.30.7 192.168.0.65 containerd://1.7.279.2 etcd 集群(3 成员全 started)
+------------------+---------+------------------------+---------------------------+ | ID | STATUS | NAME | PEER ADDRS | +------------------+---------+------------------------+---------------------------+ | 13198608b71aa6a2 | started | vpp-prod-k8s-node-01 | https://192.168.0.47:2380 | | 34a8ab6037c59ee9 | started | vpp-prod-k8s-node-02 | https://192.168.0.65:2380 | | d1be2546b82881c0 | started | vpp-prod-k8s-master-01 | https://192.168.0.94:2380 | +------------------+---------+------------------------+---------------------------+9.3 核心组件(全部 Running)
- kube-apiserver × 3、kube-controller-manager × 3、kube-scheduler × 3、etcd × 3(每 master 一份)
- kube-proxy × 3、coredns × 2
- Calico:calico-node × 3、calico-typha × 2、calico-kube-controllers × 1、csi-node-driver × 3、tigera-operator × 1
sealos status关键输出:
Cluster Node Status: ReadyNode: 3/3 kube-system RunningPod: 17/17 calico-system RunningPod: 9/9 内置 Registry: sealos.hub:5000 Ping: ok kubelet / containerd / registry / image-cri-shim: Enable && Active9.4 证书有效期
Sealos 签发的证书有效期99 年(至 2126-06-16),仅super-admin.conf为 1 年(364 天,2027-07-10 到期,属正常设计)。
9.5 业务调度验证(Pod 能落到计算节点)
kubectl create deployment sched-test--image=nginx:alpine--replicas=2kubectl get pods-owide-lapp=sched-test实测:
NAME STATUS NODE sched-test-74cb497f55-mrfdg Running vpp-prod-k8s-node-01 sched-test-74cb497f55-pjxw9 ContainerCreating vpp-prod-k8s-node-02✅ 两个 Pod 分别调度到 node-01、node-02,证明计算节点已可承载业务。验证后已删除测试 Deployment。
十、部署 Kuboard v3 管理面板
在独立机middleware-01上以 Docker 容器方式部署(不占用集群资源)。
10.1 生成对外 kubeconfig(server 指向 master-01 私网 IP)
# master-01 上cp/root/.kube/config /root/vpp-k8s-kubeconfig.yamlsed-i's#server: https://apiserver.cluster.local:6443#server: https://192.168.0.94:6443#'\/root/vpp-k8s-kubeconfig.yaml⚠️ 原 kubeconfig 的 server 是域名
apiserver.cluster.local,middleware-01 无法解析,必须改成 master-01 的私网 IP。
10.2 middleware-01 网络连通性验证
curl-khttps://192.168.0.94:6443/version返回:
{"major":"1","minor":"30","gitVersion":"v1.30.7","platform":"linux/amd64"}✅ middleware-01 → API Server 私网连通。
10.3 启动 Kuboard 容器
dockerrun-d--restart=unless-stopped--name=kuboard\-p80:80/tcp-p10081:10081/tcp\-eKUBOARD_ENDPOINT="http://192.168.0.44:80"\-eKUBOARD_AGENT_SERVER_TCP_PORT="10081"\-v/etc/kuboard:/etc/kuboard\swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3容器状态:
kuboard Up 2 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:10081->10081/tcpUI 健康检查:
curl http://127.0.0.1:80 => HTTP 303 (未登录重定向到登录页,服务正常)✅ Kuboard Web 服务正常。
10.4 导入集群
- 浏览器访问
http://119.13.125.127(默认账号admin/ 密码Kuboard123,首次登录后请立即修改) - 添加集群 → 导入已有 Kubernetes 集群 → 上传/粘贴
/etc/kuboard/kubeconfig-vpp-prod.yaml(已就绪于 middleware-01)
十一、离线部署包导出
为满足"生产环境离线部署"需求,在已部署机器上导出全部制品(已实操导出并确认真实大小),可直接拷入无外网内网复用。
⚠️关键点:
sealos save一次只导出一个镜像,语法为sealos save -o <文件> <镜像名>(sealos save -o x.tar不带镜像参数会报Error: requires at least 1 arg(s))。因此需对 3 个集群镜像分别导出。Clusterfile 的真实路径是/root/.sealos/default/Clusterfile(不是/root/.sealos/Clusterfile)。
# master-01:分别导出 3 个集群镜像 + Clusterfile + sealos 二进制mkdir-p/root/offline sealos save-o/root/offline/kubernetes-v1.30.7.tar registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.30.7 sealos save-o/root/offline/helm-v3.19.2.tar registry.cn-shanghai.aliyuncs.com/labring/helm:v3.19.2 sealos save-o/root/offline/calico-v3.28.1.tar registry.cn-shanghai.aliyuncs.com/labring/calico:v3.28.1cp/usr/bin/sealos /root/offline/sealoscp/root/.sealos/default/Clusterfile /root/offline/vpp-k8s-clusterfile.yaml# middleware-01:导出 Kuboard 镜像dockersave-o/root/offline/kuboard-v3.tar swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3实际导出结果(ls -lh /root/offline/):
# master-01 /root/offline/ (合计 822M) -rw-r--r-- 1 root root 369M kubernetes-v1.30.7.tar -rw-r--r-- 1 root root 356M calico-v3.28.1.tar -rw-r--r-- 1 root root 19M helm-v3.19.2.tar -rwxr-xr-x 1 root root 79M sealos -rw-r--r-- 1 root root 2.9K vpp-k8s-clusterfile.yaml # middleware-01 /root/offline/ -rw------- 1 root root 126M kuboard-v3.tar离线部署包清单(两机合计约 948 MB):
| 制品 | 位置 | 实际大小 | 用途 |
|---|---|---|---|
| sealos | master-01/root/offline/sealos | 79 MB | Sealos CLI 二进制 |
| kubernetes-v1.30.7.tar | master-01/root/offline/ | 369 MB | K8s 核心镜像(含 kubeadm/etcd/coredns/containerd 等) |
| calico-v3.28.1.tar | master-01/root/offline/ | 356 MB | CNI 网络插件镜像 |
| helm-v3.19.2.tar | master-01/root/offline/ | 19 MB | Helm 包管理器镜像 |
| vpp-k8s-clusterfile.yaml | master-01/root/offline/ | 2.9 KB | 集群定义文件(含 hosts/image/env) |
| kuboard-v3.tar | middleware-01/root/offline/ | 126 MB | Kuboard v3 管理面板镜像 |
离线环境使用方式:
# ===== 集群节点:拷入 /root/offline 后 =====cp/root/offline/sealos /usr/bin/sealos&&chmod+x /usr/bin/sealos# 1. 逐个导入集群镜像sealos load-i/root/offline/kubernetes-v1.30.7.tar sealos load-i/root/offline/helm-v3.19.2.tar sealos load-i/root/offline/calico-v3.28.1.tar# 2. 用本地镜像部署(镜像名与在线时完全一致,Sealos 命中本地缓存不再拉取)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<私网IP1>,<私网IP2>,<私网IP3>-p'<密码>'# ===== Kuboard 机:拷入后 =====dockerload-i/root/offline/kuboard-v3.tar# 再按第十节 docker run 命令启动 Kuboard 容器即可💡 也可直接复用导出的
vpp-k8s-clusterfile.yaml:sealos apply -f vpp-k8s-clusterfile.yaml,一步还原本次同拓扑集群(记得改内网 IP 与密码)。
十二、踩坑与排障记录
坑 1:Error: has duplicate ip
现象:首次执行sealos run ... --masters A,B,C --nodes B,C立即报错:
Error: has duplicate ip: [192.168.0.47 192.168.0.65]原因:Sealos 不允许同一 IP 同时出现在--masters和--nodes。
解决:只在--masters声明 3 个 IP,部署完成后对 node-01/node-02 执行kubectl taint ... control-plane:NoSchedule-去污点,使其兼任 worker。
坑 2:镜像拉取"看起来卡住"
现象:tail sealos-deploy.log长时间停在Copying blob ...,疑似卡死。
排查:
cat/proc/net/dev# eth0 接收字节持续增长(639MB→936MB)ss-tnstate established# 有到阿里云 CDN 的活跃 443 连接ps-opcpu,etime-p<pid># sealos 进程 CPU 正常结论:并非卡死,而是 skopeo 用\r刷新进度条、tail看不到变化;5Mbit/s 带宽下大镜像本就慢。判断拉取是否真卡住,看/proc/net/dev收字节增量,而非日志文本变化。
坑 3:Kuboard 导入 kubeconfig 用了域名
现象:默认 kubeconfig 的server: https://apiserver.cluster.local:6443,middleware-01 无法解析该域名。
解决:sed替换为 master-01 私网 IPhttps://192.168.0.94:6443。
坑 4(Windows 侧):venv 路径差异
现象:Windows 上python -m venv生成的可执行文件在.venv/Scripts/而非.venv/bin/,导致首次 pip 安装脚本路径错误。
解决:Windows 统一用.venv/Scripts/python.exe。
坑 5:sealos save缺镜像参数 + Clusterfile 路径
现象 1:导出离线包时sealos save -o /root/vpp-k8s-images.tar(不带镜像名)直接报错:
Error: requires at least 1 arg(s), only received 0原因:sealos save一次只导出一个指定镜像,正确语法是sealos save -o <文件> <镜像名>(见sealos save --help的示例sealos save -o kubernetes.tar labring/kubernetes:latest)。
解决:先sealos images列出 3 个镜像,再对 kubernetes / helm / calico 分别sealos save(若坚持单文件可加-m --format docker-archive生成多镜像归档,但分开导出更稳)。
现象 2:cp /root/.sealos/Clusterfile ...提示文件不存在。
原因:Clusterfile 实际位于以集群名命名的子目录下,本次集群名为default,故真实路径为/root/.sealos/default/Clusterfile。
解决:用find /root/.sealos -name Clusterfile定位,或直接cp /root/.sealos/default/Clusterfile。
十三、访问信息汇总
| 项目 | 值 |
|---|---|
| K8s API Server | https://192.168.0.94:6443(私网),域名 apiserver.cluster.local:6443 |
| kubeconfig | master-01/root/.kube/config;对外副本/root/vpp-k8s-kubeconfig.yaml |
| kubectl 入口 | 登录 master-01(27.106.122.167)即可kubectl |
| Kuboard UI | http://119.13.125.127 (私网 http://192.168.0.44) |
| Kuboard 默认账号 | admin / Kuboard123(务必首登修改) |
| 内置镜像仓库 | sealos.hub:5000(admin / passw0rd) |
十四、生产加固建议
- 修改默认密码:Kuboard 默认
admin/Kuboard123、内置 registryadmin/passw0rd,上线前必须改。 - 安全组收敛:仅对运维网段开放 6443、80(Kuboard)、22;关闭公网对 6443 的直接暴露,运维走跳板/VPN。
- 关闭 root 密码登录:改用 SSH 密钥;本次为快速部署使用了密码认证,生产应切换密钥并禁用
PasswordAuthentication。 - etcd 定期备份:
etcdctl snapshot save,配合定时任务;3 节点 etcd 只能容忍 1 台故障。 - 资源预留:master-01 保持污点专职控制面;为 kubelet 配置
--system-reserved/--kube-reserved防业务打满。 - 监控告警:部署 Prometheus + Grafana(可用 Kuboard 套件或 Helm),监控节点/etcd/证书到期。
- super-admin.conf 到期:2027-07-10 到期,到期前
kubeadm certs renew或改用长期证书。 - 磁盘扩容:当前系统盘 40G,业务镜像多时需挂载独立数据盘给 containerd(
/var/lib/containerd)。
十五、附录:全部脚本清单
所有实操通过 Python + paramiko 远程执行,脚本位于vpp-k8s-deploy/scripts/:
| 脚本 | 作用 |
|---|---|
preflight.py | 只读环境预检(不改配置) |
egress_probe.py | 出网能力探测(决定安装通道) |
prepare.py | 系统初始化预置(主机名/内核/sysctl/hosts/Docker) |
install_sealos.py | master-01 安装 Sealos 二进制 |
deploy.py | 部署集群 + 自动去污点 |
wait_and_post.py | 等待部署完成的监控器 |
verify.py | 集群综合验证 |
kuboard.py | 部署 Kuboard + 生成 kubeconfig |
probe_offline.py | 只读探测 sealos 镜像列表 / save 语法 / Clusterfile 路径 |
offline_export.py | 导出离线部署包(3 镜像 + Clusterfile + sealos + Kuboard) |
check_kuboard.py | 只读检查 Kuboard 容器状态与 HTTP 可达性 |
执行环境:本地 Windows +
.venv/Scripts/python.exe(paramiko 5.0.0)。凭据在脚本内以明文示例呈现,生产请改为环境变量或密钥认证。
集群部署完成时间:2026-07-10 12:43 CST
离线包导出完成时间:2026-07-10 12:53 CST
最终状态:✅ 3 节点 HA 集群健康运行,业务可调度,Kuboard 管理面板可访问,离线部署包已导出(两机合计约 948 MB)