查看证书有效期
kubeadm certs check-expiration
或者进入/etc/kubernetes/pki下
用openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text | grep Not 查看
操作前备份
备份下面
/etc/kubernetes/ # 静态pods配置以及证书
/var/lib/kubelet/pki/ #证书pem存放目录
然后执行
kubeadm certs renew all 全更新/etc/kubernetes/pki 下的证书与/etc/kubernetes/ *.conf的配置文件,但是不会更新kubelet.conf 。
证书生成后要重启下面的服务
kubectl -n kube-system delete pod-l'component=kube-apiserver'
kubectl -n kube-system delete pod-l'component=kube-controller-manager'
kubectl -n kube-system delete pod-l'component=kube-scheduler'
kubectl - n kube-system delete pod-l'component=etcd'
之后把/etc/kubernetes/admin.conf 放到~/.kube/config
上面说到kubelet.conf不会更新,kubelet.conf是连接apiserver的。kubelet启动时会加载kubelet.conf这个文件并在/var/lib/kubelet/pki/下生成.pem证书。
查看自己的kubelet 是否过期可以用以下命令查看
openssl x509 -in /var/lib/kubelet/pki/*.pem -noout -text 查看过期时间
如果kubelet 也过期的话
可以单独生成kubelet 的config 文件kubelet.conf,用以下命令
kubeadm init --kubernetes-version=v1.22.5 phase kubeconfig kubelet 会在/etc/kubernetes/下生成kubelet.conf。然后重启kubelet就可以,重启后就会跟据kubelet.conf生成/var/lib/kubelet/pki/下生成.pem证书
systemctl restart kubelet
最后用下面命令验证kubelet证书时间
用openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text | grep Not 查看
----------------------------------------------------------------------------------------------------------------
下面是kubelet.conf在老版的k8s 中是没有 --kubernetes-version=v1.22.5参数进行指定版本的。但是可以用之前备份的老版本的kubelet.conf 把里面的client-certificate-date与client-key-data 换成新的,新的可以从刚生成的admin.conf 中取如下图,把kubelet.conf中的替换
然后重启kubelet ,systemctl restart kubelet。此时会生成新的证书在/var/lib/kubelet/pki/kubelet-client-current.pem ,这时可以用openssl x509就是上面的命令查看过期时间有没有更新。或者看此文件的创建时候也可以。如果还是没有更新。那么可以把这个kubelet-client-current.pem 文件删除,他只是一个软链接。删除后。再次重启kubelet。此时他会生成新的kubelet-client-current.pem软链接。
其它node节点可以把任何一台主机延长后的的有效的client-certificate-date与client-key-data替换kubelet.conf中的即可,操作与上面一致
-------------------------------------------------------------------------------------------------------------------------如以上操作完成后,kubectl 命令还是说证书过期,可以用
docker ps |grep 'kube-apiserver'| awk '{print $1}'
docker ps |grep 'controller-manager'| awk '{print $1}'
docker ps |grep 'scheduler'| awk '{print $1}'
docker ps |grep 'etcd' | awk '{print $1}'
把上面找到的id 都docker restart 一下。第个组件应该是2个。
然后如果还有问题可以重启node节点。