适用场景
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 快照可恢复、证书有效期有余量、升级按支持路径执行且四类功能验证通过。
> 说明:文中命令为通用写法,不同型号/版本可能略有差异,落地前请对照设备实际版本的官方文档;带外管理与安全设备变更建议先在测试设备验证。