国内公有云容器服务运维指令手册
国内公有云容器服务运维指令手册
覆盖平台:阿里云 ACK / ACR、腾讯云 TKE / TCR、华为云 CCE / SWR、火山引擎 VKE(含镜像仓库与加速器) 底座版本:Kubernetes 1.30 ~ 1.36(各云支持窗口不同,见第 2 章) 约定:
#本地终端,$云 CLI,<xxx>为占位符;kubectl一律写全。 边界说明:托管集群的控制面不归你管,本手册讲的是"在托管边界之外,你还能且必须做什么"。 更新时间:2026-11(版本事实核对至 2026-11-05)
目录
- 全景与托管边界
- 版本生命周期与强制升级
- 集群形态与选型
- CLI、凭据与 kubeconfig
- 集群创建与节点池
- 弹性伸缩
- 网络
- 存储与备份
- 镜像仓库 ACR / TCR / SWR
- 国内镜像加速与拉取
- 可观测、日志与排障边界
- 升级窗口与灰度
- 灾备与跨地域
- 安全、权限与等保合规
- 成本治理
- 混合云与多集群
- 故障速查
- 附录
1. 全景与托管边界
1.1 四家平台速览(2026 年公开资料)
| 维度 | 腾讯云 TKE | 阿里云 ACK | 华为云 CCE | 火山引擎 VKE |
|---|---|---|---|---|
| 单集群最大节点数 | 50,000+ | 15,000 | 5,000 | VPC-CNI 模型 5,000 |
| 控制面 SLA | 99.95% | 99.95% | 99.95% | 99.95% |
| 节点类型 | 原生节点 / 超级节点 / 注册节点 / 普通 CVM | ACK Pro / Serverless(ECI) / Edge / One | CCE Standard / Turbo / Autopilot | 托管集群 / 注册集群 / 无 ECS 节点集群 |
| 弹性 | HPA/VPA/CA/Karpenter,数十种指标 | AHPA 预测弹性 + HPA/VPA/CronHPA/KEDA | Volcano Gang 调度、CA/Karpenter | HPA/CronHPA/IHPA/KEDA |
| 特色 | 超级节点秒级沙箱、单集群混布多节点类型 | 达摩院 AHPA 预测伸缩、1000 节点约 40 秒 | Turbo 裸金属容器网络、Volcano 批调度 | 与字节系可观测/中间件集成 |
| 多集群 | 注册集群纳管多云/边缘 | ACK One / 混合云节点池 | 多云容器平台 MCP | 多云管理平台 |
| 日志/监控 | CLS + 托管 Prometheus | SLS + ARMS Prometheus | LTS + AOM | TLS / VMP |
上述规模与最高版本来自 2026 年中的公开评测,具体数值以各云当前产品文档为准;云厂商几乎每年都会刷新上限。
1.2 责任共担:什么归你、什么归云
| 层 | 托管集群 | 你负责 |
|---|---|---|
| etcd / apiserver / scheduler / controller-manager | 云托管,不可 SSH、不可备份 etcd | 版本选择、升级窗口、API 兼容 |
| 控制面 HA / 证书 / 补丁 | 云负责 | 关注公告与 EOL 日期 |
| Worker 节点 | 多数形态下你负责(超级节点/Serverless 除外) | 系统补丁、内核、运行时、磁盘、安全组 |
| 网络插件 / CNI | 云提供并托管配置 | Pod/Service 网段规划、安全组、Ingress |
| 工作负载 / 数据 | — | 全部 |
| 镜像 | — | 仓库、扫描、签名、生命周期 |
| 日志与监控采集 | 云提供托管服务 | 采集配置、告警规则、留存与费用 |
最重要的一条:托管集群没有 etcd 快照可打。所以 K8s 分册里那套
etcdctl snapshot save在这里用不上;灾备必须靠 Velero/清单 GitOps + 数据层备份 + 镜像异地复制(见第 13 章)。
1.3 与传统自建集群的运维差异
| 事项 | 自建 kubeadm | 托管集群 |
|---|---|---|
| 控制面挂了 | 自己修 | 提工单,看状态页 |
| 证书轮换 | kubeadm certs renew |
云平台自动 |
| 升级 | 逐节点手工 | 控制台/CLI 触发,控制面先升、节点池后升 |
| 节点 NotReady | 自己查 kubelet | 先查云控制台节点状态与事件,再考虑登录 |
| 网络不通 | iptables/CNI 全自查 | 先排 安全组 / VPC 路由 / 云负载均衡 |
| apiserver 日志 | 直接看 | 通过审计日志服务查看 |
2. 版本生命周期与强制升级
2.1 三家官方策略(2026-11 核对)
阿里云 ACK(文档更新 2026-07-03):
| 规则 | 内容 |
|---|---|
| 支持范围 | 只有最近 3 个 minor 可新建集群 |
| 当前在支持 | 1.36(2026-05 发布,EOS 2027-05-30)、1.35(2026-02,EOS 2027-02-28)、1.34(2025-09,EOS 2026-09-30) |
| 已停止支持 | 1.33 / 1.32 / 1.31 / 1.30 / 1.28 / 1.26 …(1.30 EOS 2026-06-30) |
| 升级 | 一次只升一个 minor,不能跳级、不能降级;patch 只能升到最新 patch |
| 版本格式 | x.y.z-aliyun.n(n 是 ACK 补丁号) |
| 强制升级 | 过期版本不允许长期运行,提前 ≥ 1 个月 短信/邮件/站内信通知,会连组件、控制面、节点池一起升 |
腾讯云 TKE(官方版本日历):
| K8s 版本 | GA | EOM | EOFS | EOS |
|---|---|---|---|---|
| 1.36 | 2026-10-25 | 2028-04-25 | 2028-10-25 | 2029-01-25 |
| 1.34 | 2025-11-25 | 2027-05-25 | 2027-11-25 | 2028-02-25 |
| 1.32 | 2025-06-25 | 2026-12-25 | 2027-06-25 | 2027-09-25 |
| 1.30 | 2024-08-20 | 2026-02-20 | 2026-08-20 | 2026-11-20 |
| 1.28 | 2024-04-28 | 2025-10-28 | 2026-04-28 | 2026-07-28 |
⚠️ 时间敏感:以 2026-11-05 计,TKE 1.30 距离 EOS 只剩约两周。还在 1.30 的集群应立刻排升级窗口;过期后不能新建、不再有补丁、SLA 不保证,平台保留强制升级权(提前不少于 30 天通知)。
华为云 CCE Autopilot(官方版本策略):
| 版本 | 状态 | 商用起 | EOS |
|---|---|---|---|
| v1.36 | 商用 | 2026-08 | 2028-08 |
| v1.35 | 商用 | 2026-05 | 2028-05 |
| v1.34 | 商用 | 2026-03 | 2028-03 |
| v1.32 | 商用 | 2025-08 | 2027-08 |
| v1.31 | 商用 | 2025-04 | 2027-04 |
| v1.28 | EOS | — | 2026-02 |
| v1.27 | EOS | — | 2025-10 |
CCE 版本格式 vX.Y.Z-rN(rN 是 CCE 补丁号);EOS 后不提供技术支持、漏洞修复,SLA 失效,平台可能在 EOS 前自动升级。
CCE Standard/Turbo 与 Autopilot 的版本日历不同,查文档时别串台。
2.2 版本治理 SOP
# 1) 每季度盘一次所有集群版本与 EOS 日期
kubectl version --short 2>/dev/null || kubectl version
kubectl get nodes -o jsonpath='{.items[*].status.nodeInfo.kubeletVersion}'
# 2) 检查业务用到的废弃 API(升级前必做)
kubectl api-resources | grep -iE 'policy/v1beta1|extensions/v1beta1|apiextensions.k8s.io/v1beta1'
kubectl get pdb -A -o yaml | grep -i 'policy/v1beta1' # 老 PDB API
kubectl get ingress -A -o yaml | grep -i 'networking.k8s.io/v1beta1'
# 3) 打升级工单/变更单,明确:目标版本、升级顺序、回滚方案、业务验证清单
坑:升级最常见的翻车不是控制面,而是业务用了已移除的 API(
extensions/v1beta1Ingress、policy/v1beta1PDB/PSP 等)。控制面升上去后,旧清单直接apply 失败或控制器失效。先把清单迁到新 API,再升集群。
2.3 强制升级的现实
三家都保留"过期版本强制升级"的权利,通知期约 30 天。强制升级可能同时动:集群组件 → 控制面 → 节点池/节点。把它当作不可控变更对待:提前自己升,别等平台替你升。
3. 集群形态与选型
| 形态 | 节点管理 | 适用 | 运维重点 |
|---|---|---|---|
| 托管标准集群(ACK Pro / TKE 普通 / CCE Standard) | 你管 ECS/CVM 节点 | 常规业务 | 节点池、系统盘、安全组、补丁 |
| Serverless / 超级节点(ECI / 超级节点 / CCE Autopilot / VKE 无节点集群) | 不管节点,按 Pod 计费 | 波峰波谷、批处理、CI | 规格、镜像拉取速度、冷启动、配额 |
| 专有/裸金属增强(CCE Turbo、TKE 原生节点) | 部分托管 | 高性能网络、金融 | 网络模型、ENI 配额 |
| 边缘集群(ACK Edge) | 边缘节点自治 | IoT、门店 | 云边网络、离线自治 |
| 注册集群 | 纳管外部/其他云集群 | 混合云、多云统一视图 | 连通性、凭据、权限边界 |
| 多集群舰队(ACK One / TKE 多集群 / MCP) | 统一管理面 | 多地域、多环境 | 应用分发、差异化配置 |
选型的关键分界:要不要为节点运维负责。团队没有节点运维能力、流量波动大,优先 Serverless;有稳定负载且要精细控制内核/网络,用托管标准集群。
4. CLI、凭据与 kubeconfig
4.1 三家 CLI
# 阿里云 aliyun CLI
aliyun version
aliyun configure list
aliyun cs GET /clusters --header "Content-Type=application/json" # 列集群(示意)
# 腾讯云 tccli
tccli --version
tccli configure list
tccli tke DescribeClusters
# 华为云 hcloud CLI
hcloud --version
hcloud CCE ListClusters
# 通用:kubectl
kubectl config get-contexts
kubectl config current-context
kubectl config use-context <context>
4.2 获取 kubeconfig
# 阿里云(示意,参数以当前 CLI 版本为准)
aliyun cs GET /k8s/<cluster_id>/user_config > ~/.kube/ack-prod
# 腾讯云
tccli tke DescribeClusterKubeconfig --ClusterId <cluster_id>
# 华为云
hcloud CCE ShowClusterConfig --cluster_id <cluster_id>
export KUBECONFIG=~/.kube/ack-prod:~/.kube/tke-prod
kubectl config view --minify | head
坑:云控制台下载的 kubeconfig 常带短期凭据/临时 token(几小时~几天过期),还有的通过云 CLI 插件动态取凭据(如 ACK 的凭据插件、TKE 的 kubeconfig 需配合 CAM)。写进 CI/CD 时要用长期最小权限的服务账号 + 定期轮换,别把个人控制台凭据塞进流水线。
4.3 最小权限
- 阿里云 RAM:给 CI 账号
cs:Describe*/cs:Get*,推送镜像给 ACR 的cr:Push*等,按资源组/命名空间收敛。 - 腾讯云 CAM / 华为 IAM:同理,避免
AdministratorAccess/*FullAccess。 - Pod 内访问云资源:优先用 RRSA(ACK)/ OIDC 身份联邦 / 工作负载身份,别在 Secret 里长期存 AK/SK。
# 多集群下每次破坏性操作前确认上下文
kubectl config current-context
kubectl cluster-info
5. 集群创建与节点池
5.1 创建前必定的四件事
- 网段规划:VPC 网段、Pod 网段、Service 网段三者互不重叠,且不与办公网 / VPN / 其他集群 / 线下 IDC 冲突。云上 VPC 一旦创建,网段改不了。
- 网络模型:VPC-CNI(Pod 直接拿 VPC IP,性能好但吃 ENI 配额)vs 全局路由 / Overlay(省 IP,多一层转发)。
- 可用区:控制面多 AZ 由云托管,节点池自己要跨 AZ 分布;单 AZ 节点池 = 单点。
- 容器运行时与 OS 镜像:云提供的镜像预装了云组件,别随意换成自定义镜像,否则节点可能加不进集群。
# 创建后核验
kubectl get nodes -L topology.kubernetes.io/zone -o wide
kubectl get pods -n kube-system -o wide
kubectl get sc
kubectl get cm -n kube-system kubeadm-config -o yaml 2>/dev/null | grep -iE 'podSubnet|serviceSubnet'
5.2 节点池运维
kubectl get nodes -o wide
kubectl describe node <node> | tail -30
kubectl top nodes
kubectl get events -A --sort-by=.lastTimestamp | grep -i node | tail -20
| 操作 | 注意 |
|---|---|
| 扩容节点池 | 关注 ECS/CVM 库存、ENI/IP 配额、安全组规则 |
| 缩容 | 先 cordon + drain,确认 PDB 不会卡住;云控制台缩容一般会自己 drain,但仍要盯 |
| 换系统盘/镜像 | 走节点池滚动替换,不要手工重装 |
| 节点自愈 | 开启云提供的节点自愈/健康检查,别自己写脚本反复重启 |
云厂商的节点池有自己的"期望节点数"。手工
kubectl delete node后,节点池控制器可能自动补一台,表现为"删了又回来"。要缩容就去改节点池,不要在 kubectl 里删。
6. 弹性伸缩
| 层次 | 手段 | 说明 |
|---|---|---|
| Pod 层 | HPA / VPA / CronHPA / KEDA | 指标来自托管 Prometheus 或云监控 |
| 节点层 | Cluster Autoscaler / Karpenter / 云弹性节点池 | 关注扩容速度与配额 |
| 预测 | ACK AHPA(基于历史流量预测) | 适合周期性波峰 |
| 批任务 | Volcano(CCE)/ Kueue / 超级节点 | Gang 调度、队列 |
kubectl get hpa -A
kubectl get vpa -A 2>/dev/null
kubectl get scaledobject -A 2>/dev/null
kubectl describe hpa <name> -n <ns>
kubectl get events -A --sort-by=.lastTimestamp | grep -iE 'scaled|autoscal' | tail -20
坑:HPA 依赖 metrics-server / 云指标适配器。指标缺失时 HPA 显示
<unknown>且不扩容,业务直接被打爆。把"指标链路可用性"纳入告警,而不是只监控 CPU。
7. 网络
7.1 排查顺序(云上和自建完全不同)
# 1) Pod 与 Service
kubectl get pod,svc,endpoints,endpointslices -n <ns>
kubectl get networkpolicy -A
# 2) Ingress / Gateway
kubectl get ingress -A
kubectl describe ingress <name> -n <ns>
# 3) 云负载均衡(控制台 / CLI)
# 4) 安全组与 VPC 路由(控制台,命令行看不到)
# 5) DNS
kubectl -n <ns> exec <pod> -- nslookup kubernetes.default
云上 70% 的"服务不通"出在安全组、VPC 路由表、CLB 后端健康检查和证书,不是 Pod 本身。先在云控制台看 CLB 后端是否全健康,再去
kubectl describe。
7.2 常见网络坑
| 现象 | 原因 |
|---|---|
| Service ClusterIP 不通 | 节点安全组没放行节点间通信 / 网络插件异常 |
| Ingress 404 | IngressClass 不匹配、路径重写、证书绑定错 |
| CLB 后端全不健康 | 健康检查路径返回非 200、Pod 就绪探针太严、节点端口未放行 |
| Pod 拿不到 IP | VPC-CNI 模式 ENI / 辅助 IP 配额耗尽 |
| 跨 AZ 延迟高 | 节点池单 AZ / 流量跨 AZ 转发 |
| 访问公网超时 | NAT 网关 / EIP / 安全组出方向 |
| 访问云上数据库慢 | 走了公网而非 VPC 内网地址 |
# quotas 相关(控制台为准),命令行先看事件
kubectl get events -A --sort-by=.lastTimestamp | grep -iE 'eni|ip|quota|limit' | tail -20
8. 存储与备份
kubectl get sc -o yaml
kubectl get pvc -A | grep -v Bound
kubectl describe pvc <pvc> -n <ns>
kubectl get volumesnapshot -A 2>/dev/null
| 存储类型 | 云产品 | 要点 |
|---|---|---|
| 块存储 | 云盘 ESSD / CBS / EVS | 单可用区,Pod 跨 AZ 调度会挂载失败 |
| 文件存储 | NAS / CFS / SFS | 多 AZ 共享,适合共享读 |
| 对象存储 | OSS / COS / OBS | 走 CSI 或直接 SDK,适合备份与非结构化数据 |
| 快照 | 云盘快照 | 与 CSI VolumeSnapshot 集成,注意一致性 |
坑:块存储云盘不能跨可用区挂载。节点池跨 AZ + 单副本 StatefulSet + 云盘 PVC = 节点故障后 Pod 永远 Pending。要么固定节点池单 AZ,要么用文件存储/多副本。
8.1 备份体系(托管集群没有 etcd 快照)
# Velero 备份集群资源 + PVC 快照
velero install --provider alibabacloud --plugins <云插件镜像> \
--bucket <bucket> --secret-file ./credentials-cloud
velero backup create full-$(date +%F) --include-namespaces <ns> --snapshot-volumes
velero backup get
velero backup describe <name> --details
velero restore create --from-backup <name>
四层备份缺一不可:
- 声明式清单:GitOps(Argo CD / Flux)里的所有 yaml / Helm values。
- 集群资源:Velero 定时备份。
- 持久化数据:云盘快照 + 数据库自己的 PITR(RDS 备份、自建库 binlog/WAL)。
- 容器镜像:ACR/TCR/SWR 跨地域复制(见 9.4)。
9. 镜像仓库 ACR / TCR / SWR
9.1 域名与登录
| 云 | 仓库 | 域名形态 |
|---|---|---|
| 阿里云 | ACR 个人版 / 企业版 | registry.cn-<region>.aliyuncs.com/<namespace>/<repo>;企业版 <instance>-registry.cn-<region>.cr.aliyuncs.com |
| 腾讯云 | TCR 个人版 / 企业版 | ccr.ccs.tencentyun.com/<namespace>/<repo>;企业版 <instance>.tencentcloudcr.com |
| 华为云 | SWR | swr.cn-<region>.myhuaweicloud.com/<org>/<repo> |
# 通用 docker login(凭据用 RAM/CAM/IAM 子账号或临时 token)
docker login registry.cn-hangzhou.aliyuncs.com -u <user> -p '<token>'
docker login ccr.ccs.tencentyun.com -u <user> -p '<token>'
docker login swr.cn-north-4.myhuaweicloud.com -u <user> -p '<token>'
docker tag app:1.0 registry.cn-hangzhou.aliyuncs.com/prod/app:1.0
docker push registry.cn-hangzhou.aliyuncs.com/prod/app:1.0
# k8s 拉取凭据
kubectl create secret docker-registry regcred -n <ns> \
--docker-server=<registry> --docker-username=<user> --docker-password='<token>'
生产环境优先用镜像免密拉取组件(ACK 的
aliyun-acr-credential-helper、TKE 的 TCR 免密插件、CCE 的 SWR 免密),别把长期 token 以 Secret 形式散落在各命名空间。
9.2 仓库治理
| 项 | 做法 |
|---|---|
| 命名空间 | 按环境/团队分(prod/、staging/、team-a/) |
| 版本策略 | 禁用 latest;用 Git SHA 或语义化版本 + 不可变 tag |
| 镜像扫描 | 开启安全扫描,高危漏洞阻断部署 |
| 签名 | 企业版支持镜像签名/验签(配合 KMS) |
| 清理 | 设置版本保留策略,定期 GC,控制存储费 |
| 权限 | 推送/拉取分离,按 namespace 授权 |
| 审计 | 开启操作审计,记录谁推了什么 tag |
# 查看集群里实际用的镜像来源(排查是否还在拉公网)
kubectl get pods -A -o jsonpath='{range .items[*]}{.spec.containers[*].image}{"\n"}{end}' \
| sed 's/:.*//' | sort | uniq -c | sort -rn | head -20
9.3 镜像加速器(与仓库是两回事)
| 云 | 加速器 | 获取方式 |
|---|---|---|
| 阿里云 | https://<专属ID>.mirror.aliyuncs.com |
控制台「容器镜像服务 ACR → 镜像工具 → 镜像加速器」,每账号独立 |
| 腾讯云 | 控制台生成的个人加速域名;https://mirror.ccs.tencentyun.com 为公共地址(腾讯云内网效果好) |
TCR → 镜像加速 |
| 华为云 | 按区域生成的 SWR 加速地址 | SWR → 镜像加速器 |
| DaoCloud | https://docker.m.daocloud.io(公共) |
免注册,应急备用 |
| 开放原子 AtomHub | https://atomhub.openatom.cn |
仅约 336 个基础可信镜像,适合高安全场景 |
9.4 跨地域/跨云复制
# 三家企业版都支持"实例间镜像复制"规则(控制台配置)
# 手动兜底:skopeo 跨仓库拷贝
skopeo copy --all \
docker://registry.cn-hangzhou.aliyuncs.com/prod/app:1.0 \
docker://ccr.ccs.tencentyun.com/prod/app:1.0 \
--dest-creds <user>:<token>
灾备要覆盖镜像:集群清单恢复了、数据恢复了,但镜像仓库在单地域且没复制,照样起不来。
10. 国内镜像加速与拉取
10.1 2026 年现状(重要)
- 多数高校 / 公益 Docker Hub 公共加速已停止服务或限制匿名访问,继续把清华、中科大、上交等老地址写进
registry-mirrors往往是拖慢而不是加速。 - 最稳的是云厂商为账号单独分配的专属加速器(ACR / TCR / SWR),有配额、有维护、不会因为滥用被关。
- 网上流传的
https://abc123.mirror.aliyuncs.com是别人账号的地址,别抄;要么解析不到,要么被对方限流甚至账号注销后失效。 - 公共源(DaoCloud 等)可作应急备用,但不该作为生产唯一依赖。
10.2 验证一个加速地址是否还活着
# 200 或 401 都算服务正常(401 是要求鉴权)
curl -I --connect-timeout 5 https://<加速地址>/v2/
# 实测拉取
time docker pull --platform linux/amd64 hello-world
docker pull <加速地址>/library/nginx:alpine 2>/dev/null || true
10.3 daemon.json 正确写法
{
"registry-mirrors": ["https://<你的专属ID>.mirror.aliyuncs.com"],
"log-driver": "json-file",
"log-opts": { "max-size": "100m", "max-file": "3" }
}
systemctl daemon-reload && systemctl restart docker
docker info | grep -A5 'Registry Mirrors'
坑:
registry-mirrors是串行回退列表。配 5 个地址、前 3 个超时,每次 pull 都要多等几十秒。只配 1 个主力 + 最多 1 个备用,且每月复测一次。
10.4 容器运行时不是 Docker 时
K8s 节点用 containerd,加速器要配在 /etc/containerd/certs.d/docker.io/hosts.toml(containerd 1.7+/2.x):
# /etc/containerd/certs.d/docker.io/hosts.toml
server = "https://docker.io"
[host."https://<加速地址>"]
capabilities = ["pull", "resolve"]
override_path = true
systemctl restart containerd
crictl pull nginx:alpine
云托管节点由平台预置,一般不给你改 containerd 配置。优先把业务镜像同步到同地域的 ACR/TCR/SWR 内网地址,这比在节点上配加速器更稳、更快、也不受公网波动影响。
10.5 内网部署的推荐路径
外网构建机 → push 到 ACR/TCR/SWR 企业版
→ 跨地域复制到内网可达区域
→ 集群通过 VPC 内网地址拉取
→ 完全不依赖 Docker Hub
11. 可观测、日志与排障边界
11.1 日志与监控服务
| 云 | 日志 | 指标 / 告警 |
|---|---|---|
| 阿里云 | SLS(日志服务) | ARMS Prometheus / 云监控 |
| 腾讯云 | CLS | 托管 Prometheus / 云监控 |
| 华为云 | LTS | AOM / CES |
| 火山引擎 | TLS | VMP / 云监控 |
# 集群侧能自己拿到的
kubectl get events -A --sort-by=.lastTimestamp | tail -50
kubectl top nodes
kubectl top pods -A --sort-by=memory | head -20
kubectl logs -f <pod> -n <ns> --tail=200
kubectl describe pod <pod> -n <ns>
11.2 托管集群看不到的东西
| 想看 | 能不能 |
|---|---|
| apiserver / etcd 进程状态 | 不能,看云控制台集群状态与健康检查 |
| 控制面日志 | 部分通过审计日志服务提供 |
| etcd 数据 / 快照 | 不能 |
| 控制面节点 SSH | 不能 |
| Master 组件参数 | 不能改(部分平台提供有限自定义) |
因此排障要有分层意识:Pod 问题自己查;节点问题查云控制台 + 登录节点;控制面/API 不可用直接看云状态页并提工单,别在节点上白折腾两小时。
11.3 常见"看起来像 K8s 问题,其实是云资源问题"
| 现象 | 云侧根因 |
|---|---|
| Pod Pending 大量 | ECS/CVM 库存不足、节点池配额、ENI/IP 耗尽 |
| PVC Pending | 云盘在另一可用区、云盘配额、CSI 插件异常 |
| LoadBalancer Service 一直 Pending | CLB 配额、EIP 不足、子网 IP 耗尽 |
| 节点 NotReady 反复 | 云主机被抢占/回收、系统盘满、云监控组件异常 |
| 镜像拉取慢/失败 | 公网出口、加速器失效、跨地域拉镜像 |
| API 调用 429/限流 | 云 OpenAPI 限流、控制面限流 |
| 证书 related 报错 | 云负载均衡证书过期(不是 K8s Secret) |
12. 升级窗口与灰度
12.1 升级顺序
1. 清单 API 兼容性治理(废弃 API 迁移)
2. 测试集群升到目标版本,跑核心回归
3. 控制面升级(控制台/CLI 触发,云托管,通常分钟级)
4. 节点池滚动升级(分批,可设并发数与间隔)
5. 插件/组件升级(CNI、CSI、Ingress Controller)
6. 业务验证 + 观察期
12.2 升级前检查
kubectl get pdb -A
kubectl get nodes -o wide
kubectl get pods -A --field-selector=status.phase!=Running | grep -v Completed
kubectl get hpa -A
kubectl api-resources | grep -i beta
# 记录当前版本与节点池配置
kubectl get nodes -o jsonpath='{.items[*].status.nodeInfo.kubeletVersion}' > /root/pre-upgrade.txt
坑:PDB 会卡住节点池 drain。升级前把
maxUnavailable: 0/minAvailable: 100%的 PDB 找出来评估,否则节点池滚动升级会一直停在"等待驱逐"。
12.3 回滚现实
托管集群控制面不能降级。升级出问题的兜底是:新建旧版本集群 → 从 GitOps + Velero + 数据备份恢复 → 切流量。所以"回滚方案"在托管集群里其实是重建方案,必须提前演练。
13. 灾备与跨地域
| 层 | 单地域方案 | 跨地域方案 |
|---|---|---|
| 控制面 | 云托管多 AZ | 另一地域预备一套空集群 + IaC 脚本 |
| 工作负载 | GitOps 清单 | 同一套清单分发到两地 |
| 集群资源 | Velero 定时备份到 OSS/COS/OBS | 备份文件跨地域复制 |
| 持久化数据 | 云盘快照 / RDS 备份 | 跨地域复制快照、数据库异地灾备 |
| 镜像 | 仓库同地域 | 企业版跨地域实例复制 |
| 入口流量 | CLB 多 AZ | DNS 解析切换 / GSLB |
# 定期演练(至少每半年一次)
velero backup create dr-drill-$(date +%F)
velero restore create --from-backup dr-drill-<date> --namespace-mappings <原ns>:<演练ns>
kubectl get pods -n <演练ns>
灾备演练的验收标准不是"备份任务成功",而是在另一地域用备份把业务真正拉起来并跑通读写。只备份不演练等于没备份。
14. 安全、权限与等保合规
14.1 基线
- 集群 API Server 不开放公网,或严格限定 IP 白名单
- RAM/CAM/IAM 子账号最小权限,禁用主账号 AK
- 开启审计日志并投递到独立日志账号,留存 ≥ 180 天(等保 2.0 三级常见要求)
- Pod 内用工作负载身份(RRSA / OIDC)访问云资源,不落 AK/SK
- Secret 用 KMS 加密(云托管 K8s 提供静态加密选项)
- 镜像仓库开启扫描、签名、不可变 tag
- NetworkPolicy 做东西向隔离;默认拒绝 + 白名单
- 节点安全组最小化,节点不暴露 SSH 到公网
- 开启 PSA / Pod Security Admission,禁用特权容器
- 定期打节点 OS 与运行时补丁(云镜像更新)
- 等保场景:留存操作审计、堡垒机运维通道、日志防篡改
kubectl get psp 2>/dev/null # PSP 已在 1.25 移除,看到说明版本太老
kubectl get ns -o jsonpath='{.items[*].metadata.labels.pod-security\.kubernetes\.io/enforce}'
kubectl get networkpolicy -A
kubectl get sa -A | head -20
14.2 权限排查
kubectl auth can-i --list --as=system:serviceaccount:<ns>:<sa>
kubectl get clusterrolebindings -o json | jq '.items[] | select(.subjects[]?.name=="<sa>")'
15. 成本治理
| 成本项 | 常见浪费 | 治理 |
|---|---|---|
| 节点 | 节点池常驻过大、低峰不缩 | CA/Karpenter、CronHPA、混合超级节点 |
| 超级节点 | 长期跑本该常驻的负载反而更贵 | 稳定负载用包年包月节点,突发用超级节点 |
| 镜像存储 | 历史 tag 无限堆积 | 版本保留策略 + 定期 GC |
| 日志 | 全量采集、永久保存 | 分级采集、按业务设留存、冷归档 |
| 负载均衡 | 每 Service 一个 CLB | 复用 Ingress / Gateway |
| 云盘 | 删 Pod 后 PVC 未回收 | 定期查 Released PVC |
| 跨区流量 | 跨 AZ / 跨地域调用 | 拓扑感知路由、同 AZ 部署 |
kubectl get pvc -A | grep Released
kubectl get svc -A -o wide | grep LoadBalancer
kubectl top nodes
kubectl get hpa -A
成本治理的第一刀通常是日志与镜像存储,而不是节点。先把这两个的留存策略定下来,再谈缩容。
16. 混合云与多集群
| 能力 | 阿里云 | 腾讯云 | 华为云 |
|---|---|---|---|
| 纳管外部集群 | 注册集群 | 注册集群 | 多云容器平台 MCP |
| 多集群应用分发 | ACK One | 多集群管理 | MCP / Karmada |
| 云边 | ACK Edge | TKE Edge | KubeEdge 集成 |
kubectl config get-contexts
kubectl --context <ctx-a> get nodes
kubectl --context <ctx-b> get nodes
# Karmada 场景
kubectl --context karmada-apiserver get clusters
kubectl --context karmada-apiserver get propagationpolicy -A
注册集群只是"统一视图",不会把自建集群变成托管集群:控制面仍归你管,etcd 仍要你备份,升级仍要你自己做。别因为控制台能看到了就以为责任转移了。
17. 故障速查
| 现象 | 优先排查 | 动作 |
|---|---|---|
kubectl 连不上 |
kubeconfig 过期 / 凭据插件 / API 公网白名单 | 重新取 kubeconfig;kubectl config current-context;云控制台看集群状态 |
| Pod 大量 Pending | 节点池配额 / ENI-IP / 库存 / PDB | 云控制台节点池事件;kubectl describe pod |
| Pod 拿不到 IP | VPC-CNI ENI/辅助 IP 配额 | 提配额、换网络模型或扩子网 |
| PVC Pending | 云盘跨 AZ / 配额 / CSI | kubectl describe pvc;看 CSI provisioner 日志 |
| LoadBalancer 一直 Pending | CLB/EIP 配额、子网 | 云控制台配额页 |
| CLB 后端不健康 | 健康检查路径 / 就绪探针 / 安全组 | 云控制台健康检查配置 |
| Ingress 404/502 | IngressClass、路径、后端 | kubectl describe ingress;看 Ingress Controller 日志 |
| 镜像拉取慢/超时 | 加速器失效 / 跨地域 / 公网出口 | curl -I <加速地址>/v2/;镜像同步到同地域仓库 |
| HPA 不扩容 | 指标适配器 / metrics-server | kubectl describe hpa 看 <unknown> |
| 节点反复 NotReady | 抢占式回收 / 磁盘满 / 云组件 | 云控制台节点事件 + 登录节点 journalctl -u kubelet |
| 升级卡在 drain | PDB 阻塞 | kubectl get pdb -A;调整 PDB 再继续 |
| 升级后部分控制器失效 | 废弃 API | 查 kubectl api-resources、迁移清单 |
| 控制面异常 | 云侧 | 看状态页 + 提工单,别在节点上找 |
| 收到强制升级通知 | 版本 EOS | 立即排窗口自己升,别等平台 |
| 跨 AZ 服务慢 | 节点池单 AZ | 节点池跨 AZ + 拓扑感知路由 |
| 云 OpenAPI 429 | 限流 | 退避重试、拆分调用、提配额 |
17.1 三分钟定位脚本
kubectl config current-context
kubectl version --short 2>/dev/null || kubectl version
kubectl get nodes -o wide
kubectl get pods -A --field-selector=status.phase!=Running | grep -v Completed
kubectl get pvc -A | grep -v Bound
kubectl get svc -A -o wide | grep LoadBalancer
kubectl get hpa -A
kubectl get events -A --sort-by=.lastTimestamp | tail -30
kubectl top nodes 2>/dev/null
18. 附录
18.1 CLI 与域名速查
| 云 | CLI | 容器服务 | 镜像仓库域名 | 日志/监控 |
|---|---|---|---|---|
| 阿里云 | aliyun |
ACK (aliyun cs) |
registry.cn-<region>.aliyuncs.com |
SLS / ARMS |
| 腾讯云 | tccli |
TKE (tccli tke) |
ccr.ccs.tencentyun.com |
CLS / 托管 Prometheus |
| 华为云 | hcloud |
CCE (hcloud CCE) |
swr.cn-<region>.myhuaweicloud.com |
LTS / AOM |
| 火山引擎 | volcengine-cli |
VKE | 火山镜像仓库 | TLS / VMP |
18.2 版本生命周期速查(2026-11)
| 平台 | 当前可建 / 主力 | 即将 EOS | 升级规则 |
|---|---|---|---|
| ACK | 1.34 / 1.35 / 1.36 | 1.34 EOS 2026-09-30(已过)、1.35 EOS 2027-02-28 | 只支持最近 3 个 minor;一次一个 minor;不可降级;x.y.z-aliyun.n |
| TKE | 1.32 / 1.34 / 1.36 | 1.30 EOS 2026-11-20 | GA→EOM→EOFS→EOS 四阶段;过期可强制升级 |
| CCE Autopilot | 1.34 / 1.35 / 1.36 | 1.31 EOS 2027-04;1.28 已 EOS | vX.Y.Z-rN;EOS 前可能自动升级 |
| VKE | 1.36(2026 年中公开数据) | 以官方日历为准 | 与主流一致 |
版本日历变动频繁,每次升级前重新查对应云官方文档,不要以本表为唯一依据。
18.3 高危操作红线
| 操作 | 后果 |
|---|---|
| 把个人控制台 kubeconfig 塞进 CI | 凭据过期导致发布全线失败,且权限过大 |
手工 kubectl delete node 缩容 |
节点池自动补足,或者业务被强驱 |
| 跨多个 minor 升级 / 尝试降级 | 不支持,可能需重建集群 |
| 升级前不查废弃 API | 升级后控制器/Ingress 失效 |
PDB 设 minAvailable: 100% 后升级 |
drain 永久卡住 |
| 依赖外部公共 Docker Hub 加速器做生产 | 随时失效,发布中断 |
| 单地域镜像仓库不做复制 | 灾备时清单齐了但拉不到镜像 |
| 块存储 PVC + 跨 AZ 节点池 | 节点故障后 Pod 永久 Pending |
| 在 Secret 里长期存云 AK/SK | 泄露即云账号失守 |
18.4 与其他手册的配合
| 遇到这类问题 | 翻哪份 |
|---|---|
| Pod、调度、探针、RBAC、HPA、PDB、NetworkPolicy | Kubernetes 常用运维指令手册 |
| containerd、crictl、certs.d、镜像拉取底层 | containerd 常用运维指令手册 |
| 自建 Harbor、GC、复制、扫描 | Harbor 镜像仓库运维指令手册 |
| kubeadm 自建集群与 etcd 快照 | Kubernetes 手册第 2/13 章 |
| KubeSphere / Kuboard / Rainbond 装到云托管集群 | 对应平台分册 |
| 国产 OS 上的云主机与信创适配 | 国产操作系统运维指令手册 |
| 容器平台整体分层与选型 | 容器平台常规运维指令手册 |
| 1Panel / 宝塔在云主机上的部署 | 对应面板分册 |
维护建议:云产品的版本日历、配额上限、CLI 参数与镜像仓库域名随区域和版本变动,本文的表格是 2026-11-05 核对的基线。落地时把「区域 + 集群版本 + EOS 日期 + 仓库域名 + 配额清单 + 升级窗口」写入集群台账,并设置 EOS 前 90/60/30 天三级提醒。