更新k8s集群的etcd证书

在jenkins发版的时候,发现执行kubectl命令报错如下:

 

排查后发现是etcd证书过期,下面整理更新etcd证书的步骤

1-7的步骤在每个master节点操作,确保每个etcd健康启动之后,再操作第二个master节点

1、检查证书etcd证书是否过期

# 检查所有证书的过期时间
sudo kubeadm certs check-expiration

运行结果如下图:

 

发现etcd证书已过期

 

2、备份关键文件

# 备份证书目录
sudo cp -r /etc/kubernetes/pki /etc/kubernetes/pki-backup-$(date +%Y%m%d)


# 备份 etcd 数据目录
sudo cp -r /var/lib/etcd /var/lib/etcd-backup-$(date +%Y%m%d)

备份结果如下:

 

 

 

3、更新etcd证书

# 更新所有 etcd 相关证书
sudo kubeadm certs renew etcd-server
sudo kubeadm certs renew etcd-peer
sudo kubeadm certs renew etcd-healthcheck-client

# 验证新证书(检查 Not After 日期)
sudo openssl x509 -in /etc/kubernetes/pki/etcd/server.crt -noout -dates

 

更新结果如下图:

 

 

 

 

4、更新apiserver的etcd客户端证书


sudo kubeadm certs renew apiserver-etcd-client


# 验证证书
sudo openssl x509 -in /etc/kubernetes/pki/apiserver-etcd-client.crt -noout -dates

更新结果如下:

 

 

 

5、重启 etcd 和 apiserver

# 临时移除 etcd 和 apiserver 的 manifest 文件触发重启
sudo mv /etc/kubernetes/manifests/etcd.yaml /tmp/
sudo mv /etc/kubernetes/manifests/kube-apiserver.yaml /tmp/


# 等待 30 秒让 kubelet 停止 Pod
sleep 30


# 移回文件触发重启
sudo mv /tmp/etcd.yaml /etc/kubernetes/manifests/
sudo mv /tmp/kube-apiserver.yaml /etc/kubernetes/manifests/

 

6、检查集群etcd集群的健康状态

# 检查集群的健康状态
etcdctl --endpoints=https://10.7.20.221:2379,https://10.7.20.222:2379,https://10.7.20.223:2379   --cacert=/etc/kubernetes/pki/etcd/ca.crt   --cert=/etc/kubernetes/pki/etcd/server.crt   --key=/etc/kubernetes/pki/etcd/server.key   endpoint status --write-out=table


# 检查节点健康状态
etcdctl --endpoints=https://10.7.20.221:2379,https://10.7.20.222:2379,https://10.7.20.223:2379   --cacert=/etc/kubernetes/pki/etcd/ca.crt   --cert=/etc/kubernetes/pki/etcd/server.crt   --key=/etc/kubernetes/pki/etcd/server.key   endpoint health

检查结果如下图:

 

 

 

 

7、拷贝admin.conf供kubectl使用

# 覆盖原有的$HOME/.kube/config(原有的admin.conf已失效)
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

# 验证集群状态
kubectl get node

 

验证结果如下:

 

 
posted @ 2025-06-27 14:42  李成敏  阅读(108)  评论(0)    收藏  举报