用 kubectl 外掛把你的想法帶到這個世界

Cornelius Weig發表於2020-03-02

用 kubectl 外掛把你的想法帶到這個世界

kubectl 是與 Kubernetes 互動的最關鍵工具,它必須滿足多個使用者角色,每個使用者角色都有自己的需求和觀點。讓 kubectl 滿足你需要的一種方法是在 kubectl 中構建新功能。

在 kubectl 中構建命令的挑戰

然而,說起來容易做起來難。作為 Kubernetes 的重要基石,對 kubectl 的任何有意義的更改都需要經過Kubernetes 增強建議Kubernetes Enhancement Proposal(KEP)過程,預先討論了預期的更改。

在實現方面,你會發現 kubectl 是一個巧妙而複雜的工程。要完成你想要完成的任務,可能需要很長時間才能適應程式碼庫的流程和風格。接下來是審查過程,可能要經過幾輪,直到滿足 Kubernetes 維護者的所有要求 —— 畢竟,他們需要接管這個特性的所有權,並從合併的那一天開始維護它。

當一切順利時,你終於可以高興了。你的程式碼將隨下一個 Kubernetes 發行版一起釋出。如果你不走運的話,這可能意味著你需要再等三個月才能在 kubectl 釋出你的想法。

這就是一切順利的幸福之路。但是,你的新功能可能永遠不會出現在 kubectl 中,這是有原因的。首先,kubectl 具有特定的外觀和感覺,違反這種風格是維護者無法接受的。例如,用顏色生成輸出的互動式命令與 kubectl 的其餘部分不一致。另外,當涉及到只對極少數使用者有用的工具或命令時,維護人員可能會簡單地拒絕你的建議,因為 kubectl 需要解決常見的需求。

但這並不意味著你不能將你的想法傳送給 kubectl 使用者。

如果不需要更改 kubectl 來新增功能呢?

這就是 kubectl 外掛的亮點所在。從 kubectl v1.12 開始,你可以簡單地將可執行檔案放到你的路徑中,該路徑遵循 kubectl-myplugin 的命名模式。然後你可以用 kubectl myplugin 來執行這個外掛,它就像 kubectl 的一個普通子命令。

外掛使你有機會嘗試新的體驗,如終端 UI、豐富多彩的輸出、專門的功能或其他創新的想法。你可以去創造,因為你是你自己的外掛的所有者。

此外,外掛為你希望向 kubectl 建議的命令提供了安全的實驗空間。透過預先發布外掛,你可以更快地將你的功能推送給終端使用者,並快速收集反饋。例如,kubectl-debug 外掛建議成為 kubectl 中的內建命令(KEP)。同時,外掛作者可以使用外掛機制釋出功能並收集反饋。

如何開始開發外掛

如果你已經有了一個外掛的想法,你如何最好地實現它?首先,你必須自問是否可以將其實現為現有 kubectl 功能的包裝。如果是這樣,那麼將外掛編寫為 shell 指令碼通常是最好的方法,因為生成的外掛很小,可以跨平臺工作,並且由於沒有編譯而具有很高的可信度。

另一方面,如果外掛邏輯很複雜,那麼通用語言通常更好。這裡的標準選擇是 Go,因為你可以使用優秀的 client-go 庫與 Kubernetes API 進行互動。Kubernetes 維護的 sample-cli-plugin 演示了一些最佳實踐,可以作為新外掛專案的模板。

當開發完成後,你只需要將你的外掛傳送給 Kubernetes 使用者即可。為了獲得最佳的外掛安裝體驗和可發現性,你應該考慮透過 krew 外掛管理器這樣做。要深入討論關於 kubectl 外掛的技術細節,請參閱 kubernetes.cn 的文件

相關文章