更新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
验证结果如下:


浙公网安备 33010602011771号