现象
我用rancher 部署k8s集群的时候出现Failed to get /health for host [10.154.12.79]: Get https://xxx:2379/health: net/http: TLS handshake timeout
这一错误.
执行./rke_linux-amd64 -d up --config=cluster.yml
命令打开debug模式发现更多报错信息
WARN[0134] [etcd] host [xxx] failed to check etcd health: failed to get /health for host [10.2.6.76]: Get https://xxx:2379/health: remote error: tls: bad certificate
解决方案
报错信息提示是证书不对,由于我的集群环境有过变更所有证书很可能也变掉了. 在GitHub找到类似的问题 RKE Installation error ETCD Health Check Problem
在主节点上执行sudo rm -rf /etc/kubernetes/ /var/lib/kubelet/ /var/lib/etcd/
需要注意的是删除这些文件之后新生成的集群里面原来的容器信息就没有了,你可以先把这些文件备份,另外etcd数据库还可以通过导入db文件的方式恢复数据,需谨慎操作
其他问题
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of “crypto/rsa: verification error” while trying to verify candidate authority certificate “kube-ca”)
在执行kubectl
命令获取节点信息的时候出现了这个错误,如下
[deploy@host~]$ kubectl get nodes
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kube-ca")
这个问题出现是因为没有删除之前创建的$HOME/.kube
目录 删除$HOME/.kube
目录之后重新生成就能执行kubectl命令了. 可以参考 https://blog.csdn.net/woay2008/article/details/93250137
部署的pod一直在pending状态
执行kubectl describe <pod名> -n <命名空间>
命令发现pod没有被分配节点,初步怀疑是网络或者 kube-scheduler
的问题然后我执行了docker ps -a |grep rancher
查看rke启动的所有容器发现kube-scheduler
容器没有被更新掉 执行 docker logs -f <容器名>
发现一直在报证书错误的问题,解决办法就是删掉kube-scheduler
然后再重新部署一遍所有pod就正常了
删除docker容器时报错某个overlay目录被占用
执行下面的命令查找占用overlay目录的进程pid ,例如overlay 哈希值是eb865bc492e51b1458bf5f10dd37104274b8b321c237270e3350c2fac7c77a37
grep docker /proc/*/mountinfo | grep eb865bc492e51b1458bf5f10dd37104274b8b321c237270e3350c2fac7c77a37 | awk -F':' '{print $1}' | awk -F'/' '{print $3}'
参考
1. RKE Installation error ETCD Health Check Problem
2. kubernetes 坑人的错误!!!Unable to connect to the server: x509: certificate signed by unknown authority