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