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

次のステップ