Helm V2 サーバーの Tiller がもたらす潜在的なセキュリティリスクを排除するため、Helm V2 を Helm V3 にアップデートすることを推奨します。そうしない場合、攻撃者が Tiller を利用してクラスターに不正なアプリケーションをインストールしたり、より多くの Helm 機能を不正に利用したりする可能性があります。このトピックでは、Helm V2 を Helm V3 にアップデートする方法について説明します。
アップグレードと移行の手順
このセクションでは、Helm V3.3.0 を例に、Helm V2 をアップデートする方法を説明します。Helm のバージョンに関する詳細については、Helm をご参照ください。
アプリケーションを再インストールできる場合は、アプリケーションを削除してから再インストールすることも可能です。詳細については、Helm V2 Tiller のアップグレードに関するお知らせをご参照ください。
次のコマンドを実行して Helm V3 をインストールします。
wget https://get.helm.sh/helm-v3.3.0-linux-amd64.tar.gz tar -xzvf helm-v3.3.0-linux-amd64.tar.gz mv linux-amd64/helm /usr/local/bin/helm helm version期待される出力:
version.BuildInfo{Version:"v3.3.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a****", GitTreeState:"clean", GoVersion:"go1.13.4"}次のコマンドを実行して Helm 2to3 プラグインをインストールします。
このステップでは、ack-node-local-dns チャートを例として使用します。
git clone https://github.com/helm/helm-2to3.git helm plugin install ./helm-2to3次のコマンドを実行して ack-node-local-dns チャートを Helm V3 に変換します。
helm 2to3 convert ack-node-local-dns --delete-v2-releases期待される出力:
2022/12/27 17:12:50 Release "ack-node-local-dns" will be converted from Helm v2 to Helm v3. 2022/12/27 17:12:50 [Helm 3] Release "ack-node-local-dns" will be created. 2022/12/27 17:12:50 [Helm 3] ReleaseVersion "ack-node-local-dns.v1" will be created. 2022/12/27 17:12:50 [Helm 3] ReleaseVersion "ack-node-local-dns.v1" created. 2022/12/27 17:12:50 [Helm 3] Release "ack-node-local-dns" created. 2022/12/27 17:12:50 [Helm 2] Release "ack-node-local-dns" will be deleted. 2022/12/27 17:12:50 [Helm 2] ReleaseVersion "ack-node-local-dns.v1" will be deleted. 2022/12/27 17:12:50 [Helm 2] ReleaseVersion "ack-node-local-dns.v1" deleted. 2022/12/27 17:12:50 [Helm 2] Release "ack-node-local-dns" deleted. 2022/12/27 17:12:50 Release "ack-node-local-dns" was converted successfully from Helm v2 to Helm v3.
Helm V2 のアップデートに関するよくある質問
apiVersion の不整合による「Resource already exists」エラー
問題
クラスターをアップデートした後、Helm V2 を更新すると、rendered manifests contain a new resource that already exists. Unable to continue with update: existing resource conflict: kind: MutatingWebhookConfiguration, namespace: , name: mse-pilot-ack-mse-pilot というプロンプトが表示されます。
原因
Kubernetes バージョンが 1.22 以降のクラスターでは v1beta1 はサポートされなくなりました。v1beta1 は、それ以前の Kubernetes バージョンでは引き続きサポートされています。クラスターをアップデートした後に、上記のエラーが返されることがあります。
解決策
リソースの API バージョンを更新します。詳細については、helm-mapkubeapis を使用した Kubernetes リソースの API バージョンのインプレースアップグレードをご参照ください。
Helm V2 を V3 にアップデートした後、チャートの更新時にエラーが返される場合の対処法
問題
Helm V2 から V3 に移行した後、チャートのバージョン (例:v1.3.5 から v1.5.3) をアップグレードする際に、err: rendered manifests contain a resource that already exists. Unable to continue with update: MutatingWebhookConfiguration \"ack-node-local-dns-admission-controller\" in namespace \"\" exists and cannot be imported into the current release: invalid ownership metadata; label validation error: missing key \"app.kubernetes.io/managed-by\": must be set to \"Helm\"; annotation validation error: missing key \"meta.helm.sh/release-name\": must be set to \"ack-node-local-dns\" というエラーが発生します。
原因
チャートに Helm の所有権がありません。
解決策
この問題を解決するには、次のいずれかの方法を使用できます。
対応する Helm リリースにリソースを割り当てます。
次のコマンドを実行して設定ファイルを編集します。
kubectl edit MutatingWebhookConfiguration ack-node-local-dns-admission-controller次の
annotationsとlabelsをリリースに追加します。annotations: meta.helm.sh/release-name: ack-node-local-dns meta.helm.sh/release-namespace: kube-system labels: app.kubernetes.io/managed-by: Helm
次のコマンドを実行してリソースを削除します。
kubectl delete MutatingWebhookConfiguration ack-node-local-dns-admission-controller