アプリケーションのデプロイ

このページでは、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 デリバリー パイプラインに提供できるコンテナ イメージが含まれます。

  • skaffold.yaml 構成ファイルを用意します

    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 を構成したら、作成したデリバリー パイプラインに従ってデプロイするアプリケーションを送信できます。

  1. 通常の継続的インテグレーション(CI)プロセスを実行し、デプロイ可能なアーティファクトを作成します。

  2. 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.statusChecktrue に設定する必要があります。デフォルトでは、statusCheckfalse の場合、ステータス チェックは行われず、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 クラスタで成功または失敗する可能性があります。

デプロイの安定性タイムアウトを変更するには:

  1. skaffold.yamldeploy.statusChecktrue に設定されていることを確認します。

    デフォルトは true です。true の場合、Skaffold は次のステップのタイムアウト値に従って、ヘルスチェックで安定したデプロイを報告するまで待機します。

  2. skaffold.yaml で、statusCheckDeadlineSeconds を待機する秒数に設定します。

    deploy:
      ...
      statusCheck: true
      statusCheckDeadlineSeconds: 600
      ...
    

    デフォルトは 600(10 分)です。Skaffold は、安定したデプロイをこの時間待機します。デプロイが安定するまでにこの時間を超えると、デプロイは失敗します。

  3. Kubernetes マニフェストの kind: Deployment リソースで、statusCheckDeadlineSeconds に設定したものと同じ値を Deployment.spec.progressDeadlineSeconds に設定します。

次のステップ