最近由于本地服务器重启,而 kubelet 服务无法启动,显示如下错误
[root@k8s-m ~]# /bin/systemctl status kubelet.service
● kubelet.service - kubelet: The Kubernetes Node Agent
Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
Drop-In: /usr/lib/systemd/system/kubelet.service.d
└─10-kubeadm.conf
Active: activating (auto-restart) (Result: exit-code) since Tue 2022-02-22 10:35:30 CST; 4s ago
Docs: https://kubernetes.io/docs/
Process: 10001 ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (code=exited, status=1/FAILURE)
Main PID: 10001 (code=exited, status=1/FAILURE)
通过 journalctl -f -u kubelet 查看日志无任务显示,通过多方面查找,最终原因是证书问题导致的(前面文章写过node节点证书问题,这次是master节点证书问题)。
kubelet 服务启动配置文件使用 /etc/kubernetes/kubelet.conf,其中有一段关于 client 的证书配置,通过下面步骤可以显示证书的可用日期
1、复制 client-certificate-data 段的内容
2、使用 echo -n "copied_certificate_value" | base64 --decode > kubelet.crt 解码base64
3、使用 openssl x509 -in kubelet.crt -text -noout -text 显示证书日期
如果上面的结果显示证书已经过期,则通过下面步骤重新生成证书。
openssl genrsa -out kubelet.key 2048
openssl req -new -key kubelet.key -subj "/CN=kubelet" -out kubelet.csr
openssl x509 -req -in kubelet.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -out kubelet.crt -days 300 -CAcreateserial
cat kubelet.crt | base64
cat kubelet.key | base64
最后将 crt 和 key 写回到 /etc/kubernetes/kubelet.conf 文件相应的 client-certificate-data 和 client-key-data 段中,再使用以下命令可以查看到服务已经正常。
[root@k8s-m ~]# /bin/systemctl status kubelet.service
以上是Master节点的证书,其它节点可直接删除/etc/kubernetes/kubelet.conf后重启kubelet即可。