#作者:任少近
文章目錄
- 查看kubelet證書
- 查看kubelet當前所使用的證書
- 更換 node上的kubelet證書
- 生成node1所需要的kubelet.conf文件
- 生成node2所需要的kubelet.conf文件
- 查看csr
- 更新 ~/.kube/config 文件
- 重啟相關組件
查看kubelet證書
以上少了kubelet的證書,kubelet證書該如何查看?通過openssl x509查看證書日期?
[root@k8s-master pki]#openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text |grep NotValidityNot Before: May 1 07:59:28 2024 GMTNot After : May 1 07:59:28 2025 GMT
以上表示過期
查看kubelet當前所使用的證書
[root@master kubernetes]# ll -a /var/lib/kubelet/pki/
-rw-------. 1 root root 1114 Jun 24 15:34 kubelet-client-2025-06-24-15-34-28.pem
lrwxrwxrwx. 1 root root 59 Jun 24 15:34 kubelet-client-current.pem -> /var/lib/kubelet/pki/kubelet-client-2025-06-24-15-34-28.pem
-rw-r--r--. 1 root root 2266 Jun 19 2024 kubelet.crt
-rw-------. 1 root root 1679 Jun 19 2024 kubelet.key
這里kubelet-client-2025-06-24-15-34-28.pem是新頒發的證書。
此時kubelet-client-current.pem是軟連接到kubelet-client-2025-06-24-15-34-28.pem的。#通過kubeadm certs renew all更新的k8s 證數,是不會更新kubelet.conf的證書的。
#因為前面已經重新生成了kubelet.conf,現在重啟kubelet。
[root@master kubernetes]# systemctl restart kubelet[root@master kubernetes]# ll -a /var/lib/kubelet/pki/
在master上查看證書簽名請求(簡稱為CSR),并批準此CSR
[root@k8s-master kubernetes]# kubectl get csr
NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
csr-rv2vx 23m kubernetes.io/kube-apiserver-client-kubelet system:node:k8s-master <none> Approved,Issued#批準次CSR
[root@k8s-master kubernetes]# kubectl certificate approve csr-rv2vx (也可不需要執行此步驟)
certificatesigningrequest.certificates.k8s.io/csr-rv2vx approved
查看當前kubelet證書的過期時間,這里顯示過期時間到明年的2026年6月24日,已經是一年期間了,表示已成功更新證書
[root@k8s-master kubernetes]# openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -text |grep NotNot Before: Jun 24 07:29:28 2025 GMTNot After : Jun 24 07:29:28 2026 GMT
更換 node上的kubelet證書
查看node1、node2上的kubelet證書,為老版的證書,可以看到是去年2024年6月份的證書
[root@k8s-master ansiable-book]# ansible k8s_node -m shell -a "ls -al /var/lib/kubelet/pki" -i host.yaml --limit '11.0.1.111,11.0.1.112'
11.0.1.111 | CHANGED | rc=0 >>
total 12
drwxr-xr-x. 2 root root 124 Jun 19 2024 .
drwx------. 8 root root 208 Jun 19 2024 ..
-rw-------. 1 root root 1114 Jun 19 2024 kubelet-client-2024-06-19-23-26-37.pem
lrwxrwxrwx. 1 root root 59 Jun 19 2024 kubelet-client-current.pem -> /var/lib/kubelet/pki/kubelet-client-2024-06-19-23-26-37.pem
-rw-r--r--. 1 root root 2258 Jun 19 2024 kubelet.crt
-rw-------. 1 root root 1679 Jun 19 2024 kubelet.key
11.0.1.112 | CHANGED | rc=0 >>
total 12
drwxr-xr-x. 2 root root 124 Jun 19 2024 .
drwx------. 8 root root 208 Jun 19 2024 ..
-rw-------. 1 root root 1114 Jun 19 2024 kubelet-client-2024-06-19-23-26-54.pem
lrwxrwxrwx. 1 root root 59 Jun 19 2024 kubelet-client-current.pem -> /var/lib/kubelet/pki/kubelet-client-2024-06-19-23-26-54.pem
-rw-r--r--. 1 root root 2258 Jun 19 2024 kubelet.crt
-rw-------. 1 root root 1679 Jun 19 2024 kubelet.key
生成node1所需要的kubelet.conf文件
#在master創建臨時node1所需要的kubelet.conf到目錄
[root@k8s-master]# mkdir -p /node1
#生成k8s-node1所需要的kubelet.conf文件。注意更改成自己的信息
[root@k8s-master ~]# kubeadm init --kubernetes-version=v1.23.17 phase kubeconfig kubelet --node-name k8s-node1 --kubeconfig-dir node1/
[kubeconfig] Writing "kubelet.conf" kubeconfig file#到node1,對/etc/kubernetes/目錄里覆蓋原來的kubelet.conf。先備份原先node1的kubelet.conf文件:
[root@k8s-node1 ~]# cp -a /etc/kubernetes/ /etc/kubernetes.bak20250623到master上執行
[root@k8s-master node1]# scp kubelet.conf root@k8s-node1:/etc/kubernetes到node1上,重啟kubelet
[root@k8s-node1 kubernetes]# systemctl restart kubelet
[root@k8s-node1 kubernetes]# systemctl status kubelet
如下圖,node1上的kubelet正常運行,且無任何異常信息
查看csr
[root@k8s-master ~]# kubectl get csr
NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
csr-8d7fh 11m kubernetes.io/kube-apiserver-client-kubelet system:node:k8s-node1 <none> Approved,Issued
csr-rv2vx 76m kubernetes.io/kube-apiserver-client-kubelet system:node:k8s-master <none> Approved,Issued
生成node2所需要的kubelet.conf文件
#在master創建臨時node2所需要的kubelet.conf到目錄
[root@k8s-master]# mkdir -p /node2
#生成k8s-node2所需要的kubelet.conf文件。注意更改成自己的信息
[root@k8s-master ~]# kubeadm init --kubernetes-version=v1.23.17 phase kubeconfig kubelet --node-name k8s-node2 --kubeconfig-dir node2/
[kubeconfig] Writing "kubelet.conf" kubeconfig file#到node2,對/etc/kubernetes/目錄里覆蓋原來的kubelet.conf。先備份原先node1的kubelet.conf文件:
[root@k8s-node2 ~]# cp -a /etc/kubernetes/ /etc/kubernetes.bak20250623到master上執行
[root@k8s-master node2]# scp kubelet.conf root@k8s-node2:/etc/kubernetes到node2上,重啟kubelet
[root@k8s-node2 kubernetes]# systemctl restart kubelet
[root@k8s-node2 kubernetes]# systemctl status kubelet
如下圖,node2上的kubelet正常運行,且無任何異常信息
查看csr
看到集群:
更新 ~/.kube/config 文件
~/.kube/config 文件充當 Kubernetes 集群的配置文件,主要用于保存集群訪問的相關信息。它包含了與 Kubernetes API 服務器通信所需的各種細節,例如服務器地址、所使用的上下文(context)、認證信息(比如證書)等。通過維護這個文件,用戶能夠利用 kubectl 命令行工具來與 Kubernetes 集群進行有效的互動和管理。簡而言之,該文件是連接和操作 Kubernetes 集群的關鍵憑證,確保了用戶可以順利執行各種集群管理和應用部署任務。
mv /root/.kube/config /root/.kube/config.old
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
hown ( i d ? u ) : (id -u): (id?u):(id -g) $HOME/.kube/config
chmod 644 $HOME/.kube/config
重啟相關組件
這一步我們查看etcd已經起來了,
[root@k8s-master ~]# kubectl get pod -A |grep etcd kube-system etcd-k8s-master 1/1 Running 19 (22d ago) 2y11d [root@k8s-master ~]# kubectl -n kube-system delete pod etcd-k8s-master
[root@k8s-master ~]# kubectl get pod -A -w |grep etcd kube-system etcd-k8s-master 1/1 Running 19 (22d ago) 14s