国产 K8s 部署与管理平台运维指令手册

运维指令手册 26.3 KB 原文

国产 K8s 部署与管理平台运维指令手册

覆盖范围:KubeKey / KubeOperator / kubeasz(部署器)、Kuboard v4 / Rainbond v6(管理与 PaaS)、DaoCloud DCE / 灵雀云 ACP / KubeCube / Karmada 等概览 底座:Kubernetes 1.26 ~ 1.37、containerd 1.7/2.x、Docker 24~29 宿主系统:Ubuntu 20.04/22.04/24.04、Debian 11/12、CentOS 7/8、RHEL 8/9、Rocky/Alma、openEuler、麒麟 V10、统信 UOS 约定:# root 或 sudo,$ 普通用户,<xxx> 为占位符,kubectl 简写 k(仅说明用,命令一律写全)。 边界说明:KubeKey 的完整用法在 KubeSphere 分册,本文只讲它独立使用时的差异;Sealos 见独立分册。 更新时间:2026-11(版本事实核对至 2026-11-05)


目录

  1. 全景与选型
  2. 部署前通用前置
  3. KubeKey(独立使用)
  4. KubeOperator
  5. kubeasz
  6. Kuboard v4
  7. Rainbond v6
  8. 其他国产平台概览
  9. 纳管已有集群
  10. 离线交付共性问题
  11. 升级、迁移与跨工具切换
  12. 卸载通用清单
  13. 故障速查
  14. 安全基线与危险红线
  15. 附录

1. 全景与选型

1.1 三类工具,别混着比

类别 干什么 代表 是否常驻
部署器 把一堆裸机变成 K8s 集群 KubeKey、kubeasz、KubeOperator、Sealos、Kubespray 否(部署完可离场)
管理平台 / Dashboard 纳管已有集群,给 UI、RBAC、审计、终端 Kuboard v4、KubeSphere、KubeCube、DCE 是
PaaS / 应用平台 面向开发者,屏蔽 K8s 概念 Rainbond、Sealos Cloud、KubeSphere 应用商店 是

常见误区:把 Kuboard 当"安装 K8s 的工具"(它需要先有集群),或把 KubeKey 当"长期运维平台"(部署完就用不上了)。先定类别,再选产品。

1.2 选型对照

工具 出身 部署方式 离线能力 多集群 适合场景 维护活跃度提示
KubeKey 青云 / KubeSphere 自研 Go 工具,kk 强(artifact) 通过 KubeSphere KubeSphere 配套、企业交付 活跃
KubeOperator 飞致云 Web UI + Ansible 强(离线包) 是(集群生命周期管理) 传统企业、需要"集群台账" 以官方仓库当前状态为准,近年来重心转向 1Panel 等产品线
kubeasz 开源社区 Ansible + 二进制 强(ezdown) 是(多集群目录) 想完全掌控组件、等保/信创 社区维护,版本跟随 K8s 较慢
Sealos labring OCI 集群镜像 最强 有限 快速重建、内网批量交付 活跃,见独立分册
Kuboard v4 eip-work 单容器 + 外部 DB 中 强项(多集群) 已有集群要一个好用的中文控制台 活跃(v4.3.4.0,2026-11-02)
Rainbond 好雨云 Helm / 单机 dind 中 有限 应用交付、大模型私有化、VM 纳管 活跃(v6.9.0)
DaoCloud DCE 5.0 / 灵雀云 ACP 商业 厂商交付 强 强 大型政企、信创、多云 商业支持
KubeSphere 青云 Helm / ks-installer 强 强 企业级云原生平台 活跃,见独立分册

风险提示:开源项目的维护状态会变。选型时务必看最近 6 个月的 release / commit 与 issue 响应,尤其是要上生产的部署器——一个停更的部署器会让你卡在某个 K8s 版本上,安全补丁跟不上。

1.3 先判断手上这套是什么

# 部署器痕迹
ls -la /root/.kubekey/ /etc/kubeasz/ /usr/local/bin/kk /usr/local/bin/ezctl 2>/dev/null
systemctl list-units --all | grep -iE 'kubeoperator|kuboard|rainbond'
docker ps --format '{{.Names}} {{.Image}}' | grep -iE 'kuboard|rainbond|kubeoperator'

# 集群是否标准 kubeadm 产物
ls /etc/kubernetes/manifests/
kubeadm certs check-expiration 2>/dev/null

# 管理平台的命名空间
kubectl get ns | grep -iE 'kuboard|rainbond|kubesphere|kube-operator'

2. 部署前通用前置

无论用哪个部署器,下面这些是所有节点都要过的:

# 1) 主机名唯一、DNS/hosts 可达
hostnamectl set-hostname k8s-master-01
cat >> /etc/hosts <<'EOF'
10.0.0.11 k8s-master-01
10.0.0.12 k8s-master-02
10.0.0.21 k8s-worker-01
EOF

# 2) 时间同步
timedatectl set-timezone Asia/Shanghai
systemctl enable --now chronyd 2>/dev/null || systemctl enable --now systemd-timesyncd
chronyc sources 2>/dev/null || timedatectl

# 3) 关闭 swap
swapoff -a
sed -ri 's/^([^#].*swap.*)$/#\1/' /etc/fstab

