Helm を使用したデプロイ
ステージング イメージと運用イメージの両方を正常にビルドし、Azure Container Registry インスタンスにプッシュしました。 すべてのステップを自動化し、パイプラインを動作させることができるようになりました。
現時点では、パイプラインを実行するたびにファイルを手動で変更する必要があるため、自動的にデプロイすることはできません。 この問題を解決するには、Helm Chart を使ってデプロイを管理します。 このユニットでは、Helm Chart とテンプレートについて説明します。
Helm チャート
Helm は、APT や Yum などの Linux パッケージ マネージャーに似たオープンソースのパッケージ ツールです。 Helm は、Kubernetes アプリケーションのインストールとライフサイクルの管理に役立ちます。
Helm を使って Kubernetes チャート (構成ファイルとチャートの説明ファイルと共にパッケージ化された 1 つ以上のワークロードのグループ) を管理します。 チャートにパッケージ化することで、ファイルを 1 つの単位として Kubernetes クラスターに簡単にデプロイできます。
Helm を使う利点の 1 つは、ファイルを個別にデプロイする必要がないことです。 1 つのコマンドを発行してチャートをデプロイできます。 依存関係を自動的に解決することで、複数の依存するチャートをデプロイすることさえできます。
一般的な Helm Chart のディレクトリの構造を次に示します。
- Chart.yaml ファイルには、チャートの名前、説明、バージョンが含まれています。
- charts ディレクトリには、依存するチャートが含まれています。
- templates ディレクトリには、すべてのマニフェスト ファイルが含まれています。
- values.yaml ファイルには、Helm テンプレートの既定値が含まれています。
Helm テンプレート
Helm ツールの注目すべき特徴は、自動デプロイを実行するためのテンプレートを作成し、管理できることです。 テンプレートを使うと、マニフェスト ファイルを自動化し、CI/CD パイプラインに追加できます。 テンプレート ファイルは、変数値のためのプレースホルダーが含まれるマニフェスト ファイルです。
Web サイト フォークの kubernetes ディレクトリ内にある deployment.yaml ファイルの例を次に示します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: contoso-website
spec:
selector:
matchLabels:
app: contoso-website
template:
metadata:
labels:
app: contoso-website
spec:
containers:
- image: !IMAGE!
name: contoso-website
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
ports:
- containerPort: 80
name: http
実際のワークフローでは、!IMAGE!
プレースホルダーをお使いの Container Registry インスタンスとイメージ名に置き換えます。 手動ワークフローでは、次のコマンドを実行して !IMAGE!
プレースホルダーを置き換えてから、結果を出力できます。 コードを手動で実行するには、コマンドを kubectl apply -f -
にパイプ処理してワークロードを作成します。
$ sed 's+!IMAGE!+'"$ACR_NAME"'/contoso-website+g' kubernetes/deployment.yaml
しかし、この手動ソリューションはスムーズでなく、効率的ではありません。 Helm ネイティブ テンプレートを使うと、代わりに {{.Values.containerImage}}
変数を使って !IMAGE!
を置き換えることができます。
...
template:
...
spec:
containers:
- image: {{.Values.containerImage}}
...
次に、helm install
を実行してイメージを指定し、charts フォルダーを渡します。
$ helm install contoso-website ./chart-location --set containerImage="$ACR_NAME/contoso-website"
Helm には、環境に既定値や必須の値を含めるなど、より複雑なロジック用のテンプレート関数も用意されています。 Helm Chart を作成し、CI/CD パイプラインをより効率的にするには、次のユニットに進んでください。