KubeSphere 常用运维指令手册
KubeSphere 常用运维指令手册
适用版本:KubeSphere v3.4.x(存量) / v4.1 ~ v4.3.x(当前),配套 KubeKey 3.x 底座:Kubernetes 1.26 ~ 1.37(KubeSphere 版本与 K8s 版本有兼容矩阵,以官方发布说明为准) 宿主系统:Ubuntu 20.04/22.04/24.04、Debian 11/12、CentOS 7/8、RHEL 8/9、Rocky/Alma、openEuler、麒麟 V10、统信 UOS(信创适配) 约定:
#root 或 sudo,$普通用户,<xxx>为占位符;kk指 KubeKey 二进制,kubectl简写k。 差异标注:> **版本差异**主要用于 v3 → v4 的安装与配置方式变化,这是本手册最容易踩错的地方。 更新时间:2026-11(版本事实核对至 2026-11-05)
目录
- 版本与架构演进
- 部署前规划
- KubeKey 部署 Kubernetes
- v4:Helm 安装 KubeSphere Core
- v3:ks-installer 安装方式
- 离线部署与私有仓库
- 命名空间、组件与运行机制
- 扩展组件管理(LuBan)
- 平台管理:四级 RBAC 与 License
- 工作负载、网关与应用
- 多集群管理
- 可观测、日志与排障能力
- 存储与网络
- 日常运维操作
- 升级与回滚
- 备份与恢复
- 卸载与残留清理
- 故障速查
- 安全基线与危险红线
- 附录
1. 版本与架构演进
1.1 两个代际,两套安装方式
| 代际 | 架构 | 安装方式 | 配置载体 | 现状 |
|---|---|---|---|---|
| v3.x(3.4 为末代主力) | 单体集成平台,功能全部内置 | ks-installer + cluster-configuration.yaml |
ConfigMap / CR ClusterConfiguration |
存量巨大,社区版可用 |
| v4.x | LuBan 微内核 + 扩展组件:只装 Core,功能以 Extension 按需装 | Helm 安装 ks-core chart |
Helm values + CRD Extension / ExtensionVersion |
当前主线 |
版本差异(最重要的一条):v4 不再使用
ks-installer。搜到的教程里如果出现kubectl apply -f kubesphere-installer.yaml或kubectl logs -n kubesphere-system installer,那是 v3 的。v4 照抄会装出一个空集群,然后一直等一个永远不存在的 installer Pod。
1.2 版本线(2026-11)
| 版本 | 关键能力 |
|---|---|
| v4.1.x | 微内核架构落地,Core + 扩展市场,离线部署资料较全 |
| v4.2.1 | 网关平滑滚动升级、网关分级流量治理、多集群可视化升级与状态同步、节点组(Node Group)、VPA/HPA/KEDA 多维弹性、GPU/vGPU 纳管、Volcano 批量调度、Fluid 缓存加速 |
| v4.3.0(2026-08) | KubeSphere Copilot(基于 HolmesGPT 的 Agentic AI 运维助手)、控制台可视化 kubectl debug、License 全生命周期(增量导入、离线私有仓库凭证、导出环境信息)、自定义导航菜单、终端模板自定义、Redis / Redis HA 升级、一批 Helm 升级与镜像仓库优先级修复 |
这些功能是"平台层"的,底层仍是标准 Kubernetes。kubectl 能做的事,KubeSphere 只是给了 UI 与多租户封装;排障最终要回到 K8s 分册与 containerd 分册。
1.3 先确认接手的是哪一代
# 有 ks-installer / ClusterConfiguration → v3
kubectl get deploy -n kubesphere-system | grep -i installer
kubectl get clusterconfiguration -A 2>/dev/null
# 有 ks-core Helm release / Extension CRD → v4
helm list -A | grep -i ks-core
kubectl get crd | grep -i extensions.kubesphere.io
kubectl get deploy -n kubesphere-system
1.4 组件分层
┌────────────────────────────────────────────────────────┐
│ 扩展组件(v4,按需):Whizard 可观测 / DevOps / 网关 / │
│ 应用商店 / 日志 / 网络 / Copilot / 服务网格 … │
├────────────────────────────────────────────────────────┤
│ KubeSphere Core:ks-apiserver / ks-controller-manager / │
│ ks-console / 多租户 RBAC / 扩展市场(KSE Repository) │
├────────────────────────────────────────────────────────┤
│ Kubernetes(kubeadm / KubeKey 部署)+ CRI + CNI + CSI │
├────────────────────────────────────────────────────────┤
│ OS / 存储 / 网络(国产系统与信创环境在此层适配) │
└────────────────────────────────────────────────────────┘
2. 部署前规划
2.1 兼容性检查(决定能不能装成)
| 检查项 | 命令 / 说明 |
|---|---|
| K8s 版本 | kubectl version;先查 KubeSphere 该版本的兼容矩阵,v3.4 系列对新 K8s 支持有限(社区实践多停在 1.26 左右),v4 支持更新版本 |
| Helm 版本 | helm version --short;v4 官方文档要求 Helm ≥ 3.17.0 |
| 架构 | uname -m;信创 aarch64 / 龙芯要确认所有组件镜像有多架构版本 |
| cgroup | stat -fc %T /sys/fs/cgroup/ 返回 cgroup2fs 为 v2;K8s 1.35+ kubelet 对 cgroup v1 默认失败 |
| 容器运行时 | crictl info;KubeKey 默认 containerd |
| 存储 | 至少一个可用 StorageClass,否则 Core 的 PVC 会 Pending |
| 镜像仓库 | 国内/内网必须能拉 hub.kubesphere.com.cn 或自建私有仓库 |
| 资源 | Core 最小 2C4G(实验),生产建议 4C8G 起,扩展组件另算 |
kubectl get nodes -o wide
kubectl get sc
kubectl get pods -A | grep -v Running | grep -v Completed
helm version --short
crictl info | jq '.config.containerd.runtimes.runc.options.SystemdCgroup'
2.2 网络与端口
| 端口 | 用途 |
|---|---|
| 30880 | ks-console 默认 NodePort(v4 Helm 安装输出里给出) |
| 6443 | kube-apiserver |
| 2379/2380 | etcd |
| 10250 | kubelet |
| 30000-32767 | NodePort 范围(网关、扩展组件) |
2.3 国内环境三件套
- 镜像源:在线装用
--set global.imageRegistry=hub.kubesphere.com.cn;完全内网用--set global.imageRegistry=<私有仓库>/<前缀>并提前同步镜像。 - 离线包:用 KubeKey 的 artifact 机制导出 OS 依赖包 + 镜像,或用官方文档给的离线资源包。
- Chart 源:v4 的
ks-core走 OCI(oci://hub.kubesphere.com.cn/kse/ks-core)或 tgz(https://charts.kubesphere.io/main/ks-core-*.tgz),内网要提前helm pull后传到跳板机。
3. KubeKey 部署 Kubernetes
KubeKey(kk)是青云开源的集群部署工具,v3/v4 都用它装 K8s,只是装完 KubeSphere 的方式不同。
3.1 安装 kk
# 在线(国内下载节点)
export KKZONE=cn
curl -sfL https://get-kk.kubesphere.io | sh -
chmod +x kk
./kk version
# 或离线:从 GitHub Release 下 kk 二进制后传进内网
KKZONE=cn会把下载源切到国内节点,内网环境必须走离线包。
3.2 生成配置
export KKZONE=cn
./kk create config --with-kubernetes v1.30.6 # 版本换成实际需要的
# 生成 config-sample.yaml(v4 文档里也用 inventory.yaml + config.yaml 两个文件)
典型配置结构(v3 风格 config-sample.yaml):
apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
name: sample
spec:
hosts:
- {name: master1, address: 10.0.0.11, internalAddress: 10.0.0.11,
user: root, password: "<ssh密码>"}
- {name: node1, address: 10.0.0.21, internalAddress: 10.0.0.21,
user: root, privateKeyPath: "~/.ssh/id_rsa"}
roleGroups:
etcd: [master1]
control-plane: [master1]
worker: [node1]
controlPlaneEndpoint:
domain: lb.kubesphere.local
address: "10.0.0.10" # VIP / LB 地址
port: 6443
kubernetes:
version: v1.30.6
clusterName: cluster.local
containerManager: containerd
network:
plugin: calico
kubePodsCIDR: 10.233.64.0/18
kubeServiceCIDR: 10.233.0.0/18
registry:
privateRegistry: "" # 离线时填自建 Harbor 地址
registryMirrors: []
insecureRegistries: []
addons: []
坑:
controlPlaneEndpoint.domain用lb.kubesphere.local时,KubeKey 会在节点上起一个轻量 LB(HAProxy 类)来做 VIP。多 master 集群如果已经有外部四层 LB,就填真实 VIP/LB 地址,别两套 LB 叠着用。
3.3 创建集群
export KKZONE=cn
./kk create cluster -f config-sample.yaml
# v4 官方文档的双文件写法
./kk create cluster -i inventory.yaml -c config.yaml
# 离线(使用 artifact 包)
./kk create cluster -f config-sample.yaml --with-packages
创建过程会做:环境预检 → 分发二进制与镜像 → 初始化 etcd / 控制面 → 装 CNI → join worker → 打标签。失败时看 kk 输出和 /root/.kubekey/ 日志。
3.4 集群增删节点与升级
./kk add nodes -f config-sample.yaml # 在 hosts/roleGroups 里加好新节点再执行
./kk delete node <node-name> -f config-sample.yaml
./kk upgrade --with-kubernetes v1.31.x -f config-sample.yaml
./kk create cluster --with-kubesphere v3.4.1 -f config-sample.yaml # ★ v3 专用
版本差异:
--with-kubesphere是 v3 的用法,KubeKey 会顺手把 ks-installer 装上。v4 不要用这个参数,先只装 K8s,再用 Helm 装ks-core。
3.5 集群验证
kubectl get nodes -o wide
kubectl get pods -A
kubectl get cs 2>/dev/null # 新版本已废弃,用下面这条
kubectl get --raw='/readyz?verbose'
kubectl get sc
4. v4:Helm 安装 KubeSphere Core
4.1 在线安装(官方文档基线)
chart=oci://hub.kubesphere.com.cn/kse/ks-core
version=1.2.4
helm upgrade --install -n kubesphere-system --create-namespace ks-core $chart \
--debug --wait --version $version --reset-values --take-ownership \
--set global.imageRegistry=hub.kubesphere.com.cn,extension.imageRegistry=hub.kubesphere.com.cn \
--set kseExtensionRepository.image.tag=v11.2.0
要点逐条:
| 参数 | 为什么 |
|---|---|
oci://.../ks-core |
v4 的 Core 以 OCI Helm Chart 分发,不是普通 repo |
--version 1.2.4 |
Chart 版本 ≠ KubeSphere 产品版本,按官方文档对应表选 |
helm >= 3.17.0 |
低版本解析 OCI / 某些字段会失败 |
--reset-values |
不用旧的隐式 values,避免升级时残留 |
--take-ownership |
接管已存在但无归属的资源,重装场景常用 |
global.imageRegistry |
Core 镜像前缀 |
extension.imageRegistry |
扩展组件镜像前缀,两个都要设,漏一个后面装扩展时拉不到 |
kseExtensionRepository.image.tag |
扩展市场仓库镜像 tag,要与 Core 版本匹配 |
安装成功输出:
1. Wait for Deployment Completion
kubectl get pods -n kubesphere-system
2. Access the KubeSphere Console
http://<IP>:30880
3. Login
Account: admin Password: P@88w0rd
首次登录立刻改密码。
4.2 用 tgz / 内网 Chart
helm fetch https://charts.kubesphere.io/main/ks-core-1.1.3.tgz
# 或
helm pull oci://hub.kubesphere.com.cn/kse/ks-core --version 1.2.4
helm upgrade --install -n kubesphere-system --create-namespace ks-core ./ks-core-1.2.4.tgz \
--debug --wait --reset-values --take-ownership \
--set global.imageRegistry=<私有仓库>/ks,extension.imageRegistry=<私有仓库>/ks
4.3 安装后检查清单
helm list -A | grep ks-core
helm -n kubesphere-system get values ks-core
kubectl get pods -n kubesphere-system -o wide
kubectl get svc -n kubesphere-system | grep console
kubectl get crd | grep -i kubesphere
curl -I http://<任一节点IP>:30880
kubectl -n kubesphere-system logs deploy/ks-apiserver --tail=100
坑:
--wait只等 Deployment 就绪,不等于扩展市场可用。装完 Core 后扩展市场列表为空,多半是extension.imageRegistry没设或内网不通hub.kubesphere.com.cn,去看kse-extension-repositoryPod 的日志。
4.4 常见 values 覆盖
# values-override.yaml
global:
imageRegistry: registry.internal/ks
extension:
imageRegistry: registry.internal/ks
console:
replicas: 2
apiserver:
replicas: 2
helm -n kubesphere-system upgrade ks-core ./ks-core-1.2.4.tgz -f values-override.yaml
改 values 前先
helm get values -a看当前生效值。--reset-values会把之前用--set传的参数全部丢掉,重复用它做升级是常见事故来源。
5. v3:ks-installer 安装方式
存量集群维护时仍要会这一套。
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.4.1/kubesphere-installer.yaml
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.4.1/cluster-configuration.yaml
# 看安装进度(安装可能 10~30 分钟)
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system \
-l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
cluster-configuration.yaml 里按需开启组件:
---
apiVersion: installer.kubesphere.io/v1alpha1
kind: ClusterConfiguration
metadata:
name: ks-installer
namespace: kubesphere-system
spec:
persistence:
storageClass: ""
authentication:
jwtSecret: ""
etcd:
monitoring: true
endpointIps: localhost
port: 2379
tlsEnable: true
common:
redis: {enabled: false}
openldap: {enabled: false}
minioVolumeSize: 20Gi
es: {enabled: false, basicAuth: {enabled: false}}
console:
enableMultiLogin: true
port: 30880
type: NodePort
alerting: {enabled: false}
auditing: {enabled: false}
devops: {enabled: false}
events: {enabled: false}
logging: {enabled: false}
metrics_server: {enabled: true}
monitoring:
storageClass: ""
node_exporter: {port: 9100}
multicluster:
clusterRole: none # host / member / none
network:
networkpolicy: {enabled: false}
ippool: {type: none}
topology: {type: none}
openpitrix:
store: {enabled: false}
servicemesh: {enabled: false}
kubeedge: {enabled: false}
改了配置让它重装:
kubectl apply -f cluster-configuration.yaml
# 或重启 installer
kubectl rollout restart deploy/ks-installer -n kubesphere-system
坑:v3 的功能开关(
devops/logging/servicemesh/events)改一次会触发一次全量 reconcile,可能重启多个组件。生产上不要频繁切。v4 已经把这些拆成独立 Extension,这是架构升级最实际的价值。
6. 离线部署与私有仓库
6.1 四个要准备的东西
| 项 | 说明 |
|---|---|
| KubeKey 二进制 | 与 K8s 集群镜像版本兼容 |
| OS 依赖包 / artifact | kk artifact export 生成,含 rpm/deb 与二进制 |
| 集群镜像与组件镜像 | 同步到内网 Harbor |
| Helm Chart | ks-core-*.tgz 及所有要装的扩展 chart |
6.2 生成离线包(有外网的一侧)
export KKZONE=cn
./kk create manifest --with-kubernetes v1.30.6
# 编辑 manifest-sample.yaml,补 image 列表与私有仓库地址
./kk artifact export -m manifest-sample.yaml -o kubesphere-v412-v1306-artifact.tar.gz
实测这类 artifact 包常在 8~9 GB 量级,提前准备磁盘与传输通道。
6.3 内网侧部署
# 1) 把 artifact、kk、chart 传到部署/仓库节点
ls -lh /srv/kubekey/
# 2) 导入镜像到内网 Harbor(artifact 里含 registry 目录)
# 3) 生成配置并填私有仓库
./kk create config --with-kubernetes v1.30.6
vi config-sample.yaml
spec:
registry:
privateRegistry: "harbor.internal"
registryMirrors: []
insecureRegistries: ["harbor.internal"] # 若用 http 或自签证书
auths:
"harbor.internal":
username: admin
password: "<密码>"
# 4) 装 K8s(离线)
./kk create cluster -f config-sample.yaml --with-packages
# 5) 装 KubeSphere Core(镜像前缀指向内网仓库)
helm upgrade --install -n kubesphere-system --create-namespace ks-core ./ks-core-1.2.4.tgz \
--debug --wait --reset-values --take-ownership \
--set global.imageRegistry=harbor.internal/ks,extension.imageRegistry=harbor.internal/ks
坑:
privateRegistry解决的是 K8s 组件镜像;global.imageRegistry/extension.imageRegistry解决的是 KubeSphere 组件镜像。两组都配才算离线完整,漏一组就会在某些 Pod 上报ImagePullBackOff。
6.4 证书与 containerd
内网 Harbor 用自签 HTTPS 时,所有节点都要信任 CA,并配置 containerd certs.d(详见 containerd 分册):
cp ca.crt /usr/local/share/ca-certificates/harbor.crt && update-ca-certificates
mkdir -p /etc/containerd/certs.d/harbor.internal
cat > /etc/containerd/certs.d/harbor.internal/hosts.toml <<'EOF'
server = "https://harbor.internal"
[host."https://harbor.internal"]
capabilities = ["pull", "resolve", "push"]
skip_verify = true
EOF
systemctl restart containerd
crictl pull harbor.internal/ks/ks-apiserver:<tag>
6.5 License 与离线
v4.3.0 起:支持 License 增量导入、分开管理软件许可期限与维保服务期限、导出许可证环境信息,离线环境可配置私有镜像仓库凭证。商业版离线交付时这几项要提前发给厂商生成 License。
7. 命名空间、组件与运行机制
7.1 命名空间
| 命名空间 | 内容 |
|---|---|
kubesphere-system |
Core:ks-apiserver / ks-controller-manager / ks-console / 扩展市场仓库 |
kubesphere-controls-system |
v3 的控制器、kubectl 终端 Pod |
kubesphere-monitoring-system |
v3 的 Prometheus 栈(v4 由 Whizard 扩展接管) |
kubesphere-logging-system |
v3 日志组件(Fluent Bit / ES) |
<extension>-system |
v4 各扩展组件独立命名空间 |
kube-system / kubesphere-monitoring-federated |
K8s 与多集群监控 |
kubectl get ns | grep -i kubesphere
kubectl get deploy,sts,ds -n kubesphere-system
kubectl get pods -A -o wide | grep -v Running
7.2 Core 三件套
| 组件 | 作用 | 挂了的表现 |
|---|---|---|
ks-apiserver |
KubeSphere 的扩展 API 与聚合层 | 控制台报接口错误、登录失败 |
ks-controller-manager |
平台级 CR 的 reconcile(工作空间、项目、扩展) | 创建了资源但状态不变 |
ks-console |
Web UI(NodePort 30880) | 页面打不开,kubectl 正常 |
kubectl -n kubesphere-system get deploy
kubectl -n kubesphere-system logs deploy/ks-apiserver --tail=200
kubectl -n kubesphere-system describe pod <pod>
关键判断:控制台打不开但
kubectl一切正常 → 只是ks-console/ks-apiserver的问题,业务 Pod 没受影响。不要因此去重启 kubelet 或整个集群。
7.3 平台自定义资源
kubectl api-resources | grep -i kubesphere
kubectl get workspacetemplates,workspaces -A 2>/dev/null
kubectl get extension,extensionversion -A 2>/dev/null
kubectl get cluster -A 2>/dev/null # 多集群 CR
kubectl get crd | grep -iE 'kubesphere|tenant|extension'
8. 扩展组件管理(LuBan)
v4 把功能拆成 Extension,通过扩展市场(KSE Repository)安装。
8.1 概念
| 对象 | 含义 |
|---|---|
Extension |
扩展的元数据(名称、展示信息、分类) |
ExtensionVersion |
具体版本与 chart 地址、依赖、values schema |
Repository |
扩展仓库(官方 hub.kubesphere.com.cn 或自建) |
InstallPlan / 订阅 |
安装状态与配置 |
kubectl get extensions.core.kubesphere.io -A 2>/dev/null
kubectl get extensionversions -A 2>/dev/null
kubectl get repositories -A 2>/dev/null
kubectl get pods -n kubesphere-system | grep -i repository
8.2 常用扩展
| 扩展 | 用途 |
|---|---|
| Whizard 可观测平台 | 指标、日志、告警、多集群统一观测(v4 主力) |
| 网关 / Gateway | 集群与企业空间/项目级 Ingress 分级治理 |
| DevOps | 流水线、凭据、代码仓库集成 |
| 应用商店 | 基于 Helm 的应用模板分发 |
| KubeSphere 网络 | NetworkPolicy、IPPool 等 |
| Copilot | v4.3.0 的 AI 运维助手(需配 LLM) |
8.3 安装与升级(控制台为主,命令行兜底)
# 在扩展市场点安装后,实际是 helm install 到对应命名空间
helm list -A | grep -iE 'whizard|gateway|devops'
kubectl get pods -A | grep -iE 'whizard|gateway'
# 查看扩展安装任务的失败原因
kubectl -n kubesphere-system logs deploy/ks-controller-manager --tail=200 | grep -i extension
kubectl get events -A --sort-by=.lastTimestamp | tail -30
坑:v4.2.1 之前的 Helm 升级存在"应用升级状态异常、仓库持续重试、字段变更引发异常"等问题,v4.3.0 已集中修复。老版本升扩展卡住时别一直点重试,先看
helm list里 release 的真实状态(failed需要helm rollback或helm uninstall再装)。
8.4 自建扩展仓库(离线)
- 在内网搭一个 ChartMuseum / Harbor OCI 仓库,同步官方扩展 chart 与镜像。
- 在平台里添加 Repository,指向内网地址。
- 每个 chart 的 values 里把
imageRegistry改成内网前缀。 - 装一个最小扩展验证链路,再批量装。
9. 平台管理:四级 RBAC 与 License
9.1 层级模型
平台(Platform)
└─ 集群(Cluster,多集群场景)
└─ 企业空间(Workspace)
└─ 项目 / 命名空间(Namespace)
└─ 资源(工作负载、服务、配置…)
内置角色:
| 层级 | 典型角色 |
|---|---|
| 平台 | platform-admin / platform-regular / platform-self-provisioner |
| 集群 | cluster-admin / cluster-viewer |
| 企业空间 | workspace-admin / workspace-manager / workspace-viewer |
| 项目 | admin / operator / viewer |
# 平台角色本质是 ClusterRole / RoleBinding
kubectl get clusterroles | grep -i kubesphere
kubectl get rolebindings -A | grep -i kubesphere | head
kubectl get clusterrolebindings | grep -i kubesphere | head
KubeSphere 的权限最终落到 K8s RBAC,但中间有一层平台自定义 CR。只改 K8s RBAC 可能让控制台显示与实际权限不一致;授权一律走控制台或平台 API。
9.2 常用运维
# 查看某用户能做什么(用平台账号登录后调 API,或用 admin token)
kubectl auth can-i --list --as=system:serviceaccount:<ns>:<sa>
9.3 License(v4.3.0+)
- 控制台「平台管理 → License」查看授权期限、维保期限、扩展权益。
- 支持增量导入(不必一次导入全部)、导出许可证环境信息(申请/排障用)。
- License 过期通常不会立刻停服,但扩展能力、技术支持与升级会受限;到期前 90 天开始走续期。
10. 工作负载、网关与应用
10.1 控制台与 kubectl 的对应关系
| 控制台操作 | 底层 |
|---|---|
| 创建部署 | Deployment + Service |
| 创建有状态副本集 | StatefulSet + Headless Service + PVC |
| 创建服务 | Service(ClusterIP / NodePort / LoadBalancer) |
| 应用路由 | Ingress / Gateway API |
| 配置 / 密钥 | ConfigMap / Secret |
| 存储卷 | PVC + StorageClass |
| 弹性伸缩 | HPA / VPA / KEDA ScaledObject |
| 容器组 | Pod |
kubectl -n <project> get deploy,sts,pod,svc,ing
kubectl -n <project> describe pod <pod>
kubectl -n <project> logs -f deploy/<name>
kubectl -n <project> get events --sort-by=.lastTimestamp | tail -20
10.2 网关与流量
v4.2.1 起支持分级流量治理:集群维度统一规划企业空间级 / 项目级网关策略,网关资源分层部署、权限细粒度隔离;网关升级走滚动更新(静默式平滑升级)。
kubectl get ingress -A
kubectl get gatewayclasses,gateway,httproute -A 2>/dev/null # Gateway API
kubectl -n kubesphere-controls-system get svc | grep -i gateway
kubectl -n <ns> get pods -l app=kubesphere-router
Ingress NGINX 已归档退役,新集群建议走 Gateway API 或厂商网关;KubeSphere 网关扩展的选型要跟这个趋势对齐。
10.3 应用商店与 Helm
helm repo add <name> <url>
helm repo update
helm install <release> <chart> -n <project> -f values.yaml
helm list -A
helm -n <project> history <release>
helm -n <project> rollback <release> <revision>
平台里"应用"和
helm list里的 release 是同一份数据。控制台删不掉的应用,多半是 release 处于pending-upgrade/failed,需要命令行helm rollback或helm uninstall清理。
11. 多集群管理
11.1 角色
| 角色 | 说明 |
|---|---|
| Host 集群 | 承载 KubeSphere 控制面与统一控制台 |
| Member 集群 | 被纳管的业务集群,可只跑 agent |
kubectl get clusters.cluster.kubesphere.io -A 2>/dev/null
kubectl get cluster -A -o yaml | grep -E 'name:|role:|connection'
11.2 纳管检查
- Member 集群的 kubeconfig / token 有足够权限(
cluster-admin或平台要求的最小权限集)。 - Host 能访问 Member 的 apiserver 与 kubesphere 控制面端口(跨云/跨机房要放行)。
- 两侧时间同步(证书校验对偏差敏感)。
- Host / Member 的 KubeSphere 版本在兼容范围内。
# 检查连通性
curl -k https://<member-apiserver>:6443/version
chronyc sources 2>/dev/null || timedatectl
# 状态同步异常看 agent 日志
kubectl -n kubesphere-system logs deploy/cluster-agent --tail=100 2>/dev/null
v4.2.1 起支持成员集群在线版本升级(图形化、可实时追踪日志)与状态智能同步(主动探测离线/失联/异常)。v4.3.0 的 Copilot 支持手动选定集群绑定对话上下文,保障多租户数据隔离。
坑:多集群场景下
kubectl默认上下文是当前连的集群,控制台里切了集群不代表终端里切了上下文。执行破坏性命令前kubectl config current-context确认一遍。
12. 可观测、日志与排障能力
12.1 v3 与 v4 的差异
| 能力 | v3 | v4 |
|---|---|---|
| 指标 | 内置 Prometheus 栈(kubesphere-monitoring-system) |
Whizard 可观测平台扩展 |
| 日志 | 内置 Fluent Bit + ES(可选) | 扩展按需装 |
| 审计/事件 | 开关式内置 | 扩展 |
| 排障 | 控制台日志/终端 | 加可视化 kubectl debug(v4.3.0)、Copilot AI 诊断 |
kubectl get pods -n kubesphere-monitoring-system 2>/dev/null
kubectl get pods -A | grep -iE 'whizard|prometheus|loki|fluent'
12.2 命令行底线(平台监控挂了照样能查)
kubectl top nodes
kubectl top pods -A --sort-by=memory | head -20
kubectl get events -A --sort-by=.lastTimestamp | tail -50
kubectl describe node <node> | tail -30
journalctl -u kubelet -n 100 --no-pager
journalctl -u containerd -n 100 --no-pager
crictl ps -a | head
12.3 kubectl debug(v4.3.0 控制台也能点)
kubectl debug -it <pod> -n <ns> --image=busybox:1.36 --target=<container>
kubectl debug node/<node> -it --image=busybox:1.36
控制台可视化 debug 会在目标 Pod 里创建临时容器,会改变 Pod 状态并可能触发告警。生产环境用完记得删除临时容器/重建 Pod。
13. 存储与网络
kubectl get sc -o yaml
kubectl get pvc -A | grep -v Bound
kubectl describe pvc <pvc> -n <ns>
kubectl get networkpolicy -A
kubectl get ippool -A 2>/dev/null
| 现象 | 排查 |
|---|---|
| Core Pod Pending | PVC 未绑定 → 没有默认 StorageClass 或存储后端不可用 |
| 扩展装不上 | 镜像 + PVC 同时查 |
| Pod 间不通 | CNI、NetworkPolicy、网关策略三层 |
| 跨节点不通 | 防火墙、MTU、BGP(Calico) |
离线环境如果选 OpenEBS / Longhorn 提供存储,它们的镜像也要提前同步到内网仓库,否则
kk装完 K8s 看着正常,第一个 PVC 就 Pending。
14. 日常运维操作
14.1 巡检脚本
#!/usr/bin/env bash
echo "===== 节点 ====="; kubectl get nodes -o wide
echo "===== Core ====="; kubectl get pods -n kubesphere-system -o wide
echo "===== 异常 Pod ====="; kubectl get pods -A --field-selector=status.phase!=Running | grep -v Completed
echo "===== Helm ====="; helm list -A | grep -iE 'ks-core|whizard|gateway'
echo "===== 存储 ====="; kubectl get pvc -A | grep -v Bound
kubectl get sc
echo "===== 资源 ====="; kubectl top nodes
echo "===== 事件 ====="; kubectl get events -A --sort-by=.lastTimestamp | tail -20
14.2 重启与扩缩
kubectl -n kubesphere-system rollout restart deploy/ks-apiserver
kubectl -n kubesphere-system rollout restart deploy/ks-console
kubectl -n kubesphere-system scale deploy/ks-console --replicas=2
kubectl -n kubesphere-system rollout status deploy/ks-apiserver
只重启 Core,不动业务命名空间。多副本时先确认有 PodDisruptionBudget 或者流量已摘除。
14.3 日志定位
kubectl -n kubesphere-system logs deploy/ks-apiserver --tail=200 | grep -iE 'error|warn'
kubectl -n kubesphere-system logs deploy/ks-controller-manager --tail=200
kubectl -n kubesphere-system logs deploy/ks-console --tail=200
kubectl -n kubesphere-system get events --sort-by=.lastTimestamp | tail -30
15. 升级与回滚
15.1 升级顺序(不可颠倒)
1. 备份 etcd + Helm values + 平台 CR
2. 升级 Kubernetes(kk upgrade,一次只升一个 minor,不能跳级)
3. 校验节点与核心组件
4. 升级 KubeSphere Core(helm upgrade,用对应新版本的 chart)
5. 逐个升级扩展组件(注意依赖顺序)
6. 升级 Member 集群(多集群场景)
7. 功能回归:登录、企业空间/项目权限、网关、监控
15.2 Core 升级
helm -n kubesphere-system get values ks-core > /root/ks-core-values-$(date +%F).yaml
helm -n kubesphere-system get all ks-core > /root/ks-core-manifest-$(date +%F).txt
helm -n kubesphere-system upgrade ks-core oci://hub.kubesphere.com.cn/kse/ks-core \
--version <新chart版本> --wait \
-f /root/ks-core-values-<date>.yaml
坑:
--reset-values只适合首次安装或明确要丢弃自定义值时用。升级时带--reset-values会把imageRegistry等内网设置冲掉,Pod 立刻 ImagePullBackOff。升级用-f values.yaml复用。
15.3 v3 → v4 迁移现实
官方没有"一键原地升级":v3 是单体 + ClusterConfiguration,v4 是微内核 + Helm + Extension,配置模型完全不同。可行路径是:
- 新建一个 v4 集群(同版本 K8s 或新集群)。
- 导出平台元数据(用户、企业空间、项目、角色)与应用清单。
- 业务负载用
kubectl get -o yaml/ Helm release / Velero 迁移。 - 在新平台重建 RBAC 与扩展组件。
- 灰度切流量,旧集群保留观察期。
把它当迁移项目做,不要当"升级操作"排进半小时维护窗口。
15.4 回滚
helm -n kubesphere-system history ks-core
helm -n kubesphere-system rollback ks-core <revision>
kubectl -n kubesphere-system rollout status deploy/ks-apiserver
K8s 本身不能降级。如果已经升过 K8s 大版本,Core 回滚也可能因 API 版本不兼容失败,此时要从 etcd 快照重建(见 K8s 分册)。
16. 备份与恢复
16.1 三层备份,缺一不可
| 层 | 内容 | 方式 |
|---|---|---|
| etcd | 集群全部状态 | etcdctl snapshot save(见 K8s 分册) |
| 平台配置 | Helm values、平台 CR、License、扩展清单 | 导出 YAML/helm get values |
| 业务数据 | PVC 里的实际数据 | Velero / 存储层快照 |
# 平台配置导出
mkdir -p /root/ks-backup-$(date +%F)
helm -n kubesphere-system get values ks-core -a > /root/ks-backup-*/ks-core-values.yaml
helm list -A -o yaml > /root/ks-backup-*/helm-releases.yaml
kubectl get crd -o name | grep -iE 'kubesphere|tenant|extension' \
| xargs -r -I{} sh -c 'kubectl get {} -A -o yaml >> /root/ks-backup-*/crs.yaml'
kubectl get ns -o yaml > /root/ks-backup-*/namespaces.yaml
16.2 etcd 快照(控制面节点)
ETCDCTL_API=3 etcdctl snapshot save /root/etcd-$(date +%F).db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/ssl/etcd/ssl/ca.crt \
--cert=/etc/ssl/etcd/ssl/etcd.crt \
--key=/etc/ssl/etcd/ssl/etcd.key
ETCDCTL_API=3 etcdctl snapshot status /root/etcd-*.db
路径随部署方式变(kubeadm 常在
/etc/kubernetes/pki/etcd/),以ps -ef | grep etcd里的实际参数为准。恢复流程见 K8s 分册,别在没演练过的情况下直接对生产做。
16.3 恢复验证清单
- 快照文件 CRC /
etcdctl snapshot status正常 - 在测试集群恢复过一次
- License 文件与扩展仓库凭证单独保存
- 镜像仓库本身有备份(否则恢复完拉不到镜像)
17. 卸载与残留清理
17.1 只卸载 KubeSphere,保留 K8s 与业务
# v4
helm -n kubesphere-system uninstall ks-core
# 逐个卸载扩展(先看下有哪些)
helm list -A | grep -iE 'whizard|gateway|devops'
# 删除平台 CRD(★会删掉所有平台元数据)
kubectl get crd | grep -i kubesphere | awk '{print $1}' | xargs -r kubectl delete crd
# 删除命名空间
kubectl delete ns kubesphere-system kubesphere-controls-system \
kubesphere-monitoring-system kubesphere-logging-system --ignore-not-found
坑:删 CRD 是级联删除所有平台 CR(企业空间、项目、角色)——但不会删业务 Namespace 里的 Deployment/Service,因为那些是原生资源。所以卸载后业务还在跑,只是失去平台管理。这正是我们想要的,但也意味着"卸载"不等于"清理干净"。
17.2 v3 卸载
# 官方卸载脚本(老版本)
kubectl delete -f cluster-configuration.yaml
kubectl delete -f kubesphere-installer.yaml
# 或
wget https://raw.githubusercontent.com/kubesphere/ks-installer/master/scripts/kubesphere-delete.sh
sh kubesphere-delete.sh
17.3 连 K8s 一起销毁
./kk delete cluster -f config-sample.yaml
# 或 kubeadm reset(见 K8s 分册)+ 手工清 CNI/iptables
17.4 残留验证
helm list -A | grep -i ks-
kubectl get ns | grep -i kubesphere
kubectl get crd | grep -i kubesphere
kubectl get clusterrole,clusterrolebinding | grep -i kubesphere
kubectl get pods -A | grep -iE 'ks-|whizard|gateway'
# 节点上的残留
ls -la /etc/kubernetes/ /root/.kubekey/ 2>/dev/null
iptables -L -n | grep -i calico
18. 故障速查
| 现象 | 优先排查 | 命令 / 动作 |
|---|---|---|
| 装完 Core 控制台 30880 打不开 | console Pod / NodePort / 防火墙 | kubectl get pods,svc -n kubesphere-system;curl -I :30880 |
| 控制台报接口 500 | ks-apiserver | kubectl logs deploy/ks-apiserver -n kubesphere-system |
| 登录失败 / 默认密码不对 | 版本与初始化 | v4 默认 admin / P@88w0rd;查 apiserver 日志;重置看官方流程 |
| 一直等 installer Pod | 把 v3 教程用在 v4 | `helm list -A |
| 扩展市场空白 | extension.imageRegistry / 内网不通 |
看 kse-extension-repository Pod 日志;补两个 imageRegistry |
| 装扩展卡住 | Helm release failed | helm list -A;helm history / rollback;v4.3.0 修过一批升级问题 |
Pod ImagePullBackOff |
私有仓库 / 证书 | crictl pull 实测;certs.d/hosts.toml;CA 信任 |
Pod Pending |
无默认 SC / 资源不足 | kubectl get sc;kubectl describe pod;kubectl top nodes |
| 升级后组件拉不到镜像 | --reset-values 冲掉 imageRegistry |
helm get values;用 -f values.yaml 重升 |
| 升级 K8s 后平台异常 | API 版本兼容 | 查兼容矩阵;必要时回滚 Core |
| 多集群显示离线 | token / 网络 / 时间 | curl -k :6443/version;timedatectl;agent 日志 |
| 监控无数据 | Whizard / Prometheus 扩展 | `kubectl get pods -A |
kubectl top 报错 |
metrics-server | kubectl get deploy -n kube-system metrics-server |
| 网关 404/502 | Ingress class / 后端 | kubectl get ingress -A;kubectl describe ingress |
| 控制台能开但创建项目没反应 | ks-controller-manager | 看控制器日志与 CR 状态 |
| debug 容器残留 | v4.3.0 可视化 debug | 重建 Pod 或删除 ephemeral container |
18.1 三分钟定位脚本
kubectl get nodes -o wide
kubectl get pods -n kubesphere-system -o wide
kubectl get pods -A --field-selector=status.phase!=Running | grep -v Completed
helm list -A
kubectl get events -A --sort-by=.lastTimestamp | tail -20
kubectl -n kubesphere-system logs deploy/ks-apiserver --tail=50 | grep -iE 'error|warn'
19. 安全基线与危险红线
19.1 基线
- 首次登录改掉
admin / P@88w0rd - 控制台 30880 不暴露公网,走 VPN / 堡垒机 / 反代 + SSO
- 平台角色最小权限,项目级不给
cluster-admin - 开启审计(v3 配置 / v4 扩展),日志保留 ≥ 180 天
- 私有仓库启用 TLS 与最小权限账号
- License、Helm values、etcd 快照异地保存
- 扩展组件来源可信,不用第三方未签名 chart
- Copilot / AI 助手绑定的 LLM 与 API Key 走内网,审计对话内容
- 定期升级 K8s 与 KubeSphere,K8s 一次只升一个 minor
19.2 危险红线
| 操作 | 后果 |
|---|---|
helm uninstall ks-core 未备份 values/CR |
平台元数据全丢,需重建 RBAC |
kubectl delete crd 批量删平台 CRD |
级联删除所有企业空间/项目/扩展定义 |
升级带 --reset-values 且没传 values |
内网镜像前缀丢失,全组件拉不到镜像 |
v3 教程的 --with-kubesphere 用在 v4 |
装出错误组合,清理成本高 |
kk delete cluster 当成"重启" |
整集群销毁 |
| 跨多个 minor 升 K8s | 不支持,集群可能起不来 |
多集群下不看 current-context 执行删除 |
删错集群 |
20. 附录
20.1 命令速查
| 需求 | 命令 |
|---|---|
| 判断代际 | helm list -A | grep ks-core / kubectl get clusterconfiguration -A |
| 生成 KK 配置 | kk create config --with-kubernetes v1.30.6 |
| 建集群 | kk create cluster -f config-sample.yaml |
| 离线建集群 | kk create cluster -f config-sample.yaml --with-packages |
| 加节点 | kk add nodes -f config-sample.yaml |
| 升 K8s | kk upgrade --with-kubernetes v1.31.x -f config-sample.yaml |
| 装 Core(v4) | helm upgrade --install -n kubesphere-system ks-core oci://hub.kubesphere.com.cn/kse/ks-core --version <x> --wait |
| 看 values | helm -n kubesphere-system get values ks-core -a |
| 看 Core Pod | kubectl get pods -n kubesphere-system -o wide |
| 看扩展 | kubectl get extension -A / helm list -A |
| 重启 Core | kubectl -n kubesphere-system rollout restart deploy/ks-apiserver |
| 升级 Core | helm -n kubesphere-system upgrade ks-core <chart> -f values.yaml --wait |
| 回滚 Core | helm -n kubesphere-system rollback ks-core <rev> |
| 卸载 Core | helm -n kubesphere-system uninstall ks-core |
| 控制台 | http://<节点IP>:30880 |
20.2 版本与端口速查
| 项 | 值 |
|---|---|
| 当前产品版本 | v4.3.0(2026-08),v4.2.1 为上一个重点版本 |
| Core chart 示例 | 1.2.4(chart 版本 ≠ 产品版本) |
| Helm 要求 | ≥ 3.17.0 |
| 控制台端口 | 30880(NodePort,可改) |
| 默认账号 | admin / P@88w0rd |
| 国内镜像仓库 | hub.kubesphere.com.cn |
| Chart 源 | oci://hub.kubesphere.com.cn/kse/ks-core、https://charts.kubesphere.io/main/ |
20.3 与其他手册的配合
| 遇到这类问题 | 翻哪份 |
|---|---|
| Pod 起不来、调度、探针、HPA、RBAC、etcd 备份恢复 | Kubernetes 常用运维指令手册 |
CRI、sandbox 创建失败、crictl、certs.d、snapshotter |
containerd 常用运维指令手册 |
| 私有仓库 RBAC、复制、GC、备份 | Harbor 镜像仓库运维指令手册 |
| kubeadm 原生部署、证书轮换 | Kubernetes 手册第 2/13 章 |
| Sealos / KubeKey / KubeOperator 等部署工具对照 | 国产 K8s 部署与管理平台运维指令手册 |
| 国内云托管集群(ACK/TKE/CCE)上的 KubeSphere | 国内公有云容器服务运维指令手册 |
| 国产 OS 上的内核、SELinux/kysec 适配 | 国产操作系统运维指令手册 |
维护建议:KubeSphere 的 chart 版本、扩展镜像 tag、K8s 兼容矩阵随发布变动快,本文给出的
version=1.2.4、tag=v11.2.0是 v4.2.1 官方文档基线,落地前按当前发布说明核对。把私有仓库地址、K8s 版本、chart 版本、扩展清单写进集群交付单,升级与恢复都按单执行。