概述
当遇到 Kubernetes 证书过期导致的故障时(例如 kubectl 报证书过期),通常会执行 kubeadm certs renew all 进行续期。续期后,kubectl 可能恢复正常,但如果集群核心组件仍在使用内存中的旧证书,仍会出现部署或通信错误。本文是一个按步骤的操作手册,包含 Master/Worker 节点的处理流程与常见故障处理方法。
问题示例
在某次操作中,执行证书续期后 kubectl 在 Master 上可以正常查看 Pod,但部署应用失败。apiserver 日志中可能出现类似的 x509 证书相关错误:

前提
- 请在每一步操作前做好备份(尤其是
/etc/kubernetes、/var/lib/kubelet/pki等目录)。 - 如果是多 Master(HA)集群,请在每台 Master 上重复 Master 步骤。
第一阶段:Master 节点(控制平面)
在 Master 节点上按顺序执行:
1) 基础检查与备份
sudo kubeadm certs check-expiration
说明:确认哪些证书过期与到期时间。
备份现有证书与配置:
sudo cp -r /etc/kubernetes/ /tmp/backup/
sudo cp -r /var/lib/kubelet/pki/ /tmp/backup.kubelet_pki/
2) 续期证书
sudo kubeadm certs renew all
说明:此命令会更新集群内部的核心证书文件,但组件内存可能仍加载旧证书。
3) 强制使控制平面组件加载新证书(移动 manifest 法)
注意:仅更新证书文件不足以让运行中的控制面组件立即生效,需要重启这些静态 Pod。
sudo mkdir -p /tmp/k8s-renew
sudo mv /etc/kubernetes/manifests/*.yaml /tmp/k8s-renew/
# 等待 20-30 秒,确认容器停止
crictl -r unix:///var/run/containerd/containerd.sock ps
# 再把 manifest 移回,触发静态 Pod 重启
sudo mv /tmp/k8s-renew/*.yaml /etc/kubernetes/manifests/
说明:/etc/kubernetes/manifests 由 kubelet 监控,移走会停止 API Server、Controller Manager、Scheduler 等静态 Pod,移回后会使用最新证书重启。
4) 更新 kubeconfig(管理员配置)
cp /root/.kube/config /tmp/kube.old/config
cp /etc/kubernetes/admin.conf ~/.kube/config
说明:admin.conf 包含与集群通信的凭据,若不替换,kubectl 可能仍使用旧凭据。
5) 重启 kubelet
sudo systemctl restart kubelet
说明:让 kubelet 加载并识别最新的证书与配置。
第二阶段:Worker 节点(工作节点)
Worker 节点通常会自动轮换证书,操作相对简单:
sudo systemctl restart kubelet
在每一台 Worker 上执行该命令,通常足以恢复节点与控制面的连接。
第三阶段:特殊故障处理(x509 / 加入失败)
如果在重启 kubelet 后,Worker 仍然报 x509 或证书认证相关错误,可按下面步骤强制重新加入:
1) 在 Master 上生成 join 命令:
kubeadm token create --print-join-command
2) 在问题节点上重置并重新加入:
sudo kubeadm reset -f
# 然后执行第 1 步生成的 kubeadm join <...> 命令
说明:kubeadm reset 会清除该节点的集群配置,重加入会重新建立可信链与凭据。
附录:调试建议
- 使用
journalctl -u kubelet -f查看 kubelet 日志。 - 查看 API Server 日志位置(systemd / container runtime)以确认 x509 相关的错误详情。
- 若是证书链或 CA 错误,需要确认
/etc/kubernetes/pki/ca.crt与相应私钥是否一致且已被正确替换。