我本地环境是三个master的k8s集群
192.168.1.72 master1 192.168.1.73 master2 192.168.1.74 master3
首先第一个master节点更新证书,我们首先需要导出资源清单
kubectl get cm kubeadm-config -n kube-system -o yaml >/etc/kubernetes/kubeadm-cluster.yaml # # 实际上导出的资源清单还需要进行修改,最好直接使用之前kubeadm config print init-defaults >./default.yaml 生成后修改好的文件进行证书的更新,如果找不到了,可以直接重新生一个根据上面的kubeadm-cluster.yaml文件进行修改
操作前我们还是先备份
#master1,master2,master3上操作均要进行备份 cp -r /etc/kubernetes /etc/kubernetes_bak cp -r /var/lib/kubelet /var/lib/kubelet_bak cp -r /var/lib/etcd /var/lib/etcd_bak
接着我们需要进行master1进行证书的更新,按照之前的笔记配置go并编译对应k8s源码生成新的kubeadm文件,具体笔记可以查看:https://sulao.cn/post/943.html
mv /usr/bin/kubeadm /usr/bin/kubeadm_bak mv kubernetes-release-1.23/_output/bin/kubeadm /usr/bin/kubeadm chmod +x /usr/bin/kubeadm kubeadm certs renew all --config=/etc/kubernetes/kubeadm-cluster.yaml
然后重启apiserver、controller、scheduler、etcd组件
kubectl get pod -A -o wide | egrep -iE "kube-apiserver|kube-controller-manager|kube-scheduler|etcd-" | grep $(hostname) | awk '{print $2}' | xargs kubectl delete pod -n kube-system
上述更新证书以后我们我们已经能够通过命令验证证书已经更新到10年。
kubeadm certs check-expiration
我们将admin.conf文件文件替换之前/root/.kube/config文件,使用这个新生成的管理配置进行管理。
需要更新kubelet.conf配置文件,更换此文件是为了证书链自动轮换。
kubeadm kubeconfig user --client-name system:node:$(hostname) --org=system:nodes >/etc/kubernetes/kubelet.conf vim /etc/kubernetes/kubelet.conf #将user部分改为链接到client证书链文件 user: client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem client-key: /var/lib/kubelet/pki/kubelet-client-current.pem
改为kubelet.conf配置我们还需要重启下kubelet
systemctl restart kubelet
将kubeadm文件和资源清单文件传到其他两个节点更新证书使用
#master2、master3上操作 mv /usr/bin/kubeadm /usr/bin/kubeadm_bak #master1上操作 scp kubeadm-cluster.yaml root@192.168.1.73:/etc/kubernetes/ scp kubeadm-cluster.yaml root@192.168.1.74:/etc/kubernetes/ scp /usr/bin/kubeadm root@192.168.1.73:/usr/bin/kubeadm scp /usr/bin/kubeadm root@192.168.1.74:/usr/bin/kubeadm #master2、master3上操作 kubeadm certs renew all --config=/etc/kubernetes/kubeadm-cluster.yaml
然后重启master2和master3上的apiserver、controller、scheduler、etcd组件
kubectl get pod -A -o wide | egrep -iE "kube-apiserver|kube-controller-manager|kube-scheduler|etcd-" | grep $(hostname) | awk '{print $2}' | xargs kubectl delete pod -n kube-system
master2和master3也需要需要更新kubelet.conf配置文件,并重启两个节点的kubelet
kubeadm alpha kubeconfig user --client-name=system:node:$(hostname) --org=system:nodes >/etc/kubernetes/kubelet.conf vim /etc/kubernetes/kubelet.conf #将user部分改为链接到client证书链文件 user: client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem client-key: /var/lib/kubelet/pki/kubelet-client-current.pem #改好保存后重启该节点kubelet systemctl restart kubelet
下面是可选操作部分,根据自己需求是否用下面方式
如果不想去修改kubelet.conf配置,可以只用kubeadm init命令重新生成所有配置文件,操作如下
#每个master节点更新完证书以后都这样操作 /etc/kubernetes rm -rf *.conf kubeadm init phase kubeconfig all --config=/etc/kubernetes/kubeadm-cluster.yaml
这样就可以直接生成新的admin.conf、controller-manager.conf、kubelet.conf、scheduler.conf四个配置文件,其中注意kubelet文件链接证书还是base64,如果还是base64需要按上述修改链接到/var/lib/kubelet/pki/目录下的证书链。