前言
kubernetes作為一個開放式式的分布式系統,其提供了多種擴充機制如CRD, service catalog等給使用者做系統功能增強以及外部系統對接等。當時以往版本都是以擴充服務端的功能,現在剛釋出的全新版本1.12.0已經可以支援kubectl指令行的擴充了。下面将通過一個簡單例子來示範如何做kubectl的擴充。
請注意:目前kubectl的擴充alpha狀态,從1.12,0開始提供。
kubectl擴充例子示範
例子的目的
通常我們會通過
kubect get pod/xxx -o yaml
的方式來展示對應的k8s資源對象的申明,但是這個輸出比較不太友好,輸出沒有對于關鍵字做高亮展示,可否提供一個指令對于輸出做渲染呢?
其實很簡單,通過簡單的kubectl指令擴充就可以做到,我們把這個擴充的kubectl子指令定義為inspect,這樣,我們期望的指令是:
kubectl inspect pod/xxxx
然後期望結果類似如下的渲染展示:

前置條件
- 更新kubectl 到新的1.12.x版本,在Mac下可以執行:
brew upgrade kubernetes-cli
- 安裝對應的渲染工具
bat
brew install bat
建立kubectl的inspect plugin
在
/usr/local/bin
下建立一個
kubectl-inspect
的檔案,并輸入以下内容
這裡需要注意的是,檔案名必須是kubectl-<子指令>的形式
#!/bin/bash
kubectl get "$@" -o yaml | bat -l yaml -p
并将該檔案改為可執行
chmod +x kubectl-inspect
測試
在指令行執行
kubectl inspect pod/xxx
就可以看上面的效果了
小結
這個plugin的機制還是十分誘人的,讓維護人員都可以集中在kubectl指令裡操作了。kubernetes在向分布式的OS又向前邁了一小步,kubectl就像是linux的cmd了