Table of Contents
前情提要
在我们的生产环境中,如果某一天 kubectl 命令不能用了
这时候还需要更新程序,会让人变得非常焦急
我有幸遇到过两次。一次测试环境,一次生产环境。
来的让人无所适从。所以今天一步到位,直接从源码上入手,直接把证书续期到 100 年 (源码正常是每次续期 1 年,但是 1 年后到期让人很烦)。
开始安装
克隆代码
首先需要将 kubernetes 的源代码克隆下来,当然如果你知道自己 kubeadm 的版本,可以克隆特定版本的代码,源码文件比较大,可能会耗费五六分钟
git clone https://github.com/kubernetes/kubernetes.git
之后我们需要知道当前 kubeadm 命令的版本
kubeadm version
#这里获取到我们当前的代码是:v1.23.6
#这里是将本地代码分支切换到 v1.23.6 里
cd /kubernetes && git checkout -b remotes/origin v1.23.6
修改代码
vim cmd/kubeadm/app/util/pkiutil/pki_helpers.go
#如下图中,652 行的 kubeadmconstants.CertificateValidity 修改为 time.Hour*24*365*100
编译代码
make WHAT=cmd/kubeadm GOFLAGS=-v
这个时间比较长,大概十几分钟,大家耐心等待即可
替换 kubeadm 命令
重新编译后的 kubeadm 会放在_output/bin/kubeadm
cp _output/bin/kubeadm /usr/bin/
chmod a+x /usr/bin/kubeadm #赋予执行权限
备份证书、生成证树
cp -r /etc/kubernetes/pki /etc/kubernetes/pki.bak
#重新生成证书,这里的 yaml 文件是初始化 k8s 时留存的
kubeadm certs renew all --config /root/init-k8s/kubeadm-config.yaml
查看证书时间
kubeadm certs check-expiration
这里可以看到证书已经 100 年了
重启一下必要的组件
docker ps | grep -E 'k8s_kube-apiserver|k8s_kube-controller-manager|k8s_kube-scheduler|k8s_etcd_etcd' | awk -F '''{print $1}' | xargs docker restart
后记
建议大家在第一次初始化的时候就改一下证书时间,避免证书到期,造成不必要的麻烦
正文完