1:检查证书过期时间
kubeadm certs check-expiration
这有效期一年,太憋屈了。
2、获取大神脚本
git clone https://github.com/yuyicai/update-kube-cert.git
cd update-kube-cert
chmod 755 update-kubeadm-cert.sh
3,执行大神脚本
注意、注意,注意,
该脚本只处理 master 节点上的证书,worker node 节点的 kubelet 证书默认自动轮换更新,无需关心过期问题
如果使用 containerd 作为 CRI 运行时: 执行脚本时增加--cri containerd参数,默认为docker运行时
cri-docker 作为CRI 执行方式如下(默认)
./update-kubeadm-cert.sh all
or
./update-kubeadm-cert.sh all --cri docker
containerd 作为 CRI 运行时 执行方式如下
./update-kubeadm-cert.sh all --cri containerd
我们看下作了那些操作。
大神脚本牛🐮
执行时请使用 ./update-kubeadm-cert.sh all 或者 bash update-kubeadm-cert.sh all ,不要使用 sh update-kubeadm-cert.sh all,因为某些 Linux 发行版 sh 并不是链接到 bash,可能会不兼容
如果有多个 master 节点,在每个 master 节点都执行一次(注意cri)
./update-kubeadm-cert.sh all
4、再次检查证书是否已更新
kubeadm certs check-expiration
核查node、pod是否正常运行
kubectl get node -o wide
kubectl get pod -o wide
5、手动重启控制平面 Pods(必须)
执行完此命令之后你需要重启控制面 Pods。因为动态证书重载目前还不被所有组件和证书支持,所有这项操作是必须的。 静态 Pods 是被本地 kubelet 而不是 API Server 管理, 所以 kubectl 不能用来删除或重启他们。 要重启静态 Pod 你可以临时将清单文件从 /etc/kubernetes/manifests/ 移除并等待 20 秒 (参考 KubeletConfiguration 结构 中的 fileCheckFrequency 值)。 如果 Pod 不在清单目录里,kubelet 将会终止它。 在另一个 fileCheckFrequency 周期之后你可以将文件移回去,为了组件可以完成 kubelet 将重新创建 Pod 和证书更新。 https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#manual-certificate-renewal
6、证书回滚
证书更新失败回滚 脚本会自动备份 /etc/kubernetes 目录到 /etc/kubernetes.old-$(date +%Y%m%d) 目录(备份目录命名示例:kubernetes.old-20240924) 若更新证书失败需要回滚,手动将备份 /etc/kubernetes.old-$(date +%Y%m%d)目录覆盖 /etc/kubernetes 目录
7、证书有效期设置为100年
将脚本那种的CERT_DAYS=3650 改为 36500,重新运行一次脚本
为了安全,不建议这样做。
为了安全,不建议这样做。
为了安全,不建议这样做。
我只是测试下😄
参考:update-kube-cert/README-zh_CN.md at master · yuyicai/update-kube-cert · GitHub