适用场景

K8s 集群最容易出大事的两件事:etcd 没了(集群状态全丢)和证书过期(集群「集体失联」)。这两件事都有标准解法,而且必须提前演练,不能等到出事再查文档。

配置步骤(证书管理与轮换)

# 1) 查看证书有效期(kubeadm 集群)
kubeadm certs check-expiration

# 2) 手工续期(升级后会自动续期,平时用于临期处理)
kubeadm certs renew all
# 续期后需要重启控制面组件(kubelet 会拉起静态 Pod)

# 3) kubelet 证书轮换确认
# /var/lib/kubelet/config.yaml 中 rotateCertificates: true

# 4) 监控证书到期
#  - 对 API Server 证书做黑盒探测(openssl s_client 取到期日)
#  - 剩余天数 < 30 天告警
echo | openssl s_client -connect 172.16.1.10:6443 -servername kubernetes 2>/dev/null | openssl x509 -noout -dates

# 5) 其他容易忽略的证书
#  - Ingress 泛域名证书
#  - etcd 证书
#  - Webhook 与 ServiceAccount(有效期长但仍要监控)

关键参数与建议

  • etcd 备份:定时快照(snapshot save)到外部存储,保留多份并校验
  • 备份验证:定期在测试集群用快照恢复一次,确认可用
  • 升级顺序:先升级控制面(逐个),再升级工作节点,最后升级组件(CNI/CSI/Ingress)
  • 版本跳跃:跨大版本必须按官方支持的路径逐级升级,禁止跨两级
  • 证书:确认 kubelet/API Server 证书有效期,到期前轮换,并纳入监控
  • 回滚:etcd 快照 + 节点镜像保留,明确回滚触发条件
  • 验证:升级后验证 Pod 调度、网络、存储、Ingress 四类功能
  • 文档:升级记录含版本、时间、执行人、问题与回滚点

容易踩的坑

  • 集群证书过期,kubectl 全部超时、集群「集体失联」
  • 只关注 Ingress 证书,忽略 API Server 与 kubelet 证书
  • 续期后没重启控制面组件,证书未生效
  • 没做到期监控,靠出事才发现
  • 手工续期不留记录,下次不知道上次什么时候做的
  • 多套集群证书到期时间不同,没有统一台账

验证与巡检

kubeadm certs check-expiration | head -20
echo | openssl s_client -connect <apiserver>:6443 2>/dev/null | openssl x509 -noout -dates

# 目标:所有证书剩余 > 30 天、台账记录到期日、轮换后组件正常
  • 巡检:证书台账、到期告警生效、轮换后 API 可用、多集群统一管理

小结

K8s 生命周期验收:etcd 快照可恢复、证书有效期有余量、升级按支持路径执行且四类功能验证通过。

> 说明:文中命令为通用写法,不同型号/版本可能略有差异,落地前请对照设备实际版本的官方文档;带外管理与安全设备变更建议先在测试设备验证。