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 のディレクトリの構造を次に示します。

Screenshot that shows an example of a Helm chart tree.

  • 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 パイプラインをより効率的にするには、次のユニットに進んでください。

自分の知識をチェックする

1.

Helm とは

2.

Helm が CI/CD パイプラインで特に役立つ点は何ですか?