管理20+Kubernetes集群、400臺機器,秘訣在于?
本文轉載自公眾號“讀芯術”(ID:AI_Discovery)
我在生產中管理大規模Kubernetes集群已經三年有余,日復一日的事實證明,我的方法是行之有效的。本文中將和大家分享關于kubectl終端設置的極簡主義法。
一個精心定制的命令行終端可以顯著提高生產率,這是所有奇跡發生的核心。但是我認為,與流行的命令行定制和功能豐富的升級相比,在安裝任何一種新的二進制文件、包裝器或修改程序時,簡單的設置是非常省時省力的。特別是使用kubectl時,這種本機工具設計完善、幾乎沒有需要解決的問題。
下面是我對kubectl終端添加的四個簡單功能。在這種設置下,我每天可以管理20多個大型Kubernetes集群,其中還包括400多臺機器。
使用‘kubetail’在多個Pod實例中查看日志文件
使用kubectl 時首先會注意到的一件事就是,難以跨多個實例查看日志文件。這是最常見的用例之一,但kubectl中并沒有 。如果在kubectl 上查看單個pod的日志,它看起來就像這樣:
- kubectl logs -f <POD_NAME> -n <NAMESPACE>
在kubetail上,若要查看多個pods的日志,那么可以使用:
- 圖源:unsplashkubetail<POD_NAME_REGEX> -n <NAMESPACE>
這將查看名稱與正則表達式相匹配的所有pods日志文件。由于日志記錄跨多個pods,因此kubetail會使用不同的顏色來幫助區分和分析不同的日志文件。
圖源:Komal Venkatesh Ganesan
kubetail是位于kubectl頂端的一個簡單包裝器,它可以實現上述功能。
動態更改默認命名空間
多次重復地為每個單獨的kubectl操作提供命名空間指示,會耗費大量時間精力,而且效率低下。要解決這個問題就需要一種動態設置和更改默認命名空間的方法。
下面是我編寫的一個名為ksn的簡單別名函數,它實現了上述目的(ksn表示設置命名空間)。
圖源:Komal Venkatesh Ganesan
圖源:Komal Venkatesh Ganesan
通常,根據手頭的任務,我們的工作涵蓋大量命名空間。因此,如果我排查了一個kafka問題,那么10個命令中有8個會被發送到Kafka命名空間。在此期間,它將成為默認命名空間。這可以節省大量的時間,特別是在處理需要發布大量kubectl指令的復雜工作任務時。
在Shell命令提示符中顯示“kube-context”和“namespace”
在發出kubectl命令時,必須時刻了解當前的 kube-context 和 namespace。同時在20個不同的kube-contexts和50個左右的命名空間中管理集群,這并不是一件容易的事。很容易在環境中發出錯誤的命令,尤其是在跨不同上下文和集群中執行多任務時。
為了解決這個問題,在終端提示附近隨時顯示活動的 namespace和kube-contexts是非常有用的。
在下述例子中,kube-context是dev2–1,命名空間是 test。有了這些信息,當在集群中執行命令時,就可以簡單地查看它。
圖源:Komal Venkatesh Ganesan
基本‘kubectl’別名
無需多言,別名是自定義和加速終端工作的最快方法。下面是我常用的一些kubectl別名,我已經非常習慣使用它們了。
- alias k='kubectl '
- alias kcc='kubectl config current-context'
- alias kdp='kubectl delete po'
- alias kgc='kubectl config get-contexts'
- alias kge='kubectl get events --sort-by='\''{.lastTimestamp}'\'
- alias kgp='kubectl get po'
- alias kl='kubectl logs '
- alias kpf='kubectl port-forward'
- alias ksc='kubectl config use-context'
少即是多——不要過度使用終端
我們為kubectl用戶介紹了四種基本的終端定制:
- 使用kubetail查看多個pod實例的日志文件。
- 動態更改默認 namespace以顯著縮短kubectl指令。
- 在命令提示符附近顯示kube-context和namespace,避免意外錯誤。
- 重要的kubectl別名列表。
與這種極簡設置形成對比的是,流行的終端升級(比如K9s)往往是復雜、功能豐富、色彩多樣的,但相反,它的速度緩慢、容易令人分心,而且并不是必需的。添加的(各種花里胡哨的)功能越多,花在理解和瀏覽屏幕上所有額外信息上的時間就越多。
圖源:unsplash
一個簡潔的終端設置,比任何東西都更能增強你的注意力。擁有一個簡單的命令行終端設置可以讓你快速熟練地使用本地二進制文件和工具,這是至關重要的——尤其是需要使用大量基礎架構、登錄和退出不同的VM shell配置文件時。
對于一個工程師來講,終端設置應有助于豐富經驗,而不是讓你無所適從。