k8s二進制部署環境出現kubelet認證不了節點
出現這個情況的時候,第一個反應是先看apiserver證書是不是過期了
# 查看apiserver的service文件存儲路徑
systemctl status kube-apiserver | grep load
# 查找apiserver的啟動參數,查看ca證書的存儲路徑
cat /usr/lib/systemd/system/kube-apiserver.service
# 查看EnviromentFile,或者直接可以看到啟動參數,以實際的為准
grep 'ca.pem' /opt/k8s/etc/kubernetes/apiserver
# 使用openssl命令查看證書過期時間
openssl x509 -noout -text -in /opt/k8s/etc/kubernetes/ssl/ca.pem | grep Not
Not Before: Dec 21 09:39:00 2019 GMT
Not After : Dec 20 09:39:00 2023 GMT
可以看到,根證書並沒有過期,此時就要去刪除kubelet的證書,重啟kubelet后重新生成證書,一般這樣操作完,節點就正常Ready了
# 查看kubelet的service文件存儲路徑
systemctl status kubelet | grep load
# 查找kubelet的啟動參數,查看kubelet.kubeconfig證書的存儲路徑
cat /usr/lib/systemd/system/kubelet.service
# 查看EnviromentFile,或者直接可以看到啟動參數,以實際的為准
grep 'kubelet.kubeconfig' /opt/k8s/etc/kubernetes/kubelet
# 停止kubelet服務
systemctl stop kubelet
# 刪除kubelet.kubeconfig文件,以自己的實際路徑為准
rm -f /opt/etc/kubernetes/kubelet.kubeconfig
# 重新啟動kubelet
systemctl start kubelet
但是這一頓操作完,節點依然是NotReady,kubelet的日志也依然是認證不了節點,於是我生氣了
kubectl get csr --no-headers=true | awk '{print $1}' | xargs kubectl delete csr
刪掉集群的csr證書后,再次重復上面的擦作,此時在去看csr,會出現和節點數量相同的證書,並且狀態是Pending的,只需要重新approve一下,節點就都恢復到Ready的狀態了
kubectl get csr | awk '/Pending/ {print $1}' | xargs kubectl certificate approve
