從 Helm v2 遷移至 v3
本指南說明如何將 Helm v2 移轉至 v3。必須安裝 Helm v2 並在一個或多個叢集中管理發佈。
Helm 3 變更概述
從 Helm 2 到 3 的完整變更清單記載於 常見問題解答部分。以下是幾項在移轉期間和移轉前應知悉的變更摘要
- 移除 Tiller
- 將客戶端/伺服器改為客戶端/套件庫架構(僅
helm
執行檔) - 安全性現在以每使用者為基礎(委派給 Kubernetes 使用者叢集安全性)
- 發佈現在儲存在叢集內秘密中,而且發佈物件的元資料已變更
- 發佈持續在發佈名稱空間基礎上,不再在 Tiller 名稱空間中
- 將客戶端/伺服器改為客戶端/套件庫架構(僅
- 更新圖表存放庫
helm search
現在支援在本地存放庫中搜尋和針對 Artifact Hub 進行搜尋查詢
- 因應以下規格變更,將圖表 API 版本升級到「v2」
- 動態連結的圖表相依性移至
Chart.yaml
(已移除requirements.yaml
和 requirements → dependencies) - 現在可以將套件庫圖表(幫助程式/共用圖表)新增為動態連結的圖表相依性
- 圖表具有
type
元資料欄位來定義圖表為application
或library
圖表。預設為應用程式,意即它可提供而且可安裝 - Helm 2 圖表(apiVersion=v1)仍可安裝
- 動態連結的圖表相依性移至
- 新增 XDG 目錄規格
- 已移除 Helm 首頁並以 XDG 目錄規格取代,以儲存組態檔
- 不再需要初始化 Helm
- 已移除
helm init
和helm home
- 其他變更
- Helm 安裝/設定已簡化
- 僅 Helm Client(helm 執行檔)(無 Tiller)
- 原樣執行模式
- 預設不設定
local
或stable
存放庫 - 已移除
crd-install
掛鉤,並在圖表中的crds
目錄取代該掛鉤,該目錄中定義的 CRD 將在對圖表進行任何提供之前安裝 test-failure
鉤子註解值已移除,而test-success
已棄用。請使用test
- 指令已移除/已取代/已新增
- delete --> uninstall:預設移除所有發佈記錄(以前需要
--purge
) - fetch --> pull
- home(已移除)
- init(已移除)
- install:需要發佈名稱或
--generate-name
參數 - inspect --> show
- reset(已移除)
- serve(已移除)
- template:
-x
/--execute
參數更名為-s
/--show-only
- upgrade:新增參數
--history-max
,限制每個版本儲存的最高修訂號碼(0為無限制)
- delete --> uninstall:預設移除所有發佈記錄(以前需要
- Helm 3 Go 函式庫經歷許多變更,與 Helm 2 函式庫不相容
- 發佈二進位檔現由
get.helm.sh
主機
- Helm 安裝/設定已簡化
移轉使用案例
移轉使用案例如下
Helm v2 和 v3 管理相同的叢集
- 僅在您打算逐步淘汰 Helm v2,且不需要 v3 管理 v2 部署的任何發佈時,才建議使用此使用案例。應由 v3 部署所有新部署的發佈,而現有的 v2 已部署發佈應僅由 v2 更新/移除
- Helm v2 和 v3 可以很順利地管理相同的叢集。Helm 版本可以安裝在相同或不同的系統上
- 如果在相同的系統上安裝 Helm v3,您需要執行額外步驟,以確保兩個用戶端版本可以在準備移除 Helm v2 用戶端之前並存。重新命名或將 Helm v3 二進位檔放在不同的資料夾中,以避免衝突
- 否則,兩個版本之間不會有衝突,因為有以下區別
- v2 和 v3 發佈(記錄)儲存彼此獨立。這些變更包括用於儲存和儲存在資源中的發佈物件中繼資料的 Kubernetes 資源。發佈也將位於每個使用者命名空間,而不是使用 Tiller 命名空間(例如,v2 預設 Tiller 命名空間 kube-system)。v2 使用 Tiller 命名空間和
TILLER
擁有權下的「ConfigMaps」或「Secrets」。v3 使用使用者命名空間和helm
擁有權下的「Secrets」。發佈在 v2 和 v3 中都具增量性 - 唯一的問題可能是如果 Kubernetes 叢集範圍資源(例如,
clusterroles.rbac
)定義在圖表中。v3 部署將隨之失敗,即使在命名空間中唯一,因為資源會衝突 - v3 組態不再使用
$HELM_HOME
,而是改用 XDG 目錄規格。它也會在需要時動態建立。因此,它與 v2 組態無關。這僅適用於在相同的系統上安裝兩個版本的狀況
- v2 和 v3 發佈(記錄)儲存彼此獨立。這些變更包括用於儲存和儲存在資源中的發佈物件中繼資料的 Kubernetes 資源。發佈也將位於每個使用者命名空間,而不是使用 Tiller 命名空間(例如,v2 預設 Tiller 命名空間 kube-system)。v2 使用 Tiller 命名空間和
將 Helm v2 移轉至 Helm v3
- 當您想要讓 Helm v3 管理現有的 Helm v2 發佈時,適用此使用案例
- 請注意,Helm v2 用戶端
- 可以管理 1 到多個 Kubernetes 叢集
- 可以連線到一個或多個叢集的 Tiller 執行個體
- 這表示您在將發佈套件部署到群集和它自己的命名空間的時候,必須瞭解 Tiller 和它的命名空間會有的狀況。因此您必須知道如何針對每個群集和 Helm v2 應用程式執行個體管理的 Tiller 個體進行移轉
- 建議的資料移轉路徑如下
- 備份 v2 資料
- 移轉 Helm v2 組態
- 移轉 Helm v2 發佈套件
- 當您確信 Helm v3 能夠管理所有 Helm v2 資料(針對 Helm v2 應用程式執行個體的所有群集和 Tiller 個體),然後清除 Helm v2 資料
- 此移轉流程是由 Helm v3 2to3 外掛程式自動化