隨著Helm v2 發布最終版本Helm 2.17.0,Helm v3 現在已是 Helm 開發者社區支持的唯一標準。為便于管理,建議用戶盡快將模板切換至。
當前社區從Helm v2演進到Helm v3,主要有以下變化:
- 移除tiller
Helm v3 使用更加簡單和靈活的架構,移除了 tiller,直接通過kubeconfig連接apiserver,簡化安全模塊,降低了用戶的使用壁壘。
- 改進了升級策略,采用三路策略合并補丁
Helm v2 使用雙路策略合并補丁。在升級過程中,會對比最近一次發布的chart manifest和本次發布的chart manifest的差異,來決定哪些更改會應用到Kubernetes資源中。如果更改是集群外帶的(比如通過kubectl edit),則修改不會被Helm識別和考慮。結果就是資源不會回滾到之前的狀態。
Helm v3 使用三路策略來合并補丁,Helm在生成一個補丁時,會考慮之前老的manifest的活動狀態。因此,Helm在使用老的chart manifest生成新補丁時會考慮當前活動狀態,并將其與之前老的 manifest 進行比對,并再比對新的 manifest 是否有改動,并進行自動補全,以此來生成最終的更新補丁。
詳情及示例請見Helm官方文檔:
- 默認存儲驅動程序更改為secrets
Helm v2 默認情況下使用 ConfigMaps 存儲發行信息,而在 Helm v3 中默認使用 Secrets。
- 發布名稱限制在namespace范圍內
Helm v2 只使用tiller 的namespace 作為release信息的存儲,這樣全集群的release名字都不能重復。Helm v3只會在release安裝的所在namespace記錄對應的信息,這樣release名稱可在不同命名空間重用。應用和release命名空間一致。
- 校驗方式改變
Helm v3 對模板格式的校驗更加嚴格,如Helm v3 將chart.yaml的apiVersion從v1切換到v2,針對Helm v2的chart.yaml,強要求指定apiVersion為v1。可安裝Helm v3客戶端后,通過執行helm lint命令校驗模板格式是否符合v3規范。
適配方案 :根據Helm官方文檔 適配Helm v3模板,apiVersion字段必填。
- 廢棄crd-install
Helm v3刪除了crd-install hook, 并用chart中的crds目錄替換。需要注意的是,crds目錄中的資源只有在release安裝時會部署,升級時不會更新,刪除時不會卸載crds目錄中的資源。若crd已存在,則重復安裝不會報錯。
適配方案 :根據Helm官方文檔 , 當前可使用crds目錄或者將crd定義單獨放入chart。考慮到目前不支持使用Helm升級或刪除CRD,推薦分隔chart,將CRD定義放入chart中,然后將所有使用該CRD的資源放到另一個 chart中進行管理。
- 未通過helm創建的資源不強制update,releaes默認不強制升級
Helm v3強制升級邏輯變化,不再是升級失敗后走刪除重建,而是直接走put更新邏輯。因此當前CCE release升級默認使用非強制更新邏輯,無法通過Patch更新的資源將導致release升級失敗。若環境存在同名資源且無Helm V3的歸屬標記app.kubernetes.io/managed-by: Helm,則會提示資源沖突。
適配方案 :刪除相關資源,并通過Helm創建。
- Release history數量限制更新
為避免release 歷史版本無限增加,當前release升級默認只保留最近10個歷史版本。
更多變化和詳細說明請參見Helm官方文檔
- Helm v2與Helm v3的區別:
- Helm v2如何遷移到Helm v3: