Helm v2 から v3 で何が変わるの?


この記事はHelm v2とHelm v3の違いを調査したまとめです。

背景

Helm v3がリリースされてから半年余りが経ちました。
しかしWebや書籍ではまだHelm v2の情報が多く、初学者にやさしくない為、重要な部分をまとめてみました。

Helm v2からの変更点

Helm公式-よくある質問より、変更点を一覧にしました。
 

  • Tillerの削除
  • 3 ways マージパッチ
  • リリース名の範囲がnamespaceになった
  • secretがデフォルトのストレージドライバーになった
  • Goのimportパスが[k8s.io/helm]から[helm.sh/helm/v3]になった
  • .Capabilitiesのレンダリング組み込みオブジェクトが簡素化された
  • リリース名の範囲がnamespaceになった
  • jsonスキーマを使用したチャート値の検証
  • requirements.yaml → Chart.yaml
  • requirements.lock → Chart.lock
  • インストール時にリリース名が必須になった
  • OCIレジストリへのchartのpush機能が追加された(実験的)
  • helm serveが削除された
  • Chart.yamlのapiVersionがv1からv2になった
  • XDGベースディレクトリのサポート
  • CLIコマンドの統合と名前変更
  • [--create-namespace]フラグで指定しないとnamespaceの自動作成されなくなった

変更点が多いですね。

この中でも特に大切な3点「Tillerの削除」「リリース名の範囲がnamespaceになった」「CLIコマンドの統合と名前変更」について詳しく見ていきましょう。

Tillerの削除

Helm v2までは、KubernetesクラスタへTillerポッドをデプロイする必要がありました。

Helm v2の動作が以下の流れで実現しているからです。

  1. Helm コマンドを実行する
  2. HelmClientがTillerポッドにgRPCプロトコルでやりとりを行う
  3. TillerポッドがREST APIでkube-apiserverに指令を伝達する
  4. kube-apiserverがKubernetesリソースの操作を行う

Helm v3では以下のようになりました。

  1. Helmコマンドを実行する
  2. HelmClientがkube-apiserverに指令を伝達する
  3. kube-apiserverがKubernetesリソースの操作を行う

Helm v3では、kube-apiserverに対する認証情報はkubectlと同じ、kubeconfigを利用します。
(デフォルトだと$HOME/.kube/config)

これによって、kubectlが利用できる環境にHelm v3を導入するだけで、kubectlと同じ権限でKubernetesクラスタにアクセスすることが可能になりました。

リリース名の範囲がnamespaceになった

最も影響ある部分でいうと、helm listコマンドのみではすべてのリリースが表示されなくなったということです。
helm v3のhelm listコマンドでは現在のnamespaceのリリースのみが表示されます。

helm v2のように全てのnamespaceを参照したい場合は[--all-namespace]フラグが必要です。

以下詳しく説明します。

Helm v2では、リリースに関する情報はTillerと同じnamespaceに格納されていたようです。
そのため、リリース名が別のnamespaceにデプロイされていても、同じリリース名を使用することができませんでした。

Helm v3ではリリース名含めた情報はリリースと同じnamespaceに格納されるようになっています。
これによって別のnamespace上で同じリリース名を使用できるようになりました。

その代わり、namespaceを指定しないとリリース名が表示されなくなってしまったというわけです。

CLIコマンドの統合と名前変更

一番の初学者躓きポイントです。
色々な記事で解説されているコマンドがそのままでは利用できなくなっていることが多いです。

表でまとめてみました。

Helm v2 Helm v3
delete(--purge) uninstall(デフォルトですべてのリリース履歴を削除)
fetch pull
home 削除
init 削除
install リリース名もしくは(--generate-name)が必須に
inspect show
reset 削除
serve 削除
temprate -x/--executeオプションが-s/--show-onlyに変更
upgrade --history-maxオプション追加

これは初学者でなくても、ドキュメントを読み替えるのちょっと大変そうですね。

おわりに

Helm V2とHelm V3では内部の動作が大きく変わっていることが分かりました。
Web上や書籍にはまだまだHelm v2の内容が多いので、
つまづいたらまずは自環境のHelmのバージョンドキュメントのHelmのバージョンをチェックしてみてください。
スムーズに学習するためには一旦Helm v2を利用するのもいいかもしれません。

また、弊社WebサイトにてHelm v3を使って[prometheus-operator]を導入した手順を公開していますので、Helm v3を試してみたい方はぜひご覧ください。
https://bit.ly/36CyaBP