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