Helm V2 遷移到 V3 版本

Helm V3 版本已經發布了第三個 Beta 版本了,因爲 V2 和 V3 版本之間的架構變化較大,因此若是咱們如今正在使用 V2 版本的話,要遷移到 V3 版本了就有點小麻煩,其中最重要的固然就是數據遷移的問題,爲了解決這個版本遷移問題,官方提供了一個名爲 helm-2to3 的插件能夠來簡化咱們的遷移工做。git

安裝 Helm V3

爲了可以讓 Helm V2 CLI 包還能夠繼續使用,因此咱們這裏就不直接覆蓋了,讓兩個版本的 CLI 包能夠共存,比較遷移仍是有風險的,等到咱們準備好移除 V2 版本的時候再刪除也不遲。github

在 Helm GitHub 倉庫上下載最新的 V3 Beta 版本,地址:https://github.com/helm/helm/releases,要注意選擇和你係統一致的二進制包,好比咱們這裏是 Mac 系統,就下載 MacOSamd64這個包,下載完成後解壓將對應的 Helm CLI 包重命名爲 helm3,並移動到 PATH 路徑(好比 /usr/local/bin)下面去,而後咱們就能夠準備使用 helm3 命令了:redis

$ helm3 version

version.BuildInfo{Version:"v3.0.0-beta.3", GitCommit:"5cb923eecbe80d1ad76399aee234717c11931d9a", GitTreeState:"clean", GoVersion:"go1.12.9"}

$ helm repo list

NAME            URL

stable          http://mirror.azure.cn/kubernetes/charts/

local           http://127.0.0.1:8879/charts

$ helm3 repo list

Error: no repositories to show

咱們能夠看到使用 helm3 命令查看不到咱們以前配置的 chart 倉庫信息。安全

HELM-2TO3 插件

helm-2to3 插件就可讓咱們將 Helm V2 版本的配置和 release 遷移到 Helm V3 版本去。架構

安裝的 Kubernetes 對象不會被修改或者刪除,因此不用擔憂。接下來咱們就來安裝這個插件。app

安裝

直接使用下面的命令安裝便可:less

$ helm3 plugin install https://github.com/helm/helm-2to3

Downloading and installing helm-2to3 v0.1.1 ...

https://github.com/helm/helm-2to3/releases/download/v0.1.1/helm-2to3_0.1.1_darwin_amd64.tar.gz

Installed plugin: 2to3

而後能夠使用 helm3 命令查看插件是否安裝成功:ide

$ helm3 plugin list

NAME    VERSION DESCRIPTION

2to3    0.1.1   migrate Helm v2 configuration and releases in-place to Helm v3

$ helm3 2to3

Migrate Helm v2 configuration and releases in-place to Helm v3

Usage:

  2to3 [command]

Available Commands:

  convert     migrate Helm v2 release in-place to Helm v3

  help        Help about any command

  move        migrate Helm v2 configuration in-place to Helm v3

Flags:

  -h, --help   help for 2to3

Use "2to3 [command] --help" for more information about a command.

到這裏就證實咱們的 helm-2to3 插件已經安裝成功了。工具

插件特性

如今插件支持的功能主要有兩個部分:測試

  • 遷移 Helm V2 配置

  • 遷移 Helm V2 release

接下來咱們就來分別操做下。

遷移 Helm V2 配置

首先咱們須要遷移 Helm V2 版本的相關配置和數據目錄:

$ helm3 2to3 move config

[Helm 2] Home directory: /Users/ych/.helm

[Helm 3] Config directory: /Users/ych/Library/Preferences/helm

[Helm 3] Data directory: /Users/ych/Library/helm

[Helm 3] Create config folder "/Users/ych/Library/Preferences/helm" .

[Helm 3] Config folder "/Users/ych/Library/Preferences/helm" created.

[Helm 2] repositories file "/Users/ych/.helm/repository/repositories.yaml" will copy to [Helm 3] config folder "/Users/ych/Library/Preferences/helm/repositories.yaml" .

[Helm 2] repositories file "/Users/ych/.helm/repository/repositories.yaml" copied successfully to [Helm 3] config folder "/Users/ych/Library/Preferences/helm/repositories.yaml" .

[Helm 3] Create data folder "/Users/ych/Library/helm" .

[Helm 3] data folder "/Users/ych/Library/helm" created.

[Helm 2] plugins "/Users/ych/.helm/plugins" will copy to [Helm 3] data folder "/Users/ych/Library/helm/plugins" .

[Helm 2] plugins "/Users/ych/.helm/plugins" copied successfully to [Helm 3] data folder "/Users/ych/Library/helm/plugins" .

[Helm 2] starters "/Users/ych/.helm/starters" will copy to [Helm 3] data folder "/Users/ych/Library/helm/starters" .

[Helm 2] starters "/Users/ych/.helm/starters" copied successfully to [Helm 3] data folder "/Users/ych/Library/helm/starters" .

上面的操做會遷移:

  • Chart starters

  • Chart 倉庫

  • 插件
不過須要注意的是,請檢查下全部的 Helm V2 下面的插件是否可以在 Helm V3 下面正常工做,把不起做用的插件刪除便可。

如今咱們再查看下 Chart 倉庫信息:

$ helm3 repo list

NAME            URL

stable          http://mirror.azure.cn/kubernetes/charts/

local           http://127.0.0.1:8879/charts

