このページでは、デリバリー パイプライン内の各ターゲットの構成をレンダリングするように Cloud Deploy を構成する方法について説明します。
Cloud Deploy は Skaffold を使用して Kubernetes マニフェストをレンダリングします。このサービスは、未加工のマニフェストと Helm、Kustomize、kpt などの高度なマニフェスト管理ツールのレンダリングをサポートしています。
レンダリング プロセスには 2 つのステージがあります。
マニフェスト管理ツールがマニフェストを生成します。
Skaffold は、マニフェストのイメージ参照を、リリースにデプロイするイメージに置き換えます。
このページでは、Helm と Kustomize を使用した構成の例を示します。
Skaffold を使用して構成を生成する
Skaffold 構成ファイル(skaffold.yaml
)がまだない場合は、Skaffold を使用して、リポジトリの内容に基づいて Skaffold を生成できます。
Google Cloud CLI を使用して Skaffold をインストールします。
gcloud components install skaffold
マニフェストを含むリポジトリで
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
リリースの作成時に特定の画像を置き換える
マニフェストでは、イメージ名のプレースホルダを使用できます。このプレースホルダは、リリースを作成するときに置き換えることができます。
イメージのプレースホルダを含むマニフェストの例を次に示します。
apiVersion: v1
kind: Deployment
metadata:
name: getting-started
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: my-app-image
リリースを作成するときに、--images=
フラグを使用して、デプロイする特定のイメージを指定できます。たとえば、次のコマンドはリリースを作成し、プレースホルダ名に SHA 修飾付きのイメージ名を代入します。
gcloud deploy releases create test-release-001 \
--project=test-gke-using-deployment \
--region=us-central1 \
--delivery-pipeline=my-gke-demo-app-1 \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
レンダリングされたマニフェストには、my-app-image
ではなく、指定したイメージへの参照が含まれます。
次のステップ
- Cloud Deploy デリバリー パイプラインの構成の詳細を確認する。
- Cloud Deploy Skaffold プロファイルのチュートリアルを試す
- Kustomize の詳細を確認する。
- Helm の詳細を学習する。
- Kpt の詳細を学習する
- Helm チャートや Kustomization などのアーティファクトを保存するには、Artifact Registry の使用を検討してください。