作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
上一小节我们介绍了Kubernetes里面涉及到的证书,有的有效期是10年,有的有效期是1年,而且除了根证书是10年,实际业务使用的证书都是1年。如果证书到期,我们应该怎么续期呢?
1.查看当前证书情况
kubeadm certs check-expiration
这个图里面显示的证书其实就是我们上一小节讲过的哪些证书主要包括:
3个ca证书,3个etcd证书,3个apiserver证书,一个kubectl证书,一个controller-manager证书,一个scheduler证书,一个proxy启用代理证书。
这里的证书到期以后就不可用,不具有自动续签的能力。但是仔细和我们上一小节对比,发现少了kubelet的证书,kubelet证书该如何查看呢?
#kubelet证书查看
[root@master01 ~]# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text |grep Validity -A2
Validity
Not Before: Jan 10 11:51:48 2025 GMT
Not After : Jan 10 11:51:49 2026 GMT
更进一步进入目录发现,这个文件其实是个软连接,连接文件本目录下一个带有时间戳的文件,这个时间戳上的时间,实际上就是证书的生成时间,有效期就在这个生成时间加上一年时间。
2.证书续期
[root@master01 manifests]# kubeadm certs renew all
[renew] Reading configuration from the cluster...
[renew] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
certificate embedded in the kubeconfig file for the admin to use and for kubeadm itself renewed
certificate for serving the Kubernetes API renewed
certificate the apiserver uses to access etcd renewed
certificate for the API server to connect to kubelet renewed
certificate embedded in the kubeconfig file for the controller manager to use renewed
certificate for liveness probes to healthcheck etcd renewed
certificate for etcd nodes to communicate with each other renewed
certificate for serving etcd renewed
certificate for the front proxy client renewed
certificate embedded in the kubeconfig file for the scheduler manager to use renewed
Done renewing certificates. You must restart the kube-apiserver, kube-controller-manager, kube-scheduler and etcd, so that they can use the new certificates.
通过以上命令,我们可以一键续期除kubelet外的所有证书,根证书不会续期。我们也可以手工续期某一个组件,只需要把最后的证书更换成为对应的证书名字即可。
kubeadm certs renew scheduler.conf
证书续期以后,当前应用程序还需要重启才会生效,静态pod的重启,参考我们前面讲过的Kubernetes(k8s)-静态pod介绍,通过移除&移入对应的yaml文件。如果是多节点集群,请单个节点操作,确认无问题以后再开始第二个节点。
至于Kubelet证书,通常而言,我们一般不会手工给它续期,因为这个证书文件是具有自动续期能力的,它的续期规则是到期前30-120天会自动触发续期机制,下图是我通过手工修改时间让它触发证书续期的提示。
所以如果我们对集群的证书到期时间进行监控,只要确保Kubelet证书大于30天即可,如果小于30天,说明我们的自动续期机制出现问题,需要检查为什么自动续期失败,再手工续期。
如果Kubelet证书自动续期失败,可参考下面的步骤手工续期,这个方法在我历史维护的环境经常使用,但是在写这篇文章的时候发现创建证书的步骤是无法通过的,所以仅作参考。当然其实还有更简单方法,就是把这个节点删除,然后重新添加到集群。
3.删除节点
[root@master01 rbac]# kubectl get node
NAME STATUS ROLES AGE VERSION
master01 Ready control-plane,master 21d v1.23.12
node01 Ready <none> 21d v1.23.12
node02 Ready <none> 5d19h v1.23.12
[root@master01 rbac]# kubectl delete node node02
node "node02" deleted
[root@master01 rbac]# kubectl get node
NAME STATUS ROLES AGE VERSION
master01 Ready control-plane,master 21d v1.23.12
node01 Ready <none> 21d v1.23.12
下面操作在删除节点执行
kubeadm reset
#在提示里面输入 "y"
删除完成以后在参考集群安装里面的步骤重新添加节点即可。
直接续期证书(当前版本不可用v.1.23.12,仅供参考)。
1.备份历史证书
cd /etc/kubernetes/
cp kubelet.conf kubelet.conf.bak
cp -r /var/lib/kubelet/pki/ /var/lib/kubelet/pki_bak/
2.删除历史证书
cd /var/lib/kubelet/pki/
unlink kubelet-client-current.pem
rm -f kubelet-client-*.pem
3.创建新证书
#其他正常节点执行
kubeadm alpha kubeconfig user --org system:nodes --client-name system:node:xxxx >/tmp/k
ubelet.conf
#xxxx为异常节点的ip地址
4.复制文件到续期失败节点
scp /tmp/kubelet.conf root@xxx:/etc/kubernetes/
5.重启kubelet检查证书是否自动续期。