$ helm3 plugin list

NAME    VERSION DESCRIPTION

2to3    0.1.1   migrate Helm v2 configuration and releases in-place to Helm v3

push    0.7.1   Push chart package to ChartMuseum

上面的 move config 命令會建立 Helm V3 配置和數據目錄(若是它們不存在),並將覆蓋 repositories.yaml文件(若是存在)。

此外,該插件還支持將非默認的 Helm V2 主目錄以及 Helm V3 配置和數據目錄,使用以下配置使用便可:

$ export HELM_V2_HOME=$HOME/.helm2

$ export HELM_V3_CONFIG=$HOME/.helm3

$ export HELM_V3_DATA=$PWD/.helm3

$ helm3 2to3 move config

遷移 Helm V2 Release

如今咱們能夠開始遷移 releases 了。能夠使用以下命令查看下命令的可用選項:

$ helm3 2to3 convert -h

migrate Helm v2 release in-place to Helm v3

Usage:

  2to3 convert [flags] RELEASE

Flags:

      --delete-v2-releases       v2 releases are deleted after migration. By default, the v2 releases are retained

      --dry-run                  simulate a convert

  -h, --help                     help for convert

  -l, --label string             label to select tiller resources by (default "OWNER=TILLER")

  -s, --release-storage string   v2 release storage type/object. It can be 'secrets' or 'configmaps'. This is only used with the 'tiller-out-cluster' flag (default "secrets")

  -t, --tiller-ns string         namespace of Tiller (default "kube-system")

      --tiller-out-cluster       when  Tiller is not running in the cluster e.g. Tillerless

能夠看到最後的 --tiller-out-cluster 參數,甚至支持 Tillerless Helm v2。

如今咱們來查看下 Helm V2 下面的 release,而後選擇一個來測試下遷移:

$ helm list

NAME        REVISION    UPDATED                     STATUS      CHART               APP VERSION NAMESPACE

minio        1           Wed Sep 11 11:47:51 2019    DEPLOYED    minio-2.5.13    RELEASE.2019-08-07T01-59-21Z    argo

redis       1           Wed Sep 11 14:52:57 2019    DEPLOYED    redis-9.1.7         5.0.5       redis

上面咱們也看到該遷移命令支持 --dry-run選項,固然最安全的方式是先使用下該參數測試下效果:

$ helm3 2to3 convert --dry-run minio

NOTE: This is in dry-run mode, the following actions will not be executed.

Run without --dry-run to take the actions described below:

Release "minio" will be converted from Helm 2 to Helm 3.

[Helm 3] Release "minio" will be created.

[Helm 3] ReleaseVersion "minio.v1" will be created.

咱們能夠查看上面的 dry-run模式下面的一些描述信息,沒有什麼問題的話就能夠真正的來執行遷移操做了:

$ helm3 2to3 convert minio

Release "minio" will be converted from Helm 2 to Helm 3.

[Helm 3] Release "minio" will be created.

[Helm 3] ReleaseVersion "minio.v1" will be created.

[Helm 3] ReleaseVersion "minio.v1" created.

[Helm 3] Release "minio" created.

Release "minio" was converted successfully from Helm 2 to Helm 3. Note: the v2 releases still remain and should be removed to avoid conflicts with the migrated v3 releases.

遷移完成後,而後檢查下是否成功了:

$ helm list

NAME        REVISION    UPDATED                     STATUS      CHART               APP VERSION NAMESPACE

minio        1           Wed Sep 11 11:47:51 2019    DEPLOYED    minio-2.5.13    RELEASE.2019-08-07T01-59-21Z    argo

redis       1           Wed Sep 11 14:52:57 2019    DEPLOYED    redis-9.1.7         5.0.5       redis

$ helm3 list

NAME     NAMESPACE   REVISION    UPDATED                                 STATUS      CHART

咱們能夠看到執行 helm3 list命令並無任何 release 信息,這是由於咱們遷移的 minio 這個 release 是被安裝在 argo這個命名空間下面的,因此須要指定命名空間才能夠看到:

$ helm3 list -n argo

NAME     NAMESPACE   REVISION    UPDATED                                 STATUS      CHART

minio    argo        1           2019-09-11 03:47:51.239461137 +0000 UTC deployed    minio-2.5.13
注意:因爲咱們沒有指定 --delete-v2-releases選項,因此 Helm V2 minio 這個 release 信息仍是存在的,咱們能夠在之後使用 kubectl 進行刪除。

當你準備好遷移你全部的 releases 的時候,你能夠循環 helm list裏面的全部 release 來自動的將每一個 Helm V2 release 遷移到 Helm V3 版本去。

若是你正在使用 Tillerless Helm V2,只須要指定 --tiller-out-cluster選項來遷移 release 便可:

$ helm3 2to3 convert minio --tiller-out-cluster

清理 Helm V2 數據

最後固然就是清理以前版本的舊數據了,雖然這並非必須的,可是仍是建議你清理下,能夠避免一些衝突。清理 Helm V2 的數據比較簡單:

  • 刪除主文件夾 ~/.helm

  • 若是你沒有使用 --delete-v2-releases選項,那麼舊使用 kubectl 工具來刪除 Tiller releases 數據

  • 卸載掉煩人的 Tiller

Happy Helm v3 sailing~

原文連接:https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/

Helm V2 遷移到 V3 版本

相關文章
相關標籤/搜索