# 4) 内核模块与参数(二进制部署尤其要手工做)
cat > /etc/modules-load.d/k8s.conf <<'EOF'
overlay
br_netfilter
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
modprobe overlay br_netfilter

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
EOF
sysctl --system

# 5) 依赖
yum install -y socat conntrack ebtables ipset ipvsadm \
               curl wget tar device-mapper-persistent-data lvm2    # RHEL 系
apt install -y socat conntrack ebtables ipset ipvsadm curl wget tar # Debian 系

# 6) cgroup 版本(K8s 1.35+ 对 v1 默认失败)
stat -fc %T /sys/fs/cgroup/        # cgroup2fs = v2,tmpfs = v1

# 7) 端口不冲突
ss -tunlp | grep -E ':6443|:2379|:2380|:10250|:10257|:10259'

# 8) 无旧集群残留
ls -la /etc/kubernetes /var/lib/etcd /etc/cni/net.d 2>/dev/null

坑:网段冲突是内网部署第一大坑。部署前把 podSubnet(默认常见 10.244.0.0/16、100.64.0.0/17、10.233.64.0/18)和 serviceSubnet 与内网、VPN、办公网、已有集群逐一比对;改成 100.64.0.0/10 段的一部分通常最安全。


3. KubeKey(独立使用)

KubeKey 的完整安装、配置、HA、离线 artifact 见 KubeSphere 常用运维指令手册第 3、6 章。本节只讲"不用 KubeSphere,只拿 kk 装 K8s"时的要点。

3.1 独立部署

export KKZONE=cn
curl -sfL https://get-kk.kubesphere.io | sh -
chmod +x kk
./kk version
./kk create config --with-kubernetes v1.30.6
vi config-sample.yaml             # 只填 hosts / roleGroups / network / kubernetes
./kk create cluster -f config-sample.yaml

别加 --with-kubesphere:那是 v3 时代让 KubeKey 顺手装 KubeSphere 的参数,只装 K8s 时不需要;在 v4 场景用了反而会装出不需要的组件。

3.2 常用操作

./kk add nodes -f config-sample.yaml
./kk delete node <node> -f config-sample.yaml
./kk upgrade --with-kubernetes v1.31.x -f config-sample.yaml
./kk create manifest --with-kubernetes v1.30.6        # 生成离线清单
./kk artifact export -m manifest-sample.yaml -o k8s-artifact.tar.gz
./kk create cluster -f config-sample.yaml --with-packages
./kk delete cluster -f config-sample.yaml

3.3 addons 机制

spec:
  addons:
  - name: nfs-client
    namespace: kube-system
    sources:
      chart:
        name: nfs-client-provisioner
        repo: https://charts.helm.sh/stable
        values:
        - storageClass.defaultClass=true
  - name: custom-yaml
    sources:
      yaml:
        path: [/data/myapp.yaml]

addons 在集群创建后由 KubeKey 应用。离线环境里 addon 的 chart/yaml 也要提前放到本地路径,否则 kk create cluster 最后一步卡住。

3.4 与 kubeadm 产物的关系

KubeKey 生成的集群本质仍是 kubeadm 集群(部分版本走自研二进制分发),/etc/kubernetes/manifests/、kubeadm certs、kubectl、crictl 都能用。节点变更优先用 kk add/delete,别直接 kubeadm join,否则配置文件与实际拓扑会漂移。


4. KubeOperator

4.1 定位

飞致云开源的 Kubernetes 集群生命周期管理平台:通过 Web UI 完成「机器 → 规划 → 部署 → 扩缩容 → 升级 → 备份 → 销毁」,底层用 Ansible 下发,支持 VMware / OpenStack / 公有云 IaaS 与裸机,提供离线安装包。适合需要"集群台账 + 审批流 + 重复交付"的传统企业。

维护状态提示:KubeOperator 的项目活跃度与飞致云产品线重心(近年明显偏向 1Panel / MaxKB 等)相关,上生产前以官方 GitHub 最近 release 与 issue 响应为准,并确认它支持你需要的 K8s 版本。若只支持到较旧的 K8s,不建议用于新建生产集群。

4.2 安装(典型形态)

# 在线安装(以官方发布脚本为准)
curl -sSL https://github.com/KubeOperator/KubeOperator/releases/latest/download/install.sh | bash
# 或离线包上传后执行
tar zxf kubeoperator-offline-<ver>.tar.gz && cd kubeoperator-offline && bash install.sh

安装后一般会启动一组容器(Web、API、Ansible 执行器、内置数据库/注册表):

docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Ports}}'
ss -tunlp | grep -E ':80 |:8080|:443 '
docker compose -f <安装目录>/docker-compose.yml logs -f

4.3 运维要点

项 要点
集群规划 在 UI 里定义「区域 / 可用区 / 主机 / 计划」,主机需 SSH 可达且凭据正确
部署 UI 触发后由 Ansible 执行器跑 playbook,可在任务日志里看每一步
离线包 内含 K8s 二进制、容器镜像、rpm/deb,导入到内置 Registry
扩容/缩容 UI 操作,底层改 kubeadm/etcd 成员;删 master 前确认 etcd 奇数
升级 UI 选目标版本,一次一个 minor,先看兼容矩阵
备份 etcd 快照 + 集群元数据导出,异地保存
纳管已有集群 导入 kubeconfig 后可做有限管理(见第 9 章)
日志 docker compose logs -f + UI 任务日志 + 目标节点 journalctl -u kubelet
# 排障常用
docker compose -f <安装目录>/docker-compose.yml ps
docker compose -f <安装目录>/docker-compose.yml logs --tail=200 <service>
ssh root@<目标节点> 'journalctl -u kubelet -n 100 --no-pager'

