k8s踩坑記 - kubeadm join 之 token 失效


拋磚引玉

環境

  • centos 7 amd64 兩台
  • kubernetes 1.10

伴隨着k8s1.10版本的發布,前天先在一台機器上搭建了k8s單機版集群,即既是master,也是node,按照經驗,將 kubeadm init 提示的 kubeadm join 記錄下來,方便未來新增集群集工作節點(機器)時,可以直接復用,緊接着就部署dashboard、heapster、ElasticSearch、Redis、dotnet 微服務等等,一氣呵成,集群狀態良好,因為之前測試環境搞過k8s,呵呵 ...... 。過了兩天公司購買的第二胎服務器到了,那么就順其自然的在上面執行之前記錄的 kubeadm join 腳本,結果如下:


看到這個提示信息,我完全100%地相信,node 已經加入集群,並且只要等一會兒,通過 kubectl get nodes 就可以看到 node is ready,嘿嘿
過一會兒,又過一會,再過一會兒 ...... ,可是

西天取經,歷經九九八十一難

然后,開啟重試模式,發揚程序員不掘不撓的傳統精神:

  1. kubectl reset
  2. kubectl join ......
  3. kubectl get nodes

進入重試死循環N次,耐性真好,哈哈。明明提示 This node has joined the cluster ,為什么實際情況是這樣呢,難道這就是理想和現實的差距,其實這就是 ,out了吧。我想了又想,看了又看,沒有一點點錯誤、警告之類的信息,無從下手啊,腫么辦呢,最后還是把關注點放在了kubelet(誰叫你是 node agent,肯定拿你開刀啊,呵呵)上,於是開始查看kuberlet的日志:

看到了吧

error: failed to run Kubelet: failed to create kubelet:
misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"
原來這個小問題啊,哎。。。。。。,我又再一次相信了這個k8s的提示信息,然后開始修正bug了

信了你的邪哦,為什么 kubelet cgroup driverdocker cgroup driver 一模一樣,剛剛,kubelet 日志里面不是。。。明明。。。卻。。。,淡定,這可能是幻覺,好吧。到底什么是真的,什么是假的,能不能給一個准確的提示信息,既然也不是kubelet的問題,又是最新的版本,也沒有資料可查,當下實在沒轍了,那就去 kubernets#62776Issues吧,於是乎,就這樣下班了。。。。

第二天,第一件事情就是查看昨天提的問題是否有人回答了,結果看到被一個印度阿三給關閉了

哎,和昨天預料的結果一眼,好像有點諸葛了吧,嘿嘿,那還是靠自己吧,又想了又想,看了又看,真的是沒有一點點防備啊,期間檢查了 kubeadmkubectlkubelet,也查看來了各種配置;也想過是不是master提前安裝的一些東西影響了,因為以前都是 kubeadm init 后,然后就馬上 ·kubeadm join;還想過是不是環境的問題,因為之前的測試環境一直是Ubuntu 16.4,現在的主機環境是 CentOS 7。本想着今天上午,搞不定,就按照測試環境的步驟,重來來過,然后,還是不肯放棄(天生就是當程序員的料子啊,就是頭有點冷,呵呵),於是從另外的角度去思考,懷疑是不是記錄的 'kube join token=.... ',有問題啊(之前為什么沒懷疑,是因為我是直接復制 kubeadm init 打印出來的原生腳本,而且測試環境一點問題都沒有。),於是開始順藤摸瓜,排查第一個參數 token,執行命令 kubeadm token list

修成正果,立地成佛

真是拋開雲霧見天明,不容易啊,眾里尋她千百度,原來她在燈火闌珊處。。。。。哎,不去搞文學,可惜了,呵呵。
於是乎,通過 kubeadm create token 重新創建了一個 token,然后,重新執行 kubeadm join,再次查看 kubectl get nodes

成功了,終於成功了,這是搞 kubernetes 以來,踩的最迷糊的一次坑,最后自己回答了自己的 kubernets#62776 ,順便也給kubernetes 提了一下建議,希望提示信息能夠准確些,他們的一小步,就是我們的一大步啊。。。。。

普惠

默認情況下,通過 kubeadm create token 創建的 token ,過期時間是24小時,這就是為什么過了一天無法再次使用之前記錄的 kube join 原生腳本的原因,也可以運行 kubeadm token create --ttl 0生成一個永不過期的 token,詳情請參考:kubeadm-token,了解了原因才能夠舉一反三,帶着思考學習k8s,才不會覺得乏味,希望把這個分享給大家,更希望把整個思考過程分享給大家,往往結果很簡單,過程確如同西天取經,只要是程序員,都有同感吧。如果有什么疑問,或者想要交流的東西歡迎評論區留言,樓主會一一回復的哦。

如果你覺得本篇文章對您有幫助的話,感謝您的【推薦】,這將成為我繼續寫作的動力

如果你對 kubernets 和 dotnet 感興趣的話可以關注我,我會定期的在博客分享我的學習心得


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM