Kubernetesやクラウドネイティブをより便利に利用する技術やツールの概要、使い方を凝縮して紹介する連載。今回は、Helmチャートを作成して、リポジトリに公開する方法などについて。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
Kubernetesやクラウドネイティブをより便利に利用する技術やツールの概要、使い方を凝縮して紹介する本連載「Cloud Nativeチートシート」。
前回は概要や使い方といった、ユーザー目線でKubernetes向けのパッケージマネジャー「Helm」(ヘルム)を紹介しましたが、今回はHelmチャートを作成して、リポジトリに公開する方法など提供者目線で紹介します。
前回紹介したように、Helmでは「チャート」という設定ファイル群でKubernetesの全てのマニフェストを管理します。公開されているリポジトリからチャートをカスタマイズしながらインストール(デプロイ)できます。それに加えて、自身のアプリケーションをチャートとして公開することもできます。
公開することで、自身のアプリケーションを稼働させるために必要なリソース群を、第三者のユーザーにも容易に一括でデプロイし管理してもらうことができます。また、環境によってカスタマイズしてほしい箇所のみを「values.yaml」として切り出すことができます。これらによって、より広くアプリケーションの活用を促すことができます。
前回記事最後の補足で、チャートについて簡単に説明しました。
チャートの実体は「.tgz」形式で圧縮された複数ファイル群です。詳しくは次回、チャート作成を説明する際に解説しますが、tgzを解凍すると、チャートには環境共通のKubernetesリソースYAMLのテンプレートを配置する「templates」ディレクトリ、テンプレート内で変数化されているパラメーターのデフォルト値を定義するYAMLファイル(values.yaml)などが含まれます。
もう少し詳しくファイルの構成を見ていきましょう。「helm create」コマンドでサンプルのチャートを作成できるので確認します。
$ helm create test-chart Creating test-chart $ tree test-chart/ test-chart/ ├── values.yaml ├── templates │ ├── NOTES.txt │ ├── _helpers.tpl │ ├── deployment.yaml │ ├── hpa.yaml │ ├── ingress.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── tests │ └── test-connection.yaml ├── Chart.yaml └── charts
ディレクトリやファイルが幾つか作成されたのを確認できました。それぞれの要素を説明します。
「values.yaml」にはマニフェストテンプレート内で使う変数(後述)の定義が記載されています。
前回説明した通り、Helmでは「パラメーター」として定義されている値を指定することで、それぞれの利用者の環境向けにカスタマイズできます。例えば、「Deployment」のレプリカ数を変更したり、デプロイされるコンポーネントをコンポーネントごとに有効/無効にしたりするなどのカスタマイズが挙げられます。
「templates」ディレクトリ下には主にKubernetesリソースのマニフェストテンプレートを配置します。テンプレートとは、言葉の通り、最終的にKubernetesに送られるマニフェストの元となるファイルです。テンプレートのベースはマニフェストYAMLですが、要所を変数化しておくことで後からカスタマイズ可能にしておきます。
helmコマンド実行時にテンプレートエンジンに送られ、values.yaml内の変数定義を展開して、最終的なマニフェストが生成され、最終的にKubernetesに送信されます。
※「NOTES.txt」とファイル名が「_」から始まるファイル(ヘルパーファイル)はテンプレートエンジンには送られません。
templatesディレクトリには、下記のようにマニフェストテンプレートなど数種類のファイルが含まれています。
├── templates │ ├── NOTES.txt # helm install/upgrade時のNOTES:定義 │ ├── _helpers.tpl # ヘルパーファイル │ ├── deployment.yaml # マニフェストテンプレート │ ├── hpa.yaml # マニフェストテンプレート │ ├── ingress.yaml # マニフェストテンプレート │ ├── service.yaml # マニフェストテンプレート │ ├── serviceaccount.yaml # マニフェストテンプレート │ └── tests # helm testコマンドで実行されるtest用のリソース定義 │ └── test-connection.yaml
ここからそれぞれのファイルについて説明します。
Copyright © ITmedia, Inc. All Rights Reserved.