坑:KubeOperator 部署失败最常见的根因不是产品 bug,而是目标主机的 SSH 凭据/权限/sudo 配置、离线包镜像没导全、时间不同步。先在部署器容器里手工 ssh 一次目标机,再点部署。

4.4 卸载

cd <安装目录>
docker compose down            # 不要加 -v,除非确认集群元数据不需要
# 卸载目标节点上的 K8s 走 UI 的"销毁集群",或按第 12 章通用清单清理

5. kubeasz

5.1 定位

基于 Ansible + 二进制 的 K8s 部署项目(easysz 生态),所有组件以二进制 + systemd 方式落地,配置全部可见,适合想彻底掌控每个组件参数、做等保加固、适配信创环境的团队。代价是上手门槛最高。

5.2 目录与命令

# 部署机
ls /etc/kubeasz/
# clusters/<集群名>/hosts     主机清单
# clusters/<集群名>/config.yml  集群参数(CNI、网段、版本、运行时…)
# roles/                     ansible roles
# playbooks/                 各阶段 playbook
# bin/                       二进制与容器镜像缓存
# ezctl / ezdown             主命令 / 离线下载工具

ezdown -D                    # 下载离线资源(镜像、二进制)到 bin/
ezctl new <cluster>          # 生成新集群配置目录
ezctl checkout <cluster>     # 切换当前集群
ezctl setup <cluster> all    # 一键部署
ezctl setup <cluster> 01     # 分阶段:01 创建证书 & 系统初始化
ezctl setup <cluster> 02     # 02 部署 etcd
ezctl setup <cluster> 03     # 03 部署容器运行时
ezctl setup <cluster> 04     # 04 部署 master
ezctl setup <cluster> 05     # 05 部署 node
ezctl setup <cluster> 06     # 06 部署网络插件
ezctl setup <cluster> 07     # 07 部署集群插件(coredns、metrics-server…)
ezctl add-node <cluster> <ip>
ezctl del-node <cluster> <ip>
ezctl add-master <cluster> <ip>
ezctl upgrade <cluster>
ezctl destroy <cluster>
ezctl backup <cluster>       # etcd 备份
ezctl restore <cluster>

5.3 关键配置

# /etc/kubeasz/clusters/<cluster>/config.yml(节选)
CLUSTER_NAME: "cluster1"
K8S_VER: "1.30.6"
CONTAINER_RUNTIME: "containerd"
CLUSTER_CIDR: "100.64.0.0/17"
SERVICE_CIDR: "10.96.0.0/18"
CLUSTER_DNS_DOMAIN: "cluster.local"
PROXY_MODE: "ipvs"          # ★ 见下方提示
CNI: "calico"
ETCD_DATA_DIR: "/var/lib/etcd"
BIN_DIR: "/opt/kube/bin"
CA_EXPIRY: "876000h"
CERT_EXPIRY: "438000h"
# /etc/kubeasz/clusters/<cluster>/hosts(节选)
[etcd]
10.0.0.11 NODE_NAME=etcd1
10.0.0.12 NODE_NAME=etcd2
10.0.0.13 NODE_NAME=etcd3
[kube_master]
10.0.0.11 K8S_MASTER_NAME=master1
[kube_node]
10.0.0.21 K8S_NODE_NAME=node1
[harbor]
[ex_lb]
[chrony]

版本提示:PROXY_MODE: "ipvs" 在老版本 kubeasz 里是常见默认,但 kube-proxy 的 ipvs 模式已被上游弃用。新集群建议用 iptables/nftables 或换成 eBPF 方案(Cilium),并在配置里显式确认,别照抄旧模板。

5.4 运维要点

# 逐阶段部署便于定位(生产推荐分阶段而非 all)
ezctl setup <cluster> 01 && ezctl setup <cluster> 02 && ...

# 服务是 systemd 单元,不是静态 Pod(与 kubeadm 的区别)
systemctl status etcd kube-apiserver kube-controller-manager kube-scheduler kubelet containerd
journalctl -u kube-apiserver -f

# 证书
ls -la /etc/kubernetes/ssl/
openssl x509 -in /etc/kubernetes/ssl/ca.pem -noout -dates

因为是二进制 + systemd,kubeadm certs 这类命令不适用,证书轮换要走 kubeasz 自己的流程或手工签发。CERT_EXPIRY 可设长一些(如上例 50 年),但仍要纳管到期监控。

5.5 卸载

ezctl destroy <cluster>
# 再按第 12 章通用清单清残留

6. Kuboard v4

6.1 定位与架构

Kuboard 是国内使用很广的 Kubernetes 多集群管理控制台。v4 与 v3 是完全不同的产品:

维度 v3 v4
部署 单容器,数据在本地卷 单/多容器 + 外部关系型数据库
数据库 内嵌 MySQL / MariaDB / PostgreSQL / openGauss
多集群 支持 强项,支持全局搜索、缓存同步、节点池视图
HA 有限 多副本 + Redis 分布式缓存
权限 基础 细粒度授权 + 审计 + OIDC/LDAP

