kubernetes版本1.13.1

8WaLy8.jpg

故障现象

上班时日常查看k8s集群信息, 发现kubectl连接不到集群了。均报以下错误

1
Unable to connect to the server: x509: certificate has expired or is not yet valid

故障原因

经过查看相关的证书,发现相关证书过期了。kubeadm安装的集群证书默认一年的有效期。

1
[docker@k8s-77-53 kubernetes]$ openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not ' #查看过期时间命令

更新证书

发现问题,解决问题。开始更新相关证书 操作之前记得将原来的备份一下

重新生成证书

1
2
[docker@k8s-77-53 kubernetes]$ kubeadm config view > kubeadm.yaml #将kubeadm配置写入 kubeadm.yaml文件
[docker@k8s-77-53 kubernetes]$ kubeadm alpha certs renew all --config kubeadm.yaml #重新生成证书
  • 注意:如果机器不能科学上网 可以将kubadm.yaml文件的imageRepository: k8s.gcr.io改为:imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers

重新生成配置文件

1
2
3
4
5
6
7
8
[docker@k8s-77-53 kubernetes]$ mkdir conf_bak
[docker@k8s-77-53 kubernetes]$ mv *.conf conf_bak #要将配置移走  要不然不会生成新的
[docker@k8s-77-53 kubernetes]$ kubeadm init phase kubeconfig all --config kubeadm.yaml
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file

拷贝kubectl客户端文件

1
2
[docker@k8s-77-53 kubernetes]$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[docker@k8s-77-53 kubernetes]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

重启kubelet

1
[docker@k8s-77-53 kubernetes]$ sudo systemctl restart kubelet

如果apiserver的日志中还一直报证书过期错误的话,docker restart重启kube-apiserver,kube-controller,kube-scheduler这3个容器。

kubelet证书过期

kubelet的证书过期的话 进入对应的kubelet的目录下将pki目录下的数据都删除。然后重启kubelet就会生成新的证书了

1
2
3
[root@k8s-77-53 ~]# cd /var/lib/kubelet/pki
[root@k8s-77-53 pki]# rm -rf *
[root@k8s-77-53 pki]# systemctl restart kubelet