目录
1 证书过期的情况
2 Kubernetes环境介绍
3 替换证书步骤
3.1 在master上查看各证书的过期时间
3.2 查看master(192.168.0.190)上kubelet证书列表
3.3 查看master(192.168.0.190)上kubelet证书的过期时间
3.4 查看node1和node2上kubelet证书的过期时间(同(2))
3.5 备份相关证书文件的目录
3.6 轮换master上证书
3.7 再次查看证书过期日期
3.8 查看/etc/kubernetes/pki/证书是否更新了
3.9 移除conf文件
3.10 重新生成kubeconfig文件
3.11 查看是否生成出来了新的配置文件
3.12 重新拷贝管理员所用的新的kubeconfig文件
3.13 重启kube-scheduler
4 轮换kubelet证书
4.1 轮换master上的kubelet证书
4.1.1 在master上查看证书签名请求(简称为CSR)
4.1.2 查看当前kubelet证书的过期时间
4.2 轮换node上的kubelet证书
4.2.1 生成node1所需要的kubelet.conf文件
4.2.2 切换到node1,重启kubelet
5 重启集群
6 后遗症
本博客参考
https://blog.csdn.net/Harry_z666/article/details/128015175
已进行了验证,非常感谢原文博主的记录~
另外,我的kubernetes版本为V1.23.4。
请在更新证书前使用命令行删除之前的工作部署容器,以免产生垃圾数据,对测试产生不必要的麻烦。截图上的时间请忽略,注意内容就好,毕竟记录本篇博客的时候我已经按着教程更新完了证书,都是补图或搜索到的状态类似的图。
1 证书过期的情况
使用kubeadm方式安装的kubernetes集群各个组件所使用的证书期限为1年,到期后,证书失效,kubectl命令无法使用,在使用kubectl命令时,报错无法连接到localhost:8080。
2 Kubernetes环境介绍
192.168.0.190为master节点,192.168.0.191、192.168.0.192分别为node1和node2节点。操作系统为linux 4.19.90-25.2.v2101.gfb01.ky10.aarch64
3 替换证书步骤
3.1 在master上查看各证书的过期时间
kubeadm certs check-expiration
3.2 查看master(192.168.0.190)上kubelet证书列表
ls /var/lib/kubelet/pki/
3.3 查看master(192.168.0.190)上kubelet证书的过期时间
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text | grep Not
3.4 查看node1和node2上kubelet证书的过期时间(同(2))
3.5 备份相关证书文件的目录
(很重要,养成备份好习惯,证书废掉集群就要重新安装了)
cp -r /etc/kubernetes/ /tmp/backup/ # 静态pods配置以及证书
cp -r /var/lib/kubelet/pki/ /tmp/backup.crr #证书pem存放目录
3.6 轮换master上证书
[root@master kubernetes]#kubeadm certs renew all
(借的图,因为我的证书已经更新完了,更新结束才进行的记录)
3.7 再次查看证书过期日期
[root@master kubernetes]#kubeadm certs check-expiration
3.8 查看/etc/kubernetes/pki/证书是否更新了
[root@master kubernetes]#ll -a /etc/kubernetes/pki/
当前kubernetes各组件所使用的kubeconfig在/etc/kubernetes/里:
[root@master kubernetes]#ll -a /etc/kubernetes/
3.9 移除conf文件
[root@master kubernetes]#rm -rf /etc/kubernetes/*.conf
[root@master kubernetes]#ls
3.10 重新生成kubeconfig文件
#注意版本号
[root@master kubernetes]#kubeadm init --kubernetes-version=v1.23.4 phase kubeconfig all
3.11 查看是否生成出来了新的配置文件
[root@master kubernetes]# ll -a /etc/kubernetes/
所需要的kubeconfig文件,就是上面的kubelet.conf。
3.12 重新拷贝管理员所用的新的kubeconfig文件
#备份下/root/.kube/config 文件:
cp /root/.kube/config /tmp/kube.old/config
#替换:
[root@master kubernetes]# cp /etc/kubernetes/admin.conf ~/.kube/config
3.13 重启kube-scheduler
[root@master kubernetes]# docker ps -a | grep kube-scheduler | awk ‘{print $1}’
[root@master kubernetes]# docker rm -f 上述容器
#等待kube-scheduler彻底启动起来,即状态为1/1。
[root@master kubernetes]# kubectl get pods -n kube-system | grep scheduler
4 轮换kubelet证书
4.1 轮换master上的kubelet证书
#查看kubelet当前所使用的证书
[root@master kubernetes]# ll -a /var/lib/kubelet/pki/
#通过kubeadm certs renew all更新的 k8s 证数,是不会更新 kubelet.conf 的证书的。
#所以此处的证书重启kubelet cho重新生成。
#因为前面已经重新生成了kubelet.conf,现在重启kubelet。
[root@master kubernetes]# systemctl restart kubelet
[root@master kubernetes]# ll -a /var/lib/kubelet/pki/
4.1.1 在master上查看证书签名请求(简称为CSR)
[root@master kubernetes]# kubectl get csr
#我的报的是“No Resource Found”,目前看来是不影响使用的,看其他人的是有信息的,不清楚具体原因。
[root@master kubernetes]# kubectl certificate approve csr-vg9bd
certificatesigningrequest.certificates.k8s.io/csr-vg9bd approved(未操作该步骤)
4.1.2 查看当前kubelet证书的过期时间
[root@master kubernetes]# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text |grep Not
#PS:未过期的话应该是可以不处理的,我当时查看kubelet的证书时间还没过期,所以没有操作证书替换
4.2 轮换node上的kubelet证书
4.2.1 生成node1所需要的kubelet.conf文件
#在master上生成worker所需要的kubelet.conf临时放在/tmp下
[root@master tmp]# mkdir -p /tmp/worker
#生成node1所需要的kubelet.conf文件。注意更改成自己的信息
[root@master worker]# kubeadm init --kubernetes-version=v1.23.4 phase kubeconfig kubelet --node-name node1 --kubeconfig-dir /tmp/worker/
#[kubeconfig] Writing “kubelet.conf” kubeconfig file
#node1(192.168.0.191)上的/etc/kubernetes/目录里覆盖原来的kubelet.conf。先备份原先node1的kubelet.conf文件:
[root@node1 kubernetes]# mv /etc/kubernetes/kubelet.conf /etc/kubernetes/kubeletconf.bak
[root@master worker]# scp /tmp/worker/kubelet.conf root@192.168.0.191:/etc/kubernetes/
4.2.2 切换到node1,重启kubelet
[root@node1 kubernetes]# systemctl restart kubelet
#再次查看证书
[root@node1 kubernetes]# ll -a /var/lib/kubelet/pki/
#查看kubelet证书的过期时间。
[root@node1 kubernetes]# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text | grep Not
#切换到master(192.168.0.190)上,查看CSR。(未操作)
[root@master worker]# kubectl get csr
其他节点同上操作。
5 重启集群
reboot
修改配置之后记得重启就行,大部分时候重启能解决很多问题~~
6 后遗症
如果容器不能自动调度,在节点少的情况下尝试手动分配各节点,之后就可以进行调度了,具体原因还不太清楚。
如果更新证书后还有之前的任务容器,看着像在运行,实际没有工作,可以用命令行删除该容器,或在k8s里清理掉名称空间,防止垃圾数据造成容器无法重新启动。