kubernetes管理節點(Kubernetes節點問題排查)
2023-05-02 11:23:24 1
有段時間沒有鼓搗Kubernetes了,今天重置Kubernetes集群後,slave節點不能加入master節點了,我把問題和解決方案分享給大家。 |
我本地的Kubernetes集群包括一個主節點和一個從節點,如下圖:
問題
主節點啟動後,從節點加入,命令如下:
kubeadm join 192.168.59.149:6443 --token nf2hbm.h1d67djxey0jv90h --discovery-token-ca-cert-hash sha256:12e71102d6f44c85c1717079f26c36a706cb11894c36af6d055fa39036e805ae
等了一段時間後,報了下面的錯誤:
error execution phase preflight: couldn't validate the identity of the API Server: abort connecting to API servers after timeout of 5m0s
日誌不夠完整,在命令後面加 --v=5,重新執行來查看詳細日誌,發現下面這個失敗日誌反覆列印:
Failed to request cluster info: [Get https://192.168.59.149:6443/api/v1/namespaces/kube-public/configmaps/cluster-info?timeout=10s: x509: certificate has expired or is not yet valid。
問題排查
token過期
首先想到的是token過期,查看token,命令和輸出如下:
[root@master ~]# kubeadm token listfailed to list bootstrap tokens: Get https://192.168.59.149:6443/api/v1/namespaces/kube-system/secrets?fieldSelector=type=bootstrap.kubernetes.io/token: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
這個輸出有點詭異,網上說是內存不夠了,我查看了內存,並不緊張:
[root@master ~]# free -htotal used free shared buff/cache availableMem: 3.7G 1.1G 132M 30M 2.4G 2.1GSwap: 0B 0B 0B
仔細查看了輸出,有個x509,想起了以前的解決方法,執行下面三個命令:
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
再次查看token,可以了,輸出如下:
kubeadm token listTOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPSo898hy.0y2s6cqsidpwmbkh 23h 2021-05-10T23:26:55 08:00 authentication,signing The default bootstrap token generated by 'kubeadm init'. system:bootstrappers:kubeadm:default-node-token
重新生成token和秘鑰,命令和輸出如下:
[root@master ~]# kubeadm token createnf2hbm.h1d67djxey0jv90h[root@master ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'12e71102d6f44c85c1717079f26c36a706cb11894c36af6d055fa39036e805ae
生成後,再從節點上用新的token和秘鑰繼續執行加入命令,問題依舊。
時間問題
Kubernetes的token有效期是24小時,但是秘鑰是新生成的,不可能過期。
那是不是系統時間有問題?查看了一下系統時間,果然找到了貓膩。系統時間如下:
主節點系統時間:
[root@master ~]# date2021年 05月 10日 星期一 07:22:42 CST2021年 05月 10日 星期一 07:22:42 CST
從節點系統時間:
[root@worker1 ~]# dateSun May 9 11:22:28 EDT 2021
主節點的時間晚於從節點,這就是問題所在。
解決問題
在主節點和從節點執行如下命令:
[root@master ~]# ntpdate ntp1.aliyun.com9 May 23:23:00 ntpdate[39100]: step time server 120.25.115.20 offset -28801.403856 sec[root@worker1 ~]# ntpdate ntp1.aliyun.com9 May 11:23:18 ntpdate[22420]: adjust time server 120.25.115.20 offset -0.001241 sec
這下時間一致了。
重新生成token和秘鑰,問題解決。
Kubernetes節點問題排查 | 《Linux就該這麼學》 (linuxprobe.com)
,