AnyBackup
性能爆表
AnyShare
如何购买
我已是Anyshare 客户
AnyRobot
如何购买
购买 AnyRobot 订阅服务
我已是 AnyRobot 客户
一对一在线咨询
我是 AnyRobot 新客户
一对一在线咨询

技术知识库

筛选(条结果) 按时间 按热度

由于证书过期时间过久,导致kubelet更新证书后依然无法启动

2023-03-22 19 0

关键字

k8s、kubelet

适用产品

  • AnyShare 7.0.3.9及之前的版本,k8s 版本为1.18.5

问题描述

k8s 证书到期后长时间没有续约,在之后使用 kubeadm 进行证书续约后;或者机器长时间未启动后,kubelet 无法正常启动,此时需要对相关配置进行备份,并重新配置kubelet的证书

适用于 Master、Worker 节点kubelet证书过期,Master节点apiserver、controller-manager、scheduler证书到期需要先参照KB-2809进行处理

kubelet 在messages日志中信息如下:

part of the existing bootstrap client certificate is expired:

通过命令检查证书过期时间:

openssl x509 -noout -in /var/lib/kubelet/pki/kubelet-client-current.pem -text| grep -i not

查看 Not After 过期时间

问题影响

集群异常,无法启动,业务受到影响

问题原因

证书过期后长时间内未续约,或者长时间关机未启动

解决方案

以下操作之前一定要备份相关配置,操作过程中需要重启服务,会对业务产生影响

1.首先对kubernetes目录进行备份,所有需要恢复的 k8s 节点需要操作;

cp -a /etc/kubernetes /etc/kubernetes.bak_$(date +"%Y-%m-%d_%H%M%S")

2.进入其中一个k8s master节点,根据需要处理的节点名称执行以下命令,生成新的 kubelet 配置文件,红色部分根据环境修改:

kubeadm alpha kubeconfig user --org system:nodes --client-name system:node:node-237-173 > kubelet.conf-node-237-173

配置中 server 改成:https://proton-cs.lb.aishu.cn:xxxxx,端口参考备份的原始配置,也可以从备份文件中复制这行配置进行粘贴

将修改后的配置scp复制到需要恢复的节点,然后用此文件替换该节点下 /etc/kubernetes/kubelet.conf

重启问题节点的 kubelet,试其使用新配置进行连接,获取相关的轮换证书文件

systemctl restart kubelet

3.命令生成的配置文件里面是包含的固定证书,因为证书是自动轮换的,需要进行调整,连接的 apiserver 地址也需要修改

将证书部分的配置由固定的证书字符串改成指向对应的文件

生成的配置是用的证书公钥、密钥字符串:

改为以下配置,注意用空格对齐缩进,也可以从备份文件中复制这部分配置进行粘贴

user:

client-certificate: /var/lib/kubelet/pki/kubelet-client-current.pem

client-key: /var/lib/kubelet/pki/kubelet-client-current.pem

4.需要恢复节点上重启 kubelet 服务,检查容器是否正常启动

systemctl restart kubelet

docker ps

master 节点执行命令,查看节点是否在线

kubectl get nodes

5.检查 calico Pod是否正常,如果长期处于未就绪状态,需要到相关节点手动重启 calico 容器:

docker restart `docker ps | grep 'calico-node' | grep kube-system | grep -v 'anyrobot' | awk '{print $1}' | xargs` &>/dev/null

systemctl restart kubelet

更多信息

(描述更多信息)

联系我们
销售咨询
免费销售咨询热线 400 8216055
售后咨询
7*24 小时免费售后服务热线 400 8801569
为了给您提供更优质的服务,请您先完善以下信息:
确认提交

扫码关注

爱数技术支持中心公众号