突然,整个集群的都失联了,api-server
无法访问,发现api-server
的容器异常退出了。
systemctl restart kubelet
执行上述命令,发现查看api-server
容器的日志,发现不能访问etcd
,再查看etcd
容器的日志,发现是证书的问题。
kubeadm alpha certs check-expiration
CERTIFICATE EXPIRES RESIDUAL TIME EXTERNALLY MANAGED
admin.conf May 15, 2020 13:03 UTC 364d false
apiserver May 15, 2020 13:00 UTC 364d false
apiserver-etcd-client May 15, 2020 13:00 UTC 364d false
apiserver-kubelet-client May 15, 2020 13:00 UTC 364d false
controller-manager.conf May 15, 2020 13:03 UTC 364d false
etcd-healthcheck-client May 15, 2020 13:00 UTC 364d false
etcd-peer May 15, 2020 13:00 UTC 364d false
etcd-server May 15, 2020 13:00 UTC 364d false
front-proxy-client May 15, 2020 13:00 UTC 364d false
scheduler.conf May 15, 2020 13:03 UTC 364d false
执行上述命令,查看集群的证书是否过期。
这些指令根据
kubectl
版本的不同,而不同的,根据具体的cli
提示进行操作。
可能会遇到kubeadm
没有上述指令的情况,执行下面这个指令来查看但个证书文件是否过期。
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '
kubeadm alpha certs renew all --config kubeadm.yaml
# kubeadm.yaml是使用kubeadm安装时候的配置文件
执行上面的指令更新全部的证书,然后在重启kubelet
,这样会触发static pod
的重启。
或者执行mv /etc/kubernetes/manifests/ /etc/kubernetes/manifests.bak/
然后再修改回来,也可以触发static pod
的重启。
更多关于
kubeadm
更新证书的操作,查看官网的介绍。
然后更新kubeconfig
,因为kubectl
是通过这个文件和api-server
通信的,具体有两种方式。
kubectl config set-credentials admin \
--certificate-authority=$SSL_PATH/ca.crt \
--client-certificate=$SSL_PATH/apiserver-kubelet-client.crt \
--client-key=$SSL_PATH/apiserver-kubelet-client.key
执行只更新通信过程中认证证书相关的部分。
将kubernetes平台相关组件的配置文件根据新的证书全部重新生成。
# 一个个重新生成
kubeadm alpha kubeconfig user --client-name=admin
kubeadm alpha kubeconfig user --org system:masters --client-name kubernetes-admin > /etc/kubernetes/admin.conf
kubeadm alpha kubeconfig user --client-name system:kube-controller-manager > /etc/kubernetes/controller-manager.conf
kubeadm alpha kubeconfig user --org system:nodes --client-name system:node:$(hostname) > /etc/kubernetes/kubelet.conf
kubeadm alpha kubeconfig user --client-name system:kube-scheduler > /etc/kubernetes/scheduler.conf
# 或者执行这个命令,需要先把/etc/kubernetes/*.conf文件备份起来,否则会直接读取原文件而不生成新的
kubeadm init phase kubeconfig all --config kubeadm.yaml
重新生产的admin.conf
就是kubectl
与api-server
通信用的配置文件,然后把这个文件复制到~/.kube
并且重命名为config
。
关于
kubeadm alpha
指令更多的介绍,查看官网。
kubeadm upgrade apply --certificate-renewal v1.15.0
更多内容查看这里。