看看這個很酷的 Kubernetes 管理的終端 UI。
通常情況下,我寫的關於 Kubernetes 管理的文章中用的都是做叢集管理的 kubectl
命令。然而最近,有人給我介紹了 k9s 專案,可以讓我快速檢視並解決 Kubernetes 中的日常問題。這極大地改善了我的工作流程,我會在這篇教學中告訴你如何上手它。
它可以安裝在 Mac、Windows 和 Linux 中,每種作業系統的說明可以在這裡找到。請先完成安裝,以便能夠跟上本教學。
我會使用 Linux 和 Minikube,這是一種在個人電腦上執行 Kubernetes 的輕量級方式。按照此教學或使用該文件來安裝它。
安裝好 k9s
應用後,從幫助命令開始總是很好的起點。
$ k9s help
正如你在幫助資訊所看到的,我們可以用 k9s
來設定很多功能。我們唯一需要進行的步驟就是編寫組態檔。而 info
命令會告訴我們該應用程式要在哪裡找它的組態檔。
$ k9s info ____ __.________| |/ _/ __ \______| < \____ / ___/| | \ / /\___ \|____|__ \ /____//____ > \/ \/Configuration: /Users/jess/.k9s/config.ymlLogs: /var/folders/5l/c1y1gcw97szdywgf9rk1100m0000gn/T/k9s-jess.logScreen Dumps: /var/folders/5l/c1y1gcw97szdywgf9rk1100m0000gn/T/k9s-screens-jess
如果要新增組態檔,該設定目錄不存在的話就建立它,然後新增一個組態檔。
$ mkdir -p ~/.k9s/$ touch ~/.k9s/config.yml
在這篇介紹中,我們將使用 k9s
版本庫中推薦的預設 config.yml
。維護者請注意,這種格式可能會有變化,可以在這裡檢視最新版本。
k9s: refreshRate: 2 headless: false readOnly: false noIcons: false logger: tail: 200 buffer: 500 sinceSeconds: 300 fullScreenLogs: false textWrap: false showTime: false currentContext: minikube currentCluster: minikube clusters: minikube: namespace: active: "" favorites: - all - kube-system - default view: active: dp thresholds: cpu: critical: 90 warn: 70 memory: critical: 90 warn: 70
我們設定了 k9s
尋找原生的 minikube 設定,所以我要確認 minikube 已經上線可以使用了。
$ minikube statushost: Runningkubelet: Runningapiserver: Runningkubeconfig: Configured
有了組態檔,並指向我們的本地叢集,我們現在可以執行 k9s
命令了。
$ k9s
啟動後,會彈出 k9s
的基於文字的使用者介面。在沒有指定名稱空間標誌的情況下,它會向你顯示預設名稱空間中的 Pod。
如果你執行在一個有很多 Pod 的環境中,預設檢視可能會讓人不知所措。或者,我們可以將注意力集中在給定的名稱空間上。退出該應用程式,執行 k9s -n <namespace>
,其中 <namespace>
是已存在的名稱空間。在下圖中,我執行了 k9s -n minecraft
,它顯示了我損壞的 Pod:
所以,一旦你有了 k9s
後,有很多事情你可以更快地完成。
通過快捷鍵來導航 k9s
,我們可以隨時使用方向鍵和確認鍵來選擇列出的專案。還有不少其他的通用快捷鍵可以導航到不同的檢視。
0
:顯示在所有名稱空間中的所有 Pod d
:描述所選的 Pod l
:顯示所選的 Pod 的紀錄檔 你可能會注意到 k9s
設定為使用 Vim 命令鍵,包括使用 J
和 K
鍵上下移動等。Emacs 使用者們,敗退吧 :)
需要去找一個不在 Pod 裡的東西嗎?是的,我也需要。當我們輸入冒號(:
)鍵時,可以使用很多快捷方式。從那裡,你可以使用下面的命令來導航。
:svc
:跳轉到服務檢視 :deploy
:跳轉到部署檢視 :rb
:跳轉到角色系結檢視,用於 基於角色的存取控制(RBAC)管理 :namespace
:跳轉到名稱空間檢視 :cj
:跳轉到 cronjob 檢視,檢視叢集中計劃了哪些作業。 這個應用最常用的工具是鍵盤;要在任何頁面往上或下翻頁,請使用方向鍵。如果你需要退出,記得使用 Vim 係結鍵,鍵入 :q
,然後按確認鍵離開。
當出現故障的時候,k9s
怎麼幫忙?舉個例子,我讓幾個 Pod 由於設定錯誤而死亡。下面你可以看到我那個可憐的 “hello” 部署死了。當我們將其高亮顯示出來,可以按 d
執行 describe
命令,看看是什麼原因導致了故障。
草草掠過那些事件並不能告訴我們故障原因。接下來,我按了 esc
鍵,然後通過高亮顯示 Pod 並輸入shift-l
來檢查紀錄檔。
不幸的是,紀錄檔也沒有提供任何有用的資訊(可能是因為部署從未正確設定過),而且 Pod 也沒有出現。
然後我使用 esc
退了出來,我看看刪除 Pod 是否能解決這個問題。要做到這一點,我高亮顯示該 Pod,然後使用 ctrl-d
。幸好 k9s
在刪除前會提示使用者。
雖然我確實刪除了這個 Pod,但部署資源仍然存在,所以新的 Pod 會重新出現。無論什麼原因(我們還不知道),它還會繼續重新啟動並死掉。
在這裡,我會重複檢視紀錄檔,描述資源,甚至使用 e
快捷方式來編輯執行中的 Pod 以排除故障行為。在這個特殊情況下,失敗的 Pod 是因為沒有設定在這個環境下執行。因此,讓我們刪除部署來停止崩潰接著重新啟動的迴圈。
我們可以通過鍵入 :deploy
並點選回車進入部署。從那裡我們高亮顯示並按 ctrl-d
來刪除。
這個有問題的部署被幹掉了! 只用了幾個按鍵就把這個失敗的部署給清理掉了。
這個應用有很多自定義選項、乃至於 UI 的配色方案。這裡有幾個可編輯的選項,你可能會感興趣。
config.yml
檔案的位置(這樣你就可以把它儲存在版本控制中)。alias.yml
檔案中新增自定義別名。hotkey.yml
檔案中建立自定義熱鍵。整個應用是在 YAML 檔案中設定的,所以客製化化對於任何 Kubernetes 管理員來說都會覺得很熟悉。
我傾向於以一種非常手動的方式來管理我團隊的系統,更多的是為了鍛鍊腦力,而不是別的。當我第一次聽說 k9s
的時候,我想,“這只是懶惰的 Kubernetes 而已。”於是我否定了它,然後回到了到處進行人工干預的狀態。實際上,當我在處理積壓工作時就開始每天使用它,而讓我震驚的是它比單獨使用 kubectl
快得多。現在,我已經皈依了。
了解你的工具並掌握做事情的“硬道理”很重要。還有一點很重要的是要記住,就管理而言,重要的是要更聰明地工作,而不是更努力。使用 k9s
,就是我踐行這個目標的方法。我想,我們可以把它叫做懶惰的 Kubernetes 管理,也沒關係。