v4 把集群对象缓存在自己的数据库里,所以"控制台显示的状态"与"集群真实状态"可能有秒级~分钟级差异。v4.3.x 修了一系列缓存同步(大集群分页截断、增量同步 410 循环、watch 连接不关闭等)问题。排障以 kubectl 为准,控制台只作辅助。

6.2 安装(官方 docker run 基线)

先建库(以 MySQL 为例):

CREATE DATABASE kuboard DEFAULT CHARACTER SET = 'utf8mb4' DEFAULT COLLATE = 'utf8mb4_unicode_ci';
CREATE USER 'kuboard'@'%' IDENTIFIED BY '<强密码>';
GRANT ALL PRIVILEGES ON kuboard.* TO 'kuboard'@'%';
FLUSH PRIVILEGES;

坑:v4.3.3.0 起数据库字符集非 utf8mb4 会直接拒绝启动并给出修复提示。建库时就写死 utf8mb4,别用默认 latin1/utf8mb3。

docker run -d \
  --restart=unless-stopped \
  --name=kuboard \
  -p 80:80/tcp \
  -e TZ="Asia/Shanghai" \
  -e DB_DRIVER=com.mysql.cj.jdbc.Driver \
  -e DB_URL="jdbc:mysql://10.0.0.8:3306/kuboard?serverTimezone=Asia/Shanghai" \
  -e DB_USERNAME=kuboard \
  -e DB_PASSWORD='<强密码>' \
  -v /data/kuboard-log:/app/logs \
  swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v4
# 备选镜像:eipwork/kuboard:v4

其他数据库驱动:

数据库 DB_DRIVER DB_URL 形态
MySQL com.mysql.cj.jdbc.Driver jdbc:mysql://<ip>:3306/kuboard?serverTimezone=Asia/Shanghai
MariaDB org.mariadb.jdbc.Driver jdbc:mariadb://<ip>:3306/kuboard?timezone=Asia/Shanghai
PostgreSQL org.postgresql.Driver jdbc:postgresql://<ip>:5432/kuboard?currentSchema=kuboard&characterEncoding=UTF8
openGauss org.postgresql.Driver 同上,用 PostgreSQL 语法操作

openGauss 建库:

CREATE DATABASE kuboard OWNER=kuboard ENCODING='UTF8' DBCOMPATIBILITY='PG';
\c kuboard
CREATE SCHEMA kuboard AUTHORIZATION kuboard;
docker logs -f kuboard | tail -100
curl -I http://127.0.0.1/login
# 默认账号 admin / Kuboard123 —— 首次登录立刻改

DB_URL 里不要写 localhost(指容器自己),要写数据库实际可达 IP。这是 v4 部署失败第一名。

6.3 反向代理与 HTTPS(生产必配)

location / {
    proxy_pass http://<kuboard>:80;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_read_timeout 3600s;
}

官方明确两条:Kuboard 必须挂在根路径(https://kuboard.example.com/,不支持 /kuboard/ 子路径),且终端/日志依赖 WebSocket Upgrade。v4.3.3.0 专门加了"反向代理诊断页",用来定位"终端/日志打不开"。

6.4 HA

v4 支持多副本 + 负载均衡,实例间通过 Redis 分布式缓存共享状态。要点:

  • 多副本共享同一个外部数据库。
  • Redis 6+ 支持 ACL 用户(v4.3.4.0 起),可给 Kuboard 单独账号。
  • 多副本首次启动曾有过 schema 脚本并发执行的 bug(v4.3.4.0 已修),老版本建议先起 1 副本再扩。
  • 反代要开会话保持或依赖共享缓存。

6.5 v4.3.x 运维相关能力(2026-10 ~ 11)

版本 能力
v4.3.2.0 命令历史面板、节点池视图、节点标签/注解/污点编辑
v4.3.3.0 全局搜索(跨集群/资源类型)、系统配置导出/导入(角色、用户、授权、集群等一次性备份)、配置备份提醒、平台健康诊断 + 反向代理诊断、工作负载编辑覆盖更多 spec(HPA behavior、CronJob 时区、暂停开关)、启动强制校验 utf8mb4
v4.3.4.0(2026-11-02) OIDC Back-Channel Logout 与配置向导自检、多 Pod 批量命令执行(结果按 Tab 展示)、MCP 变更计划审批阻塞(AI 不能自行批准,需人工会话)、变更计划过期清理与中断恢复、首页展示异常集群、同步进度展示
# 版本确认
docker inspect kuboard --format '{{.Config.Image}}'
curl -s http://127.0.0.1/actuator/info 2>/dev/null | head   # 以实际暴露端点为准

安全提醒:v4 引入了 MCP(AI 变更计划)。v4.3.4.0 之前存在"MCP 资源目录未按用户裁剪,跨租户泄露"的问题,已修复。生产上仍应把 AI/MCP 入口限制到专用账号、开启审计、把变更计划审批设为人工。

6.6 纳管集群

  1. 控制台「添加集群」→ 填 kubeconfig 或 ServiceAccount Token。
  2. 按最小权限创建专用 SA(见第 9 章)。
  3. 导入后看「集群管理 → 同步状态 / 缓存状态」,等全量同步跑完再用全局搜索。
  4. 大集群(数千对象)首次全量同步可能较慢,老版本曾有分页截断导致缓存为空的 bug,建议直接上 v4.3.4.0+。

6.7 备份与恢复

# 1) 控制台「系统设置 → 配置导出/导入」:角色、用户、授权、系统配置、集群等
# 2) 数据库冷备(命令行兜底,更可靠)
mysqldump -h<db> -ukuboard -p'<pwd>' --single-transaction kuboard | gzip > /root/kuboard-$(date +%F).sql.gz
pg_dump -h <db> -U kuboard -n kuboard -Fc > /root/kuboard-$(date +%F).dump

# 3) 日志与镜像 tag
docker inspect kuboard --format '{{.Config.Image}}' > /root/kuboard-image.txt
tar czf /root/kuboard-log-$(date +%F).tgz /data/kuboard-log

6.8 升级

v4.x 内部升级只需换镜像 tag(官方明确说明):

docker pull swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v4
docker stop kuboard && docker rm kuboard
# 用完全相同的 -e 参数重新 docker run(建议先写成 compose 或脚本)

坑:docker rm 之前把启动参数完整存档(尤其 DB_URL、密码、卷路径)。建议一开始就用 docker-compose.yml 或 Ansible 管理,别靠一条历史命令。

6.9 卸载

docker stop kuboard && docker rm kuboard
# 数据库按需保留或删除(★ 先导出配置备份)
# mysql -e "DROP DATABASE kuboard;"   ← 危险,确认后执行
rm -rf /data/kuboard-log

7. Rainbond v6

7.1 定位

Rainbond 是云原生应用管理平台(PaaS):把源码 / 镜像 / Helm 包变成可运行应用,屏蔽 K8s 细节,提供服务编排、微服务治理、应用模板交付。v6 起基于标准 K8s 部署,不再自带封闭集群。

v6.9.0(2026-06)重点:

方向 能力
AI 大模型私有化 模型仓库、实例管理、API Key 管理、模型监控;支持预置模型、ModelScope 拉取、HTTP/本地路径/上传;默认 vLLM 推理引擎,GPU/CPU 两种配置;OpenAI 兼容 API(业务方只改 base URL 与密钥)
虚拟机管理 qcow2 镜像直接部署、运行中 CPU/内存热扩容、多 VM 应用级编排、整套应用模板交付、Windows VirtIO 驱动盘挂载
稳定性 修复 RainAgent 偶发连接问题,优化工程引导

7.2 部署形态

形态 说明 适用
单机快速体验(dind / all-in-one) 一台机器装 Docker/K3s,把 Rainbond 全组件跑起来 演示、POC
基于已有 K8s 的 Helm 安装(生产推荐) Rainbond 作为一组工作负载装进现有集群 生产、已有 K8s
高可用 多副本控制面 + 外部数据库/对象存储 + 多节点 生产
# 生产前置检查
kubectl get nodes -o wide
kubectl get sc                  # 必须有可用默认 StorageClass
kubectl get ingressclass        # 网关/Ingress 控制器
helm version --short

# 安装(以官方当前文档为准,命令形态示意)
helm repo add rainbond https://chart.rainbond.com
helm repo update
helm install rainbond rainbond/rainbond-cluster \
  -n rbd-system --create-namespace -f values.yaml

坑:Rainbond 是"平台中的平台",会装一整套组件(控制台、API、构建、网关、监控、数据库、镜像仓库…)。别把它塞进一个资源紧张的小集群,也别和已有的 Ingress Controller 抢 80/443。先规划命名空间、StorageClass、网关端口、资源配额。

7.3 运维排查

kubectl get pods -n rbd-system -o wide
kubectl get pods -n rbd-system | grep -v Running
kubectl -n rbd-system get deploy,sts,ds,svc,ing
kubectl -n rbd-system logs deploy/rbd-api --tail=200
kubectl -n rbd-system get events --sort-by=.lastTimestamp | tail -30
kubectl get pvc -A | grep -v Bound

# 组件健康(不同版本组件名有差异,以实际为准)
kubectl -n rbd-system get pod -l name=rbd-api
kubectl -n rbd-system get pod -l name=rainbond-console

应用起不来时按这条链走:应用构建日志 → 组件 Pod 事件 → PVC 是否绑定 → 网关路由 → 端口/域名。先看 kubectl describe pod,再看平台日志,平台 UI 的错误信息往往被包装过。

7.4 AI 模型实例运维(v6.9+)

# 模型实例本质是带 GPU 资源请求的 Deployment/StatefulSet
kubectl get pods -n <模型所在团队命名空间> -o wide
kubectl describe pod <model-pod> | grep -A5 -i 'nvidia.com/gpu'
kubectl logs -f <model-pod> --tail=100
nvidia-smi                       # 节点侧看 GPU 占用
kubectl top nodes

注意:vLLM 实例首次拉模型权重可能几分钟到几十分钟,且需要足够磁盘(模型缓存 PVC)。就绪探针超时设太短会导致反复重启。

7.5 升级与备份

# 升级前
helm -n rbd-system get values rainbond > /root/rbd-values-$(date +%F).yaml
kubectl get pvc -n rbd-system
# 导出应用模板 / 数据库备份 / 镜像仓库数据
helm -n rbd-system upgrade rainbond rainbond/rainbond-cluster -f /root/rbd-values-*.yaml

平台自带的"应用模板交付"是很好的逻辑备份手段,但模板不含业务数据。数据库、对象存储、镜像仓库必须单独备份。

7.6 卸载

helm -n rbd-system uninstall rainbond
kubectl delete ns rbd-system --ignore-not-found
# 团队命名空间 / CRD / PVC 需逐一确认后再删
kubectl get crd | grep -i rainbond
kubectl get pvc -A | grep rbd-

8. 其他国产平台概览

平台 形态 运维边界 备注
DaoCloud DCE 5.0 商业,多云多集群统一管理 厂商交付为主,运维重点是 License、组件升级、与现有 CMDB/4A 集成 信创、政企常见
灵雀云 ACP 商业,企业级容器平台 同上,重 DevOps 与多租户 金融行业较多
KubeCube 开源,多集群管理 轻量,适合已有集群想加一层多租户 活跃度以仓库为准
KubeGems 开源,多租户 PaaS 可观测与租户管理 活跃度以仓库为准
Karmada 开源(CNCF),多集群编排 不是"平台",是多集群调度控制面;运维重点是 host/member 集群注册与 PropagationPolicy 华为发起,国产开源代表
KubeEdge / OpenYurt 边缘容器 边缘节点自治、云边协同,与中心集群运维模型不同 边缘场景
KubeVirt K8s 上跑 VM 与 1Panel 专业版 / Rainbond 的 VM 能力同类但更底层 CNCF 项目

商业平台的部分:不要试图用开源社区的通用命令去"修"厂商交付的组件,升级与配置走厂商 SOP,否则可能失去支持。把它们纳入统一的监控、备份、权限审计体系即可。


9. 纳管已有集群

Kuboard / KubeOperator / KubeSphere 都能"导入已有集群"。共同要点:

9.1 最小权限 SA(推荐,别用 admin kubeconfig)

kubectl create ns platform-mgmt
kubectl create sa cluster-reader -n platform-mgmt
cat <<'EOF' | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: platform-viewer
rules:
- apiGroups: ["", "apps", "batch", "networking.k8s.io", "storage.k8s.io", "metrics.k8s.io"]
  resources: ["*"]
  verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: platform-viewer
roleRef: {apiGroup: rbac.authorization.k8s.io, kind: ClusterRole, name: platform-viewer}
subjects:
- {kind: ServiceAccount, name: cluster-reader, namespace: platform-mgmt}
EOF

# 取长期 token(K8s 1.24+ 不再自动创建 secret)
kubectl -n platform-mgmt create token cluster-reader --duration=8760h

需要平台执行写操作(部署应用、终端、重启)时,再按功能追加 create/update/patch/delete 与 pods/exec、pods/log 权限。别一上来给 cluster-admin,控制台一旦被攻破就是全集群失守。

9.2 连通性检查

# 从平台所在容器/节点测 apiserver
curl -k https://<apiserver>:6443/version
kubectl --server=https://<apiserver>:6443 --token=<token> --insecure-skip-tls-verify get ns
# 时间同步(证书校验)
timedatectl
# WebSocket 通路(终端/日志功能)

9.3 常见失败

现象 原因
导入后一直"同步中" 平台到 apiserver 不通 / token 权限不足 / 大集群全量同步慢
能看到节点看不到 Pod RBAC 缺 pods 权限
终端黑屏、日志不刷 反代缺 WebSocket Upgrade
状态与 kubectl 不一致 平台缓存延迟,以 kubectl 为准
证书校验失败 时钟偏差 / 自签 CA 未被平台信任

10. 离线交付共性问题

不管用哪个工具,内网交付都要备齐这六类:

类别 内容 漏了的表现
OS 依赖包 rpm/deb:socat、conntrack、ipvsadm、containerd、nfs 客户端… 部署预检告警 / 中途失败
K8s 二进制与镜像 kubelet/kubeadm/kubectl、pause、coredns、etcd、apiserver… 节点 NotReady、Pod Pending
CNI 镜像与配置 Calico/Cilium/Flannel 全部组件镜像 控制面就绪但 Pod 起不来
存储插件镜像 OpenEBS / Longhorn / NFS provisioner / CSI PVC 一直 Pending
平台自身镜像与 chart Kuboard / Rainbond / KubeSphere 全套 平台 Pod ImagePullBackOff
业务镜像 应用本身的镜像 业务 Pod 起不来
# 交付前在内网 Registry 上逐项验证
crictl pull <内网仓库>/<镜像>:<tag>
curl -I --connect-timeout 5 https://<内网仓库>/v2/
# 所有节点信任 CA
cp ca.crt /usr/local/share/ca-certificates/ && update-ca-certificates
mkdir -p /etc/containerd/certs.d/<内网仓库>

坑:只同步"部署器要用的镜像",不同步"部署完之后平台要跑的镜像",是离线交付最典型的返工原因。判据很简单:在完全断网的测试机上从零跑一遍全流程,能跑通才算交付完成。


11. 升级、迁移与跨工具切换

11.1 升级顺序

部署器 / 平台自身(小版本)
   → K8s(一次一个 minor,先测试集群)
   → CNI / CSI
   → 平台组件(兼容矩阵)
   → 业务应用

跨平台没有通用升级命令。KubeKey 用 kk upgrade,kubeasz 用 ezctl upgrade,KubeOperator 在 UI 里,Kuboard 换镜像 tag,Rainbond 走 Helm。

11.2 跨工具切换的现实

切换 可行性 建议路径
kubeadm → KubeKey 纳管 中 用 kk 的现有集群配置接管,先读官方说明
A 部署器 → B 部署器 低 不要原地改,按"建新集群 → 迁业务"做
换管理平台(Kuboard → KubeSphere) 高 平台只是 UI,卸掉一个装另一个,业务不动
上 PaaS(Rainbond) 中 先把应用改造成 Helm/镜像交付,再接入
v3 → v4(KubeSphere / Kuboard) 低 当作迁移项目,不是升级

铁律:换管理平台可以"热切"(业务 Pod 不动);换部署器基本都要"重建"。把这两类变更分开排期,别放进同一个维护窗口。

11.3 迁移检查清单

  • 目标集群版本与业务用到的 API 版本兼容(kubectl api-resources / pluto 类工具查废弃 API)
  • 全部 Helm release、Ingress、PVC、ConfigMap、Secret、CRD 清单
  • 数据库与对象存储的数据备份已验证可恢复
  • 证书、域名、白名单、监控告警规则迁移
  • DNS TTL 提前调低,回滚窗口 ≥ 72 小时

12. 卸载通用清单

12.1 卸载"平台"(保留集群与业务)

# 确认删的是平台命名空间,不是业务命名空间
kubectl get ns
helm list -A
helm -n <平台ns> uninstall <release>
kubectl delete ns <平台ns> --ignore-not-found
kubectl get crd | grep -i <平台> | awk '{print $1}' | xargs -r kubectl delete crd
docker stop kuboard 2>/dev/null && docker rm kuboard 2>/dev/null   # Kuboard 独立容器

12.2 卸载"集群"(所有节点)

# 优先用原部署器的 destroy/reset
kk delete cluster -f config-sample.yaml
ezctl destroy <cluster>
sealos reset
# kubeadm 兜底
kubeadm reset -f

# 通用残留清理(逐项确认)
systemctl stop kubelet containerd etcd kube-apiserver kube-controller-manager kube-scheduler kube-proxy 2>/dev/null
rm -rf /etc/kubernetes /var/lib/etcd /var/lib/kubelet /root/.kube \
       /etc/cni/net.d /opt/cni/bin /var/lib/cni /etc/containerd/certs.d
for i in cni0 flannel.1 flannel-vxlan cali* tunl0 vxlan.calico kube-ipvs0 dummy0; do
  ip link del "$i" 2>/dev/null || true
done
iptables -F; iptables -t nat -F; iptables -X
ipvsadm --clear 2>/dev/null || true
systemctl daemon-reload

坑:kubeadm reset / sealos reset 不清 CNI 网桥和 iptables 规则。同 IP 重建集群时,旧的 cni0/flannel.1/cali*、残留的 Pod 网段路由会造成"节点 Ready 但 Pod 不通"。重建前必须按上面清单逐项验证为空。

12.3 残留验证

systemctl list-units --all | grep -iE 'kube|etcd|containerd'
ps -ef | grep -E 'kube-|etcd|containerd' | grep -v grep
ip link show | grep -E 'cni|flannel|cali|kube-ipvs'
iptables -L -n | grep -iE 'KUBE|CNI|cali'
ls -la /etc/kubernetes /var/lib/etcd /etc/cni/net.d 2>/dev/null
ss -tunlp | grep -E ':6443|:10250|:2379'

13. 故障速查

现象 平台 排查
部署器预检失败 通用 swap、socat/conntrack、时间同步、SSH 免密、端口占用
网段冲突 通用 podSubnet/serviceSubnet 与内网重叠;ip route 看残留路由
控制面起不来 kubeasz / KubeKey journalctl -u kube-apiserver / 静态 Pod 日志
kubelet NotReady 通用 journalctl -u kubelet、cgroup driver、pause 镜像
Pod 全 Pending 通用 无默认 StorageClass / CNI 未就绪 / 资源不足
离线 ImagePullBackOff 通用 crictl pull 实测、CA 信任、certs.d/hosts.toml
Kuboard 启动即退出 Kuboard v4 数据库字符集非 utf8mb4;DB_URL 写了 localhost;DB 不可达
Kuboard 终端/日志黑屏 Kuboard v4 反代缺 WebSocket Upgrade;挂了子路径
Kuboard 状态与集群不符 Kuboard v4 缓存同步延迟;升级到 v4.3.4.0+;以 kubectl 为准
Kuboard 升级后页面错乱 Kuboard v4 浏览器缓存旧前端(v4.3.4.0 已修),强刷/CDN 缓存
Kuboard 找不到新装 CRD Kuboard v4 手动刷新 API 发现;老版本有 404 bug
Rainbond 平台 Pod 起不来 Rainbond 无默认 SC / 网关冲突 / 资源不足
Rainbond 应用构建失败 Rainbond 构建日志 → 镜像仓库连通 → 资源配额
vLLM 模型实例反复重启 Rainbond v6.9 就绪探针超时太短、模型缓存 PVC 容量、GPU 资源
KubeOperator 任务卡住 KubeOperator 部署器容器到目标机 SSH、离线包、目标机时间
kubeasz 分阶段部署失败 kubeasz 用对应编号的 playbook 重跑,别从头 all
加了 master 但 apiserver 不通 通用 IPVS/lvscare/HAProxy 规则未同步;etcd 成员数
删节点后旧 Pod 网段不通 通用 CNI 残留路由、iptables -L 清理
控制台能开但删不掉资源 Kuboard / KubeSphere Finalizer 卡住 / 缓存状态;用 kubectl 查

13.1 三分钟定位脚本

kubectl get nodes -o wide
kubectl get pods -A --field-selector=status.phase!=Running | grep -v Completed
kubectl get events -A --sort-by=.lastTimestamp | tail -20
kubectl get sc; kubectl get pvc -A | grep -v Bound
journalctl -u kubelet --since '10 min ago' --no-pager | grep -iE 'error|fail' | tail -20
crictl ps -a | head
docker ps --format '{{.Names}} {{.Status}}' | grep -iE 'kuboard|rainbond|operator'

14. 安全基线与危险红线

14.1 基线

  • 管理平台不暴露公网,走 VPN / 堡垒机 / 反代 + SSO(OIDC/LDAP)
  • 默认口令全改:Kuboard admin/Kuboard123、KubeSphere admin/P@88w0rd 等
  • 纳管集群使用最小权限 SA,不用 cluster-admin kubeconfig
  • 数据库(Kuboard 等)独立账号、utf8mb4、定期备份、不暴露公网
  • 平台自身镜像来自可信仓库;内网 Harbor 启用 TLS 与最小权限
  • 操作审计与命令历史保留 ≥ 180 天
  • AI/MCP 能力(Kuboard v4.3.4+、KubeSphere Copilot)限账号、人工审批、留痕
  • K8s 版本与部署器支持矩阵对齐,定期打安全补丁
  • 离线交付包校验值入交付单,防止供应链篡改

14.2 危险红线

操作 后果
用 cluster-admin kubeconfig 导入管理平台 平台被攻破 = 全集群失守
kubectl delete crd 批量删平台 CRD 级联删光平台对象,业务可能一起受影响
helm uninstall 未备份 values / 数据库 平台配置不可恢复
docker compose down -v(KubeOperator 等) 删集群元数据卷
iptables -F 在业务节点 短暂断网,K8s/Docker 规则需重建
重装集群不清 CNI 网桥 同 IP 重建后网段冲突、Pod 不通
跨多个 K8s minor 升级 不支持,集群可能起不来
把含明文 SSH 密码的 Clusterfile / hosts 提交公开 Git 凭据泄露
在生产直接跑 ezctl setup <c> all 一步错全部回滚困难,应分阶段

15. 附录

15.1 命令对照速查

需求 KubeKey kubeasz Sealos Kuboard v4 Rainbond
建集群 kk create cluster -f ezctl setup <c> all sealos run —(纳管) —(装在已有 K8s)
加节点 kk add nodes -f ezctl add-node <c> <ip> sealos add --nodes UI 导入 —
删节点 kk delete node ezctl del-node sealos delete — —
升级 K8s kk upgrade --with-kubernetes ezctl upgrade <c> 重建/官方流程 换镜像 tag helm upgrade
离线包 kk artifact export ezdown -D sealos save/load 内网镜像 内网镜像+chart
备份 etcd 快照 ezctl backup etcd 快照 配置导出 + DB dump 应用模板 + DB
销毁 kk delete cluster ezctl destroy sealos reset docker rm helm uninstall

15.2 版本与默认端口速查

项目 事实
Kuboard v4 v4.3.4.0(2026-11-02);默认 admin/Kuboard123;容器 80;需外部 DB(utf8mb4)
Rainbond v6.9.0(2026-06);基于已有 K8s,Helm 安装到 rbd-system
KubeSphere v4.3.0;控制台 30880;Helm ks-core
Sealos v5.1.1 常见;集群镜像 OCI
KubeKey KKZONE=cn 切国内源
kubeadm 控制台端口 6443
etcd 2379(客户端)/ 2380(peer)
kubelet 10250

15.3 与其他手册的配合

遇到这类问题 翻哪份
Pod、调度、RBAC、HPA、etcd 恢复 Kubernetes 常用运维指令手册
CRI、crictl、certs.d、snapshotter containerd 常用运维指令手册
私有仓库、镜像同步、GC Harbor 镜像仓库运维指令手册
KubeKey 完整用法 / KubeSphere 安装 KubeSphere 常用运维指令手册
Sealos 集群镜像与离线交付 Sealos 常用运维指令手册
国内镜像加速、云上托管集群 国内公有云容器服务运维指令手册
国产 OS 内核、SELinux/kysec、信创适配 国产操作系统运维指令手册
面板类工具(1Panel / 宝塔) 对应分册
容器平台整体分层与选型 容器平台常规运维指令手册

维护建议:国产开源项目的版本号、维护活跃度、命令细节变化快,本文的版本事实核对至 2026-11-05。落地时把「部署器版本 + K8s 版本 + 各组件 tag + 集群配置 + 离线包校验值」写进集群交付单;任何工具切换都先在测试环境从零跑通全流程再动生产。