Helm チャートを作成してインストールする
Helm チャートを使うと、アプリケーションを任意の Kubernetes クラスターに簡単にデプロイできます。 Helm を使って、アプリケーションのデプロイ情報を Helm チャートとしてテンプレート化します。これは、アプリケーションをデプロイするために使用します。
たとえば、開発チームが既に会社のペット ストア Web サイトを AKS クラスターにデプロイしているとします。 チームは、Web サイトにデプロイするファイルを 3 つ作成します。
- クラスター上にアプリケーションをインストールして実行する方法を記述する "配置マニフェスト"、
- クラスター上で Web サイトを公開する方法を記述する "サービス マニフェスト"、そして
- クラスターの外部からのトラフィックが Web アプリにどのようにルーティングされるかを記述する "イングレス マニフェスト"。
チームは、これらのファイルをソフトウェア開発ライフ サイクルの一部として、3 つそれぞれの環境に向けてデプロイします。 3 つのファイルはそれぞれ、環境に固有の変数と値で更新されます。 各ファイルはハードコーディングされているため、これらのファイルのメンテナンスでエラーが発生しやすくなります。
Helm でのチャートの処理方法
Helm クライアントによって、チャートのフォルダー内の使用可能なすべてのファイルを解析する Go 言語ベースのテンプレート エンジンが実装されます。 そのテンプレート エンジンによって、チャートの templates/
フォルダー内のテンプレートと、Chart.yaml
および values.yaml
ファイルからの値が組み合わされ、Kubernetes マニフェスト ファイルが作成されます。
マニフェスト ファイルが使用できるようになると、生成されたマニフェスト ファイルで定義されているアプリケーションを、クライアントでインストール、アップグレード、および削除することができます。
Chart.yaml
ファイルを定義する方法
Chart.yaml
は、Helm チャート定義内の必須ファイルの 1 つであり、チャートに関する情報が提供されます。 ファイルの内容は、3 つの必須フィールドとさまざまな省略可能なフィールドで構成されています。
3 つの必須フィールドは次のとおりです。
apiVersion
:使うチャート API のバージョン。 Helm 3 を使うチャートの場合は、バージョンをv2
に設定にします。name
:チャートの名前。version
:チャートのバージョン番号。セマンティック バージョン管理 2.0.0 を使い、MAJOR.MINOR.PATCH
バージョン番号表記に従います。
次の例は、基本的な Chart.yaml
ファイルの内容を示しています。
apiVersion: v2
name: webapp
description: A Helm chart for Kubernetes
# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore, cannot be deployed.
type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
version: 0.1.0
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application.
appVersion: 1.0.0
サンプル ファイルの type
フィールドの使い方に注目してください。 チャートを作成して、アプリケーションまたはライブラリをインストールできます。 既定のチャートの種類は application
で、library
に設定して、チャートによってライブラリがインストールされるように指定することができます。
チャートのデプロイ プロセスを調整するために、多くの省略可能なフィールドを使用できます。 たとえば、dependencies
フィールドを使用して、データベースに依存する Web アプリなど、チャートに追加の要件を指定できます。
Note
省略可能なすべてのフィールドの詳細については、このモジュールの範囲外です。 しかし、Helm ドキュメントへのリンクはモジュールのまとめのセクションにあります。
チャート テンプレートを定義する方法
Helm チャート テンプレートは、さまざまなデプロイの種類のマニフェスト ファイルを記述するファイルです。 チャート テンプレートは Go テンプレート言語で記述され、Kubernetes オブジェクト マニフェスト ファイルの作成を自動化するためのテンプレート関数が用意されています。
テンプレート ファイルは、チャートの templates/
フォルダーに格納されます。 テンプレート エンジンは、これらのファイルを処理して最終的なオブジェクト マニフェストを作成します。
たとえば、開発チームが次の配置マニフェスト ファイルを使って、ソリューションのペット ストア フロント コンポーネントをデプロイするとします。
apiVersion: apps/v1
kind: Deployment
metadata:
name: store-front
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: store-front
template:
metadata:
labels:
app: store-front
spec:
nodeSelector:
"kubernetes.io/os": linux
containers:
- name: store-front
image: {{ .Values.storeFront.image.repository }}:{{ .Values.storeFront.image.tag }}
ports:
- containerPort: 8080
name: store-front
env:
- name: VUE_APP_ORDER_SERVICE_URL
value: "http://order-service:3000/"
- name: VUE_APP_PRODUCT_SERVICE_URL
value: "http://product-service:3002/"
resources:
requests:
cpu: 1m
memory: 200Mi
limits:
cpu: 1000m
memory: 512Mi
startupProbe:
httpGet:
path: /health
port: 8080
failureThreshold: 3
initialDelaySeconds: 5
periodSeconds: 5
readinessProbe:
httpGet:
path: /health
port: 8080
failureThreshold: 3
initialDelaySeconds: 3
periodSeconds: 3
livenessProbe:
httpGet:
path: /health
port: 8080
failureThreshold: 5
initialDelaySeconds: 3
periodSeconds: 3
---
apiVersion: v1
kind: Service
metadata:
name: store-front
spec:
type: {{ .Values.storeFront.serviceType }}
ports:
- port: 80
targetPort: 8080
selector:
app: store-front
コンテナー イメージの場所が {{.Values.<property>}}
構文を使ってハードコーディングされていることに注目してください。 この構文を使用すると、カスタム値ごとにプレースホルダーを作成できます。
手動での Helm チャートの作成プロセスは面倒です。 Helm チャートを作成する簡単な方法は、helm create
コマンドを使用して新しい Helm チャートを作成することです。 その後、ご利用のアプリケーションの要件に合わせて自動生成されたファイルをカスタマイズします。
values.yaml
ファイルを定義する方法
チャート値を使用して、Helm チャートの構成をカスタマイズします。 チャート値は、事前に定義することも、チャートのデプロイ時にユーザーが指定することもできます。
定義済みの値は、大文字と小文字が区別される値であり、Helm チャートのコンテキストで事前に定義され、ユーザーが変更することはできません。 たとえば、Release.Name
を使用して、リリースの名前を参照したり、Release.IsInstall
を使用して、現在の操作がインストールであるかどうかを確認したりすることができます。
また、定義済みの値を使って、Chart.yaml
の内容からデータを抽出することもできます。 たとえば、チャートのバージョンを確認する必要がある場合は、Chart.Version
を参照します。 参照できるのは既知のフィールドのみであることにご注意ください。 定義済みの値は、作成するテンプレートで使用する定数と考えることができます。
テンプレート ファイルに値の名前を含める構文では、値の名前を二重中かっこで囲みます (例: {{.Release.Name}}
)。 値の名前の前にピリオドが使用されていることに注目してください。 このようにピリオドを使用する場合、そのピリオドは検索演算子として機能し、変数の現在のスコープを示します。
たとえば、次の YAML スニペットには、値ファイルで定義されている辞書が含まれています。
object:
key: value
テンプレートの値にアクセスするために、次の構文を使用できます。
{{ .Values.object.key }}
指定された値を使用すると、チャート テンプレートの任意の値を処理できます。 これらの値は、values.yaml
ファイルによって定義されます。
この例では、開発チームは次の構成可能な値を許可しています。
apiVersion: apps/v1
kind: Deployment
metadata:
name: store-front
spec:
replicas: {{ .Values.replicaCount }}
...
containers:
- name: store-front
image: {{ .Values.storeFront.image.repository }}:{{ .Values.storeFront.image.tag }}
ports:
...
---
apiVersion: v1
kind: Service
metadata:
name: store-front
spec:
type: {{ .Values.storeFront.serviceType }}
...
values.yaml
ファイルの例を次に示します。
...
replicaCount: 1
...
storeFront:
image:
repository: "ghcr.io/azure-samples/aks-store-demo/store-front"
tag: "latest"
serviceType: LoadBalancer
...
テンプレート エンジンによって値が適用されると、最終的な結果はこの例のようになります。
apiVersion: apps/v1
kind: Deployment
metadata:
name: store-front
spec:
replicas: 1
...
containers:
- name: store-front
image: ghcr.io/azure-samples/aks-store-demo/store-front:latest
ports:
---
apiVersion: v1
kind: Service
metadata:
name: store-front
spec:
type: LoadBalancer
...
Helm リポジトリの使用方法
Helm リポジトリは、Helm チャートに関する情報を格納する専用の HTTP サーバーです。 helm repo add
コマンドを使用して、リポジトリからチャートをインストールするように Helm クライアントで Helm リポジトリを構成します。
たとえば、次のコマンドを実行して、Azure Marketplace Helm リポジトリをローカル Helm クライアントに追加できます。
helm repo add azure-marketplace https://marketplace.azurecr.io/helm/v1/repo
リポジトリで使用可能なチャートに関する情報は、クライアント ホストにキャッシュされます。 helm repo update
コマンドを使ってリポジトリの最新情報をフェッチするには、キャッシュを定期的に更新する必要があります。
helm search repo
コマンドを使うと、ローカルに追加されたすべての Helm リポジトリのチャートを検索できます。 helm search repo
コマンドを単独で実行すると、追加された各リポジトリの既知のすべての Helm チャートの一覧を返すことができます。 その結果には、次の出力例に示すように、チャートの名前、バージョン、チャートによってデプロイされたアプリのバージョンが一覧表示されます。
NAME CHART VERSION APP VERSION DESCRIPTION
azure-marketplace/airflow 11.0.8 2.1.4 Apache Airflow is a platform to programmaticall...
azure-marketplace/apache 8.8.3 2.4.50 Chart for Apache HTTP Server
azure-marketplace/aspnet-core 1.3.18 3.1.19 ASP.NET Core is an open-source framework create...
azure-marketplace/bitnami-common 0.0.7 0.0.7 Chart with custom tempaltes used in Bitnami cha...
azure-marketplace/cassandra 8.0.5 4.0.1 Apache Cassandra is a free and open-source dist...
helm search repo
コマンドに検索語句を追加することで、特定のチャートを検索できます。 たとえば、ASP.NET ベースのチャートを検索する場合は、次のコマンドを使用できます。
helm search repo aspnet
この例では、次の出力例に示すように、ローカル クライアントには 2 つのリポジトリが登録されており、それぞれのリポジトリから結果が返されます。
NAME CHART VERSION APP VERSION DESCRIPTION
azure-marketplace/aspnet-core 1.3.18 3.1.19 ASP.NET Core is an open-source framework create...
bitnami/aspnet-core 1.3.18 3.1.19 ASP.NET Core is an open-source framework create...
Helm チャートをテストする方法
Helm には、チャートからテンプレート エンジンによって作成されるマニフェスト ファイルを生成するためのオプションが用意されています。 この機能を使うと、2 つの追加パラメーター --dry-run
と debug
を組み合わせて、リリース前にチャートをテストできます。 --dry-run
パラメーターにより、インストールが確実にシミュレートされ、--debug
パラメーターによって詳細出力が有効になります。
helm install --debug --dry-run my-release ./chart-name
このコマンドにより、使用された値と生成されたすべてのファイルに関する情報が一覧表示されます。 生成されたすべての出力を表示するために、スクロールが必要な場合があります。
Helm チャートをインストールする方法
チャートをインストールするには、helm install
コマンドを使用します。 次のいずれかの場所から Helm チャートをインストールできます。
- チャートのフォルダー
- パッケージ化された
.tgz
tar アーカイブ チャート - Helm リポジトリ
しかし、必須パラメーターはチャートの場所によって異なります。 いずれの場合も、install
コマンドには、インストールするチャートの名前と、インストール時に作成されるリリースの名前が必要です。
ファイルのアンパックされたチャート フォルダーまたはパックされた .tgz
tar アーカイブを使用して、ローカル チャートをインストールできます。 チャートをインストールするために、helm
コマンドによって、チャートの場所についてローカル ファイル システムが参照されます。 アンパックされたチャートのリリースをデプロイするインストール コマンドの例を次に示します。
helm install my-release ./chart-name
上の例では、my-release
パラメーターはリリースの名前であり、./chart-name
パラメーターはアンパックされたチャート パッケージの名前です。
パックされたチャートのファイル名を参照することで、パックされたチャートがインストールされます。 次の例は、tar アーカイブとして現在パックされているのと同じアプリケーションの構文を示しています。
helm install my-release ./chart-name.tgz
Helm リポジトリからチャートをインストールする場合は、チャートの名前としてチャート参照を使用します。 次の例に示すように、チャート参照には、リポジトリ名とチャートの名前という 2 つのパラメーターが含まれています。
helm install my-release repository-name/chart-name
この例の repository-name/chart-name
パラメーターには、リポジトリの参照である repository-name
と、チャートの名前である chart-name
が含まれています。