为什么Kubernetes从节点会join失败
生活随笔
收集整理的這篇文章主要介紹了
为什么Kubernetes从节点会join失败
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有段時間沒有鼓搗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?list failed?to?list?bootstrap?tokens:?Get?https://192.168.59.149:6443/api/v1/namespaces/kube-system/secrets?fieldSelector=type%3Dbootstrap.kubernetes.io%2Ftoken:?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???available Mem:???????????3.7G????????1.1G????????132M?????????30M????????2.4G????????2.1G Swap:????????????0B??????????0B??????????0B仔細查看了輸出,有個x509,想起了以前的解決方法,執行下面三個命令:
mkdir?-p?$HOME/.kube sudo?cp?-i?/etc/kubernetes/admin.conf?$HOME/.kube/config sudo?chown?$(id?-u):$(id?-g)?$HOME/.kube/config再次查看token,可以了,輸出如下:
kubeadm?token?list TOKEN?????????????????????TTL???????EXPIRES?????????????????????USAGES???????????????????DESCRIPTION????????????????????????????????????????????????EXTRA?GROUPS o898hy.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?create nf2hbm.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?~]#?date 2021年?05月?10日?星期一?07:22:42?CST從節點系統時間:
[root@worker1?~]#?date Sun?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从节点会join失败的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 强大的新特性 Source Gen
- 下一篇: WPF 用装饰器制作抽屉效果