今天要幹嘛?
今天我要給 KubeKey
挑個刺!
身為一個 KubeSphere Community Member,至今為止我居然沒有用過 KubeKey,是不是很過分?說出來都覺得沒臉在 KubeSphere 社群立足啊!
想當年開始玩 KubeSphere 時,每走一步我都覺得“不和諧”。雖說 KubeSphere 早已經有了足夠的知名度和大量的企業使用者,但是我總能挑出“刺”,天天給 KubeSphere 社群提意見建議……
沒錯,最終他們“受不了”了,決定邀請我加入 KubeSphere 社群,成為一名光榮的 Member!
現在我自己也搞開源社群了。自從開始管理 DevStream 開源社群後,我基本就沒有精力參與 KubeSphere 社群了。哎,一顆躁動的心,一雙不安分的手!我得做點啥,但是開發我是沒精力參與了,要不,發揮一下我的“臭毛病” - 晚期的強迫症和極致的細節洞察力,去挑挑刺吧!
沒錯!
我決定試用一下 KubeKey!一方面把這些“刺”反饋給 KubeSphere 社群,幫助他們進一步完善 KubeKey 的使用體驗!另外一方面在這個過程中熟悉 KubeKey 的用法,看下能不能找到 DevStream 和 KubeSphere 協作的點,比如用 DevStream 簡化 KubeSphere 的安裝部署和配置過程。
在哪裡幹?
KubeSphere 社群給了我一個開發機,一臺 Linux vm,酷!我就在這個 Linux vm 上“幹”它吧!
從哪裡開始幹?
這還不簡單,README 文件呀!
快速開幹!
我們在文件裡找 Quick Start,沒錯,有,大致長這樣:
{{<
開炮!
看到這個日誌,是不是看著特別像“no errors, no warnings”,一派祥和,歌舞昇平,馬上可以用 kubectl
命令看下嶄新的 Kubernetes 叢集了!(不要和我槓單節點 k8s 環境是不是叢集,官方稱之為“單節點叢集”)
我就不演示 kubectl get xxx
了,結果慘不忍睹!我們仔細看這個輸出日誌,對,細品,有沒有發現這裡用了幾行非 error 級別的日誌告訴我們需要先安裝:
- conntrack
- socat
給 KubeKey 的建議1:這裡是不是用 error level logs 更合理一些?
給 KubeKey 的建議2:能不能日誌裡直接告訴使用者需要先安裝 conntrack 和 socat,並且同時列印出安裝命令?(我知道 centos 和 ubuntu 安裝方式不一樣,不過可選的命令集合其實很有限,kk 獲取系統型別也很容易,給使用者更友好的提示其實很容易做到)
給 KubeKey 的建議3:表格裡那麼多項沒有 y 的,到底哪些是必須有的哪些是不必須的?這個結果讓使用者看得心慌:我需要先安裝那麼多東西才能開始用 kk?望而卻步啊!
解決依賴問題再繼續幹!
回到文件,其實仔細看可以在這裡發現前置依賴,就是這段文字太長了,讓人有點沒耐心仔細看完。
還是 Google 大法好用!我們照著這個思路執行下面命令:
yum -y install conntrack-tools
yum -y install socat
不出意外的話這一步很難失敗。對,如果你失敗了,那就是意外。真的失敗了,那就是 yum
配置問題了,明白怎麼處理吧?
然後繼續執行 ./kk create cluster
,看下能不能得到和諧的輸出。(記得如果環境不夠“科學”,要先執行export KKZONE=cn
,否則你會在某一步卡半天,卡到懷疑人生,無法判斷是網路太慢還是網路不通)
給 KubeKey 的建議4:當命令卡住的時候,比如映象下載太慢時,有沒有超時邏輯?或者能不能定時輸出一個日誌告訴使用者“沒有卡死”?或者顯示一下下載的進度條?總之不要長時間沒有日誌,使用者會忍不住去 Ctrl+c,然後一臉迷茫,下一步幹啥?
比剛才和諧了,不過第一行日誌很不和諧。
如果 Failed
影響大,比如會讓某個功能不可用,那麼應該用 error
級別,這樣我會嘗試去修復;反之 WARN
級別的意思就是“你可以忽略,忽略也能用”。OK,我選擇忽略。(我不一定真的忽略,但是很多使用者肯定會這樣想。)
給 KubeKey 的建議5:儘量避免 WARN 日誌,尤其是 WARN 配合 Failed 一起用,讓使用者又覺得這個錯誤很嚴重,又覺得可以忽略。
接著就看網路環境了。
順利的話,最後可以看到這樣的日誌:
Installation is complete.
Please check the result using the command:
kubectl get pod -A
讓我們執行 kubectl get pod -A
,看下“豌豆莢”們是不是正常:
$ kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-75ddb95444-6dg9b 1/1 Running 0 30m
kube-system calico-node-rqqrk 1/1 Running 0 30m
kube-system coredns-5495dd7c88-9hlrp 1/1 Running 0 30m
kube-system coredns-5495dd7c88-nlp5d 1/1 Running 0 30m
kube-system kube-apiserver-i-hmqwjh0m 1/1 Running 0 30m
kube-system kube-controller-manager-i-hmqwjh0m 1/1 Running 0 30m
kube-system kube-proxy-x69p9 1/1 Running 0 30m
kube-system kube-scheduler-i-hmqwjh0m 1/1 Running 0 30m
kube-system nodelocaldns-vd77n 1/1 Running 0 30m
我勒個乖乖,Amazing 啊!清一色的 Running、1/1 且 0 restarts,堪稱完美!
如何幹翻重來?
裝好了,然後呢?
幹翻重來吧,因為直接執行 ./kk create cluster
並不帶 KubeSphere。我們體驗過 k8s 的安裝過程了,整體還是挺簡單易用的。下面試下帶 KubeSphere 的玩法吧。
幹翻操作:
./kk delete cluster
執行完這個命令後,k8s 叢集會被刪掉。當然,對應的 kubectl 和 docker images 我不希望被刪掉,事實證明 KubeKey 也不會把它們刪掉。對,我驗證了:
連著 KubeSphere 一起幹!
命令是如此的簡單,只需要加一個 flag 就夠了:
./kk create config --with-kubesphere
幹不過,輸了。
結果不美麗啊:
{{<
我。。。
你。。。
你給我一個 WARN
後就直接掛了?
給 KubeKey 的建議6:WARN 日誌前面提到了,這裡再次印證我的觀點,日誌級別要嚴謹,WARN 要少用。
這個錯誤,,,看起來是要 Google 一會了。但是我懶啊!這不就是和 docker
安裝方式有關嘛(我猜可能和版本也有關係),我卸掉 docker,讓 KubeKey 來安裝總行了吧!
給 KubeKey 的建議7:如果你們知道這個錯誤的解決方案,請把方法(或者參考資料連結)貼到日誌裡,不要期待使用者可以輕鬆 Google 一下解決。當然,我不能接受你說我解決不了,哈哈,不過現在是晚上10:30分,我想快點打完收工了,不查了。
其實這個機子本來沒有 docker,為什麼我會提前安裝呢?因為我勤勞?不存在的。我是被這段內容誤導的:
看這個縮排級別,你瞟一眼,是不是最顯眼的是下面的 Note?Note 裡說先安裝 docker,然後假如你很熟悉 docker,是不是就順手先裝了 docker 在繼續看文件?
對,我就跪在了這裡。裝了 docker 才發現,這個 Note 是針對 Build Binary from Source Code 的 Note。。。
給 KubeKey 的建議8:這裡的文件也優化下吧,讓 Note 看起來不那麼像全域性 Note。
重整旗鼓,繼續幹!
上來就是一套組合拳:
yum remove docker
./kk create cluster --with-kubesphere
不出我所料,錯誤繞過去了!
對,我就是這麼心安理得,可以忍住不去查前面這個錯誤是怎麼回事,我選擇繞過後晚上還是可以睡得香噴噴!我相信 KubeSphere 社群過幾天會告訴我答案的。
截圖看不到效果,大家腦補一下上面這個箭頭會左右移動,對,動態的!太可愛了吧!明天我要去問下誰寫的這個程式碼,真是個可愛的程式設計師!
在等這個箭頭停下來的時間裡,再給 KubeKey 加一個建議吧:
給 KubeKey 的建議9:這裡的文件也優化下吧,風格一致更優雅,要麼都寫一個“示例”版本,要麼都用[version]佔位。
給 KubeKey 的建議10:y 和 yes 在使用者意圖裡絕對是一模一樣,要不要相容下?包括大小寫(我沒有測試大小寫是不是相容)
給 KubeKey 的建議11:如果一次安裝長時間卡住,可能是網路問題。這時候如果 Ctrl+c 然後重新執行安裝,會出現這種情況,沒錯,兩個 ks-installer。當然,我知道需要先 delete 一下就能繞過去,但是或許 kk 能夠識別到使用者沒有 delete 並且給出提示,那就更“優雅”了。
再次重整旗鼓,繼續幹!
由於我用的雲主機,前面安裝過程太久,我去洗了個澡,回來後終端斷開連線了。沒錯,再次進去的時候我忘記執行 export KKZONE=cn
了,所以失敗了一次。再次執行的時候忘記 delete 了,所以再失敗了一次。
於是,我要 delete 了:
慘不忍睹,慘絕人寰啊!!!
你給我裝的 docker 呀,怎麼還能有這個錯誤?
同樣,你告訴我 WARN,我是不會上心的。
無視
and
繼續!
好玩的事情是,這次看著錯誤資訊似乎,,,和前面沒啥區別呀。。。但是沒有直接退出程式,而是繼續往下走了!好吧,我是不會去研究這個錯誤的!
又到了這個“可愛到爆”的箭頭了,繼續漫長的等待吧~
不對勁啊,為什麼那麼久,是不是掛了?
好吧,喚醒一下我沉睡多年(準確說是大半年)的 k8s 排錯技能!
我看到了 ks-installer pod 的錯誤 events 資訊:
有意思,這是個大 bug 了吧,映象不存在?我得去問一下內部人員:
給 KubeKey 的建議11:對著文件走不通安裝過程,這算大 bug 了,不用我細說怎麼 fix 了吧。
一鼓作氣,再而衰,三而竭,竭前最後掙扎著幹一次
沒力氣打“組合拳”了,一條簡單的命令,然後小拳拳敲個回車:
./kk create cluster --with-kubesphere v3.2.1
好傢伙,一把給我整到了晚上11點。。。我不要面子的啊,我在家辦公還要加班啊,我是朝十晚四午休三小時的男人啊……
不過說實話,看到這個熟悉的日誌,還是很親切的!畢竟去年不知道看了多少遍這個日誌!(別不信,我是深度玩過的,有視訊為證)
繼續看下 pod
很和諧!Amazing 啊!
(其實沒有特別和諧,restarts 不是全0。不過沒關係,我知道這不影響功能,只是安裝過程還有優化的空間而已。)
你想看最後的 Dashboard ?我也想!
不過我沒有 ELB,焦急等待中……(委託大佬給我配置 ELB 去了)
半小時後……
登入頁面來了!
進去後,熟悉的感覺,熟悉的味道!
後面我一定要再寫幾篇文章介紹下 KubeSphere 怎麼玩!當年那一堆筆記,那些付在 KubeSphere 上的青春,不寫點啥可惜了!
最後的總結
- 官方文件比 GitHub 的 README 更適合“普通使用者”;
- 好睏啊!!!我要睡覺了,總結啥嘛,沒啥好總結的。
最後的最後
轉載請註明出處!
更多我的文章,請移步我的個人網站:https://www.danielhu.cn
更多 DevStream 團隊的文章,請移步 DevStream 部落格網站:https://blog.devstream.io
想要及時收到我的最新文章,請關注我的個人公眾號:胡說雲原生