靈雀雲於近期發佈並開源的Helm v3 Controller組件「Captain」,有了新的更新進展——Captain 0.9.0版本發佈。本次更新最大的亮點在於,增長了一個新的 CRD: ChartRepo。ChartRepo用於定義helm 可使用的 charts 倉庫。和原先使用的ConfigMap方式相比,ChartRepo更爲便捷和原生,而且具備更高的可定製性。git
Captain是Helm官方社區發佈的Helm v3 proposal的第一個Controller實現示例,幫助用戶簡化Helm資源描述,更便捷、高效地實現K8s應用的管理和控制,推動Helm項目向原生 K8s邁進的步伐。目前該項目代碼已經在Github 上開源,項目地址爲:https://github.com/alauda/Cap...。歡迎更多技術開發者和愛好者前去試用。github
helm repo安全
在 helm 的 repo 管理中,能夠經過 helm 的命令來添加,查看 repo。以下圖所示:
app
實際上,helm 會將repo 的信息存儲在一個配置文件中,一般位置在:~/.helm/repository/repositories.yaml。做爲一個命令行工具,這是一種很常見的行爲。但這種作法有個明顯的缺陷,那就是用戶名和密碼會直接暴露在外。微服務
Captain 最初也是使用一樣的方法。在 helm 3的當前代碼中,仍然是從一樣位置的配置文件讀取 repo 信息,Captain 使用外掛的 ConfigMap 來記錄 repositories.yaml 裏的內容。這種作法儘管操做簡便,可是弊端也比較突出:工具
如 helm cli 同樣,將用戶名和密碼直接暴露了出來;
在 ConfigMap中 編輯 yaml 格式的 repo 信息並不方便;
修改 repo 信息須要重啓 Captain 容器;spa
ChartRepo 即是爲了解決這些問題而生。命令行
ChartRepo設計
首先來看一個簡單的實例:3d
這裏無需認證的 public charts repo其基本的信息就是 URL。Captain 會在啓動後默認建立一個 ChartRepo。在 HelmRequest 中引用 chart 時,其使用的 repo 名字就是 ChartRepo 的名字: stable.
而對於須要 basic auth 的 ChartRepo, 只須要提供一個包含 username/password 的 Secret 便可:
與其餘 CRD 同樣,做爲controller 的 Captain, 經過 watch ChartRepo 的變動來動態地更新 helm 的 repo信息,用戶能夠經過 kubectl 來添加/修改/刪除 ChartRepo。這樣不只使用上更爲便利,也更爲安全。咱們能夠經過 kubectl 來看到與 helm list 相似的結果,可是去掉了敏感信息:
CRD 目前已經成爲大多數基於kubernetes 產品的標準方案。一方面更貼近用戶使用,另外一方面也帶來了更多的可能性。經過定義好 CRD,咱們不只可使用 kubectl ,也擁有了完整的 CURD API,這對構建上層業務都是極爲便利的。
關於開源項目Captain
Captain是Helm官方社區發佈的Helm v3 proposal的第一個Controller實現示例,推動Helm項目向原生 K8s邁進的步伐。在Helm v3社區設計以外,Captain還具備如下特性:
支持多集羣:Captain組件基於cluster-registry項目實現了對多集羣的支持。用戶能夠將HelmRequest安裝到當前集羣,指定集羣,甚至是全部集羣。這在企業場景下很是實用。
依賴檢查:Captain在Helmv3的基礎上加了新的依賴檢查。好比HelmRequest A 依賴於 HelmRequest B, Captain 在同步HelmRequest A 時,會首先檢查 HelmRequest B是否已經同步。只有在全部依賴都同步成功以後,當前的HelmRequest纔會開始同步。
集中式配置valuesFrom:在Captain中,充分利用了kubernetes 中 ConfigMap 以及 Secret 做爲獨立配置的功能。在微服務場景下,用戶一般須要用多個HelmRequest 來描述不一樣chart 的安裝需求,而這些 chart 之間一般又常常有不少須要共同的配置, valuesFrom 能很好地解決這個問題。
資源衝突的處理:Captain引入了相似於 kubectl apply
的邏輯。當發現資源已存在的時候,會執行更新操做,一些沒法更新的資源會進行刪除重建操做。這樣的策略可以極大地解決用戶使用時的各類不便。
Captain的相關功能和版本進展,咱們將會持續更新,歡迎您隨時關注,並前往GitHub試用體驗。