本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
用 kubectl 外掛將你的想法帶給世界
kubectl
是與 Kubernetes 互動最關鍵的工具,必須滿足多種使用者角色,每個角色都有自己的需求和觀點。實現您所需 kubectl
功能的一種方法是向 kubectl
構建新功能。
將命令構建到 kubectl
中的挑戰
然而,說起來容易做起來難。作為 Kubernetes 如此重要的基石,對 kubectl
的任何有意義的更改都需要透過 Kubernetes 增強提案 (KEP) 來預先討論預期的更改。
在實現方面,您會發現 kubectl
是一項精巧而複雜的工程。您可能需要很長時間才能適應程式碼庫的流程和風格,才能完成您想實現的目標。接下來是審查過程,它可能會經過幾輪,直到滿足 Kubernetes 維護者的所有要求——畢竟,他們需要從功能合併之日起接管該功能的所有權並進行維護。
如果一切順利,您終於可以高興了。您的程式碼將隨下一個 Kubernetes 版本一起釋出。嗯,這可能意味著如果您不走運,您需要再等 3 個月才能在 kubectl
中釋出您的想法。
所以這是順利的快樂之路。但您的新功能可能永遠無法進入 kubectl
,這有很多充分的理由。首先,kubectl
有其特定的外觀和感覺,違反這種風格將不被維護者接受。例如,一個產生帶顏色輸出的互動式命令將與 kubectl
的其餘部分不一致。此外,當涉及到只對極少數使用者有用的工具或命令時,維護者可能會簡單地拒絕您的提案,因為 kubectl
需要滿足常見需求。
但這並不意味著您無法將您的想法提供給 kubectl
使用者。
如果您無需更改 kubectl
即可新增功能呢?
這就是 kubectl
外掛的亮點所在。自 kubectl
v1.12 起,您只需將可執行檔案放入您的 PATH
中,這些檔案遵循 kubectl-myplugin
的命名模式。然後您可以將此外掛作為 kubectl myplugin
執行,它將感覺就像 kubectl
的一個普通子命令。
外掛讓您有機會嘗試新的體驗,例如終端 UI、彩色輸出、專門功能或其他創新想法。您可以發揮創意,因為您是自己外掛的所有者。
此外,外掛為您想要向 kubectl
提議的命令提供了安全的實驗空間。透過作為外掛預釋出,您可以更快地將您的功能推向終端使用者,並快速收集反饋。例如,kubectl-debug 外掛被提議在 KEP 中成為 kubectl
的內建命令)。同時,外掛作者可以釋出功能並使用外掛機制收集反饋。
如何開始開發外掛
如果您已經有了外掛的想法,如何最好地實現它?首先您必須問自己是否可以將其實現為現有 kubectl
功能的包裝器。如果是這樣,將外掛編寫為 shell 指令碼通常是最好的方法,因為生成的外掛體積小、跨平臺工作,並且由於未經編譯而具有高度信任度。
另一方面,如果外掛邏輯複雜,通用語言通常更好。這裡的經典選擇是 Go,因為您可以使用出色的 client-go
庫與 Kubernetes API 互動。Kubernetes 維護的 sample-cli-plugin 演示了一些最佳實踐,可以用作新外掛專案的模板。
開發完成後,您只需將外掛釋出給 Kubernetes 使用者。為了獲得最佳的外掛安裝體驗和可發現性,您應該考慮透過 krew 外掛管理器進行。有關 kubectl
外掛技術細節的深入討論,請參閱 kubernetes.io 上的文件。