点击上方蓝字”运维笔谈”,对话回复 “阿里云k8s” 可以获取《阿里云Kubernetes项目实战手册》PDF。
今天有同事告诉我预发布环境部署k8s出问题了,“Unable to connect to the server: x509: certificate has expired or is not yet valid” 我看了报错是证书过期。我原以为是gitlab runner上的配置未更新,当我替换好新的配置(就是连接k8s的凭证文件),重启runner之后,还是无法部署。
我决定登录到预发布环境服务器上执行下 kubectl get no,也已经无法执行了,的确是提示证书过期了。可是我上周五已经更新好证书了呀
。我顿时一想,怕不是集群坏了吧
,毕竟去年证书过期之后我操作更新的时候我就搞坏过一次集群了,所以这次我提前了两天更新证书。
这个时候千万不能慌,毕竟我当时测试过集群是稳定的。我执行 docker ps 发现pod容器还在正常运行。然后我过滤了下,查看kube-system的容器,发现了kube-apiserver还是运行1年左右,其他组件kube-scheduler,kube-controller-manager,etcd等是运行3天左右。
那么问题可以确认了,是kube-apiserver未重启导致其还是使用老的证书,现在时间过了12月1号了,老的证书过期了。我直接使用docker stop了apiserver的容器和pause容器,apiserver服务重新启动之后,kubectl get no 可以正常执行了,同事那边Gitlab runner也可以正常部署应用了。

我明明记得我执行过apiserver的pod重启操作呀
,我特意翻了下shell命令历史history ,是的,的确是有过delete kube-apiserver pod的操作
。
总结一下:以后执行好了,增加一个确认操作吧,查看是不是真的重启过了。还有我是使用的kubectl delete操作(etcd重启我测试是OK的
),这些系统组件毕竟是静态pod,下回我还是剪切yaml文件其他目录,待pod消失再剪切回去吧。





