在日常维护Kubernetes集群时,如果在安装的时候没有把证书设置足够长的时间,那运行一段时间k8s就会面临证书过期的问题。如果处理不及时,会导致kubectl
命令无法使用,集群服务瘫痪。本文将详细讲解在k8s集群证书已经过期的情况下,如何检查和更新证书,有效延长证书的有效期,并确保集群恢复正常运行。通过几步操作,你可以轻松解决证书过期问题,避免实验环境或生产集群长时间宕机。
一、检查证书状态
首先,我们需要检查Kubernetes集群中各个组件证书的有效期,确定哪些证书已经过期或即将过期。在k8s控制节点执行以下命令查看证书状态:
kubeadm certs check-expiration
该命令将返回所有组件证书的过期日期和剩余时间,如下所示:
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
admin.conf Sep 24, 2024 13:49 UTC <invalid> ca no
apiserver Sep 24, 2024 13:49 UTC <invalid> ca no
...
如果发现某些证书的过期时间已到或即将到达,下一步就该立即更新这些证书了。
二、更新证书
要更新证书,Kubernetes 提供了简便的命令来更新所有或部分组件的证书。在k8s控制节点执行以下命令更新所有证书:
kubeadm certs renew all
该命令会自动更新所有到期或即将过期的证书。如果你只想更新某个特定的证书,也可以通过如下命令指定:
kubeadm certs renew <certificate-name>
常见的证书名称包括:
apiserver
apiserver-etcd-client
apiserver-kubelet-client
etcd-server
etcd-peer
etcd-healthcheck-client
三、验证证书更新
更新证书后,我们可以再次检查这些证书是否已经成功更新。在k8s控制节点执行以下命令查看更新后的证书有效期:
kubeadm certs check-expiration
确保所有证书都已经显示出新的过期时间。
四、重启控制平面组件
证书更新后,需要重启Kubernetes的控制平面组件使其生效。由于动态证书重载目前并不支持所有组件,所以需要手动重启控制平面的Pod。以下是具体步骤:
1、移动控制平面节点的清单文件
清单文件通常位于/etc/kubernetes/manifests/
目录下,将它们暂时移动到一个临时目录以便Kubelet停止相应的Pod:
mv /etc/kubernetes/manifests/*.yaml /tmp/
2、等待Pod终止
等待一段时间(例如60秒),然后检查Pod是否已成功停止:
sleep 60
crictl ps
3、将清单文件移回原始位置
确认Pod终止后,将清单文件移回原始目录以便Kubelet重新创建Pod并加载新的证书:
mv /tmp/*.yaml /etc/kubernetes/manifests/
4、再次检查Pod是否正常运行
等待Pod重新启动,并再次使用crictl ps
命令检查它们是否已经使用新的证书成功:
sleep 60
crictl ps
5、重启Kubelet服务
完成以上操作后,重新启动kubelet
服务以确保所有组件都正常加载新的证书:
sudo systemctl restart kubelet
六、HA集群注意事项
如果你的Kubernetes集群是多主节点架构(HA架构),需要在所有主节点上依次执行证书更新和组件重启的操作,以确保整个集群都能正确更新证书并恢复服务。
七、总结
证书过期虽然是Kubernetes运维中的常见问题,但通过以上几个简单的步骤,可以快速修复这个问题,保证集群服务的正常运行。记得定期检查证书的有效期,避免因过期导致的不可用情况发生。
云计算架构师韩先超亲身经历 | 记录从大学到现在工作经历 云计算架构师韩先超对咪咕进行【K8S超大规模集群与AI赋能算力网络调度】培训 对合肥电信进行线下Kubernetes技术培训 推荐书籍:《Kubernetes从入门到DevOps企业应用实战》——韩老师以企业实战为背景出版的一本高质量书籍 Linux常用命令大全 深度探索:Linux内核优化高级指南 全面掌握:Linux运维面试必备题库(服务器、网络、Docker、K8s、DevOps等) 很多docker镜像站被封了?哪些能用,抓紧收藏 国产操作系统崛起!揭开未来科技的神秘面纱 Centos停更了,基于业务场景选择合适的操作系统替代Centos。 探索Kubernetes/K8S的奇妙世界:十大必知创新技术 大规模场景下K8S集群设计|大企业5000个节点k8s架构设计|第1集 大规模K8S集群的网络与存储优化:5000+节点规模| 第2集 高效运用 GPU:在 Kubernetes 集群中动态管理 GPU 资源 从这几个方面做,可以确保你的Linux 系统更加安全,免受攻击 应对Nginx流量洪峰:优化配置与内核调整,保障服务稳定,应对高并发 超全工具宝藏大揭秘:从IT到AI全覆盖|真的很有用,建议收藏 点赞、关注和"在看",薪资翻倍