Cloud Deploy でマニフェストを管理する

このページでは、デリバリー パイプライン内の各ターゲットの構成をレンダリングするように Cloud Deploy を構成する方法について説明します。

Cloud Deploy では、Skaffold を使用して Kubernetes マニフェストをレンダリングします。このサービスは、未加工のマニフェストと HelmKustomizekpt などの高度なマニフェスト管理ツールのレンダリングをサポートしています。

レンダリング プロセスには、次の 2 つのステージがあります。

  1. マニフェスト管理ツールによってマニフェストが生成されます。

  2. Skaffold は、マニフェスト内のイメージ参照を、リリースにデプロイするイメージに置き換えます。

このページでは、Helm と Kustomize を使用した構成例について説明します。

Skaffold を使用した構成の生成

Skaffold 構成ファイル(skaffold.yaml)がまだない場合は、Skaffold を使用して、リポジトリの内容に基づいて Skaffold を生成できます。

  1. Google Cloud CLI を使用して Skaffold をインストールします。

    gcloud components install skaffold

  2. マニフェストを含むリポジトリで skaffold init を実行します。

    skaffold init --skip-build

このコマンドにより、リポジトリに skaffold.yaml ファイルが作成されます。このファイルは、そのリポジトリ内のマニフェストを参照します。内容は次のようになります。

apiVersion: skaffold/v4beta7
kind: Config
metadata:
  name: sample-app
manifests:
  rawYaml:
    - k8s-manifests/deployment.yaml
    - k8s-manifests/rbac.yaml
    - k8s-manifests/redis.yaml
    - k8s-manifests/service.yaml

未加工のマニフェストのレンダリング

未加工のマニフェストは Helm や Kustomize などのツールによって管理されないマニフェストであるため、ハイドレートやクラスタへのデプロイの前に前処理は不要です。

デフォルトでは、Cloud Deploy は skaffold render を使用して Kubernetes マニフェストをレンダリングします。タグ付けされていないイメージ名は、デプロイするコンテナ イメージのタグ付きイメージ名に置き換えます。リリースを昇格すると、Cloud Deploy は skaffold apply を使用してマニフェストを適用し、イメージを Google Kubernetes Engine クラスタにデプロイします。

基本構成の manifests スタンザは次のようになります。

manifests:
  rawYaml:
    - PATH_TO_MANIFEST

ここで渡すことができる値の詳細については、Skaffold のドキュメントをご覧ください。

Helm を使用したレンダリング

Cloud Deploy を使用して、Helm チャートをレンダリングできます。これを行うには、Skaffold プロファイルの deploy スタンザに Helm チャートの詳細を含めます。

各定義は次のようになります。

apiVersion: skaffold/v4beta7
kind: Config
manifests:
  helm:
    releases:
      - name: RELEASE_NAME
        chartPath: PATH_TO_HELM_CHART

ここで

RELEASE_NAME は、このリリースの Helm チャート インスタンスの名前です。

PATH_TO_HELM_CHART は、パッケージ化された Helm チャートまたは解凍された Helm チャート ディレクトリへのローカルパスです。

Skaffold のドキュメントで説明されているように、追加の Helm 構成オプションを使用できます。

Kustomize を使用したレンダリング

Cloud Deploy では Kustomize を使用できます。これを行うには、skaffold.yaml プロファイル構成の deploy スタンザから Kustomization ファイルを指定します。

Kustomize を使用するターゲットごとに、skaffold.yaml の対応する profile ごとに個別の Kustomize 構成を含めます。

各定義は次のようになります。

apiVersion: skaffold/v4beta7
kind: Config
manifests:
  kustomize:
    paths:
      - PATH_TO_KUSTOMIZE

ここで

PATH_TO_KUSTOMIZE は Kustomization ファイルを指定します。デフォルト値は ["."] です

Skaffold のドキュメントで説明されているように、追加の Kustomize 構成オプションを使用することもできます。

ターゲットごとに異なるマニフェストの構成

多くの場合、ターゲットには若干異なる構成が必要です。たとえば、本番環境デプロイでは、ステージング デプロイよりも多くのレプリカが存在する場合があります。

各バリエーションを異なる Skaffold プロファイルとして指定すると、ターゲットごとに異なるマニフェスト セットをレンダリングできます。

未加工のマニフェストを含むプロファイル

未加工のマニフェストを操作する場合は、ターゲットに応じて異なるファイルを Cloud Deploy に指定できます。次のように構成できます。

apiVersion: skaffold/v4beta7
kind: Config
profiles:
  - name: prod
    manifests:
      rawYaml:
        - prod.yaml
  - name: staging
    manifests:
      rawYaml:
        - staging.yaml

Kustomize のプロファイル

Kustomize を使用してステージングと本番環境のプロファイルが異なる skaffold.yaml の例を示します。各プロファイルは異なる Kustomization を指定します。

apiVersion: skaffold/v4beta7
kind: Config
profiles:
  - name: prod
    manifests:
      kustomize:
        paths:
          - environments/prod
  - name: staging
    manifests:
      kustomize:
        paths:
          - environments/staging

デリバリー パイプラインで参照されるプロファイル

skaffold.yaml で定義されている次のプロファイルは、ターゲットごとにデリバリー パイプライン構成で参照されます。

serialPipeline:
  stages:
  - targetId: staging-target
    profiles:
    - staging
  - targetId: prod-target
    profiles:
    - prod

次のステップ