このページでは、Google Cloud Deploy を使用してアプリケーションを目的のランタイム環境に取り込む方法について説明します。 これを行う前に、デリバリー パイプラインとターゲットを作成する必要があります。
始める前に
このセクションでは、Google Cloud Deploy を使用してアプリケーションをデプロイする前に行う必要がある内容について説明します。
実行サービス アカウントに必要な IAM ロールと権限があることを確認します。
-
Google Cloud Deploy は、Google Kubernetes Engine、Cloud Run、Anthos クラスタにデプロイできます。 ターゲット構成は、デプロイ先によって異なります。
コンテナ イメージとマニフェストを用意します。
デプロイするコンテナ イメージと、GKE にデプロイする Kubernetes マニフェスト、または Cloud Run にデプロイするサービス YAML ファイルが1 つ以上必要です。
イメージをビルドして配置するには、継続的インテグレーション パイプラインまたは他のプロセスが必要です。CI ツールには、Cloud Build、Jenkins、または Google Cloud Deploy デリバリー パイプラインに提供できるコンテナ イメージが含まれます。
-
Google Cloud Deploy は
skaffold render
を呼び出し、このファイルとskaffold apply
を使用して Kubernetes マニフェストをレンダリングし、ターゲットにデプロイします。 これを行うには、Skaffold には最小限のskaffold.yaml
が必要です。次の 2 つの方法のいずれかで取得できます。独自に作成する。
この例のように、
skaffold.yaml
ファイルは、サポートされている Skaffold バージョンに対応する名前空間を最初の行で参照する必要があります。`apiVersion: skaffold/v2beta28`
自動生成させる。
まだ
skaffold.yaml
ファイルがない場合は、Google Cloud Deploy で作成することができます。このファイルは、Google Cloud Deploy のオンボーディング、学習、デモに適しています。本番環境のワークロードには使用しないでください。
詳細については、Google Cloud Deploy で Skaffold を使用するをご覧ください。Helm、Kustomize、kpt などのマニフェスト管理ツールで Skaffold と Google Cloud Deploy を使用する方法については、Google Cloud Deploy でのマニフェストの管理をご覧ください。
任意のランタイム環境向けに Google Cloud Deploy をセットアップする
Google Cloud Deploy では、次のいずれかのランタイム環境にアプリケーションをデプロイできます。
デリバリー パイプラインを呼び出してリリースを作成する
ランタイムにデプロイするように Google Cloud Deploy を構成したら、作成したデリバリー パイプラインに従ってデプロイするアプリケーションを送信できます。
通常の継続的インテグレーション(CI)プロセスを実行し、デプロイ可能なアーティファクトを作成します。
Google Cloud Deploy を呼び出してリリースを作成し、デリバリー パイプラインを開始します。
Skaffold 構成を含むディレクトリから次のコマンドを実行します。
gcloud deploy releases create RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --region=REGION
ここで
RELEASE_NAME
は、このリリースに付ける名前です。名前は、このデリバリー パイプラインのすべてのリリース間で一意である必要があります。動的リリース名を指定するには、
'$DATE'
または'$TIME'
のいずれか、または両方を指定します。たとえば、このコマンドを UTC 午後 3 時 07 分に呼び出すと、'rel-$TIME'
はrel-1507
に解決されます。'$DATE'
と'$TIME'
は単一引用符で囲む必要があり、時刻は、コマンドを呼び出すマシン上の UTC 時刻です。PIPELINE_NAME
は、ターゲットの進行状況を通じて、このリリースのデプロイを管理するデリバリー パイプラインの名前です。この名前は、パイプライン定義のname
フィールドと一致する必要があります。REGION
は、リリースを作成するリージョンの名前です(例:us-central1
)。必須入力項目です。
このコマンドは、構成ファイルを含む tarball を Cloud Storage バケットにアップロードして、リリースを作成します。Google Cloud Deploy は、自動的にロールアウトを作成し、デリバリー パイプラインで定義された最初のターゲットにイメージをデプロイします。
このコマンドで示されるパラメータに加えて、次のオプションのいずれかを含めることが可能です。
--images=<name=path/name:$IMAGE_SHA>,<name=path/name:$IMAGE_SHA>
イメージ名のフルパスを置換するイメージ名のコレクション。
--build-artifacts=<path/file>
Skaffold ビルド アーティファクト出力ファイルへの参照。これは、イメージのフルパスの置換を表すために渡すことができます。
この 2 つのオプションは相互に排他的です。
次のいずれかのフラグを指定して、Google Cloud Deploy に skaffold.yaml
ファイルを生成させることもできます。
--from-k8s-manifest=K8S_MANIFEST
生成された Skaffold 構成は、このフラグを渡す Kubernetes マニフェストに基づいています。このフラグを
--skaffold-file
フラグまたは--source
フラグとともに使用すると、エラーが発生します。詳細については、skaffold.yaml
の生成をご覧ください。--from-run-manifest=RUN_MANIFEST
生成された Skaffold 構成は、このフラグを渡す Cloud Run サービスの YAML に基づいています。このフラグを
--skaffold-file
フラグまたは--source
フラグとともに使用すると、エラーが発生します。詳細については、skaffold.yaml
の生成をご覧ください。
この 2 つのオプションは相互に排他的です。
デプロイのタイムアウトを変更する
GKE と Anthos ターゲット クラスタへのデプロイの場合、Kubernetes が安定したデプロイを報告するのを待機する時間に影響を与える 3 つのタイムアウトが存在します。
Cloud Build が Google Cloud Deploy に対して実行するオペレーションに対して、1 時間のタイムアウトが設定されます。
このタイムアウトは実行環境の構成で変更できます。
Skaffold には、ヘルスチェックのタイムアウト(
deploy.statusCheckDeadlineSeconds
)が設定されています。これは、デプロイが安定するまでの待機時間(秒単位)です。デフォルトは 600 秒(10 分)です。このタイムアウトを使用するには、
deploy.statusCheck
をtrue
に設定する必要があります。デフォルトでは、statusCheck
がfalse
の場合、ステータス チェックは行われず、kubectl apply
が正常に完了した後、ロールアウトは成功とマークされます。kind: Deployment
の Kubernetes リソースには、Deployment.spec.progressDeadlineSeconds
があります。これは、Deployment が安定したと報告するまでの Kubernetes の待機時間です。このタイムアウトは
Deployment
リソースにのみ適用されます。最初の 2 つのタイムアウトの仕組みは次のとおりです。Kubernetes で
Deployment.spec.progressDeadlineSeconds
が設定されていない場合、Skaffold ヘルスチェックのタイムアウトは、それがデフォルトであるか明示的に設定されているかに関係なく、有効なタイムアウトになります。Kubernetes で
Deployment.spec.progressDeadlineSeconds
が設定されている場合、Skaffold はヘルスチェック タイムアウトを無視します。Kubernetes の進行状況の期限は有効なタイムアウトです。ただし、Kubernetes のタイムアウトが明示的に600
(10 分)に設定されている場合、Skaffold はデフォルト(未設定)として無視し、Skaffold のタイムアウトを使用します(設定されている場合)。どちらのタイムアウトも設定されていない場合、有効なタイムアウトは Skaffold のデフォルトである
600
(10 分)です。
Deployment
以外に、Kubernetes リソースには、安定性のタイムアウトに影響しないタイムアウトを設定できます。これらが存在する場合は、安定性タイムアウトと競合していないかを確認してください。Skaffold(または Cloud Build)がタイムアウトした場合、GKE のデプロイは引き続き実行されます。Google Cloud Deploy は失敗を示しますが、それでも GKE クラスタで成功または失敗する可能性があります。
デプロイの安定性タイムアウトを変更するには:
skaffold.yaml
でdeploy.statusCheck
がtrue
に設定されていることを確認します。デフォルトは
true
です。true
の場合、Skaffold は次のステップのタイムアウト値に従って、ヘルスチェックで安定したデプロイを報告するまで待機します。skaffold.yaml
で、statusCheckDeadlineSeconds
を待機する秒数に設定します。deploy: ... statusCheck: true statusCheckDeadlineSeconds: 600 ...
デフォルトは
600
(10 分)です。Skaffold は、安定したデプロイをこの時間待機します。デプロイが安定するまでにこの時間を超えると、デプロイは失敗します。Kubernetes マニフェストの
kind: Deployment
リソースで、statusCheckDeadlineSeconds
に設定したものと同じ値をDeployment.spec.progressDeadlineSeconds
に設定します。
次のステップ
GKE へのデプロイについて確認する
Cloud Run へのデプロイについて確認する
Anthos へのデプロイについて確認する
デリバリー パイプラインとターゲットの作成方法を学習する
リリースを昇格する方法を確認する