前言
目前关于k8s的部署有着各种各样工具,其中不得不提到Kubeadm。虽然其因证书问题一直被人们所诟病,但它也是部署k8s最常用的工具之一。
我们都知道使用kubeadm部署k8s在证书方面存在一个问题。证书有效期为一年,到期前必须续期。因此如果正式使用kubeadm部署的集群,迟早得抽出某一天的晚上去升级证书。当然kubeadm也是有命令可以达到续签证书的目的,但是如果要你某一天抽出时间去升级一个正在运行中的k8s集群的证书,你慌不慌。升级完,还得验证服务有没有受到影响。因此有一种方法可以修改kubeadm,来调整证书签发后的有效时间。
以下方法已在 1.17.2 1.17.3 1.17.4 1.20.4 中验证。
下载源码包
建议在部署k8s的初始阶段,对于kubeadm不要直接用yum,apt-get等方式进行安装,建议下载源码包,而kubelet kubectl无需源码安装。
git下载
git clone https://github.com/kubernetes/kubernetes.git
cd kubernetes
git checkout v1.17.3 (切换你要部署的版本)
or
wget下载
wget https://github.com/kubernetes/kubernetes/archive/v1.17.3.tar.gz
调整配置文件
<1>
cd kubernetes
vim cmd/kubeadm/app/constants/constants.go
可根据需求修改
<2>
vim staging/src/k8s.io/client-go/util/cert/cert.go
可根据需求修改
安装go环境并编译
<1>也可源码安装
yum -y install go
<2>编译kubeadm
make WHAT=cmd/kubeadm GOFLAGS=-v
补充:
编译kubelet
make all WHAT=cmd/kubelet GOFLAGS=-v
编译kubectl
make all WHAT=cmd/kubectl GOFLAGS=-v
<3>替换kubeadm文件
cp /usr/bin/kubeadm /usr/bin/kubeadm.old
cp _output/bin/kubeadm /usr/bin/kubeadm
备注:
如果是多个master,注意把kubeadm同步以下
scp -r /usr/bin/kubeadm master2:/usr/bin/
scp -r /usr/bin/kubeadm master3:/usr/bin/
<4>接着就可以使用kubeadm部署k8s了。
部署完成后,即可使用如下命令查看当前证书过期时间。
kubeadm alpha certs check-expiration
补充
如果在此之前,已经使用其他方式安装的kubeadm,已生成证书并部署了k8s
更新证书过期时间
cp -r /etc/kubernetes/pki /etc/kubernetes/pki.old
kubeadm alpha certs renew all --config=/root/kubeadm.yaml
替换老的config文件
cp -f /etc/kubernetes/admin.conf ~/.kube/config
如果是多个master,注意把证书同步一下
scp -r /kubernetes/pki/* master2:/kubernetes/pki/
scp -r /kubernetes/pki/* master3:/kubernetes/pki/
检查集群
kubeadm alpha certs check-expiration
kubectl get node
kubectl get pod -n kube-system
人工检查各功能