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 アプリなどのグラフの追加要件を指定できます。
注
すべての省略可能なフィールドの詳細については、このモジュールの範囲外です。 ただし、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 クライアントを使用して Helm リポジトリを構成し、 helm repo add
コマンドを使用してリポジトリからグラフをインストールします。
たとえば、次のコマンドを実行して、ローカル Helm クライアントに Azure Marketplace 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 には、テンプレート エンジンがグラフから作成するマニフェスト ファイルを生成するためのオプションが用意されています。 この機能を使用すると、 --dry-run
と debug
の 2 つの追加パラメーターを組み合わせることで、リリース前にグラフをテストできます。
--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
) が含まれています。