この記事は GRIPHONE Advent Calendar 2019 3日目の記事です。
SREの徳田です。
今回はhelmのバージョン3がリリースされて、Tillerがなくなったぞ!!とコミュニティーで大歓喜しているようです。helmはあまり触ってなかったのですが、情報のキャッチアップということでhelm3の新機能や変更点についてまとめてみます。
helm3の新機能
Chart.yamlの変更
apiVersionがv2に
helm2ではv1でしたがhelm3からv2になりました。
typeフィールドが追加
helm3ではChart開発者向けに関数やユーティリティを提供できるLibraryと今まで記述していたApplicationを作成することができるようになりました。
この2つを指定するためのフィールドであるtypeが追加されています。
dependenciesフィールドが追加
helm2ではChartの依存をrequirements.yamlに記述していました。helm3からはdependenciesフィールドに記述するようになりました。
(helm-classicではあったようですが、一回消されてまた戻ってきたみたいです・・・。)
値のバリデーション機能が追加
Chartにvalues.schema.jsonを作成し、values.yamlのスキーマを定義することで、以下のコマンド実行時にバリデーションが実行されるようになりました。
- helm install
- helm upgrade
- helm template
- helm lint
Chartリポジトリについて
Helm Hub
Chartリポジトリを公開できるサービスができたようです。
DockerイメージでいうとこのDockerhubですね。
Helm Hub向けの検索コマンドの追加
Chartの検索には 「helm search」コマンドがありましたが、サブコマンドが追加されました。
- hub : helm hubのリポジトリを検索
- repo: 登録されたリポジトリを検索(既存のもの)
アップグレード戦略の向上
マージや更新時の比較の際、helm2では更新前と最新のChart Manifestの比較でしたが、それに加えてhelm3ではクラスタにあるChart Manifestも比較するようになりました。
OCIレジストリのサポート
こちらはまだ実験的な機能のようが、OCIレジストリにChartを保存・共有することができるようです。
「HELM_EXPERIMENTAL_OCI」という環境変数に1をセットすることで機能を有効化することができます。
機能の変更はこんなところでした。
次はアーキテクチャに関する変更を見ていきましょう。
アーキテクチャの変更
Tillerの削除
これが一番の変更だといっても過言ではないでしょう!
helm2の操作は基本Tillerが行っていましたが、helm3からはcliが直接KubernetesのAPIを操作するようになりました。
これにより、helm initコマンドは削除されました。
リリースストレージの変更
helm2まではTillerと同じNamespaceにConfigMapとしてReleaseを保存していましたが、helm3からはリリースしたアプリケーションと同じNamespaceにSecretとして保存するようになりました。
また、中に保存されているReleaseオブジェクトにも変更がありました。
CRDについての変更
CRDはインストールのみサポートするようになりました。変更や削除はサポートしていません。
ChartのcrdsフォルダにCRDのManifestを入れておくことで自動的に適用されます。この動作は–skip-crdsオプションを使用して飛ばすことができます。
これによりcrd-installフックは無視されWarningが出力されます。
新しいGoのSDKの提供
見出しのとおりです。以下のパッケージを見ておくと良さそう。
- pkg/action
- pkg/{chart,chartutil}
- pkg/cliとそのサブパッケージ
helm3のCLIも同じSDKを使って実装されています。
helm2からの移行について
これだけの変更があると移行が大変そうですね。そんな方も安心!helm-2to3というプラグインがあります!このプラグインは
- helm2の設定の移行
- helm2のReleaseの移行
- helm2の設定とReleaseの削除とTillerの削除
を行ってくれます。
このプラグインはあくまでもクラスタにある情報を移行するものであって、Chartについては自分で変更する必要があります。😢
まとめ
ざっくりまとめると、
- Chart.yamlの変更
- Valuesのバリデーションの追加
- helm hubのリリース
- Tillerの削除
- 新しいGoのSDK
- 移行用のhelm-2to3プラグイン
こんな感じでしょうか。Tiller削除、やはり大きいですね!
最後に
helm3についての新機能や変更点をまとめてみました。
正直helmを使った運用を本気で考えてた方々はTillerを使わずhelm templateだけで頑張ってたのではないか、と個人的には思います😅
また、新しいフィールドやCRDの導入方法の変更で既存のチャートが動かくなってそうで運用している方は大変そうですね。(他人事)
個人的には今回のアップデートで良い感じなったhelmとkustomizeをもう一度機能を比べてしっかり比較したいなと思っております!
それでは!!