本文已超過一年。較舊的文章可能包含過時的內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
透過 kubectl 外掛程式將您的想法帶到世界
kubectl
是與 Kubernetes 互動的最重要工具,而且必須滿足多種使用者角色,每種角色都有自己的需求和意見。讓 kubectl
執行您所需操作的一種方式是在 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 上的文件。