Spinnaker を使用した Google Kubernetes Engine でのカナリア分析の自動化

このチュートリアルでは、Google Kubernetes Engine(GKE)上に Spinnaker の自動カナリア分析機能を構成する方法について説明します。

はじめに

Spinnaker は、App Engine、GKE、Compute Engine、AWS、Azure などのさまざまなコンピューティング プラットフォームでアプリのデプロイを管理するために Netflix と Google が主導するオープンソースの継続的デリバリー システムです。Spinnaker を使用すると、カナリア デプロイを含む高度なデプロイ方法を実装できます。

カナリア デプロイでは、新しいバージョンのアプリを全面的に導入する前に、新しいバージョンを本番環境トラフィックのごく一部のみに組み込んでその動作を分析します。これにより、新しいバージョンをすべてのユーザーに公開する前にリスクを軽減できます。カナリア デプロイを使用するには、アプリの古いバージョンと新しいバージョンの動作を正確に比較する必要があります。両者の違いがわずかで、違いが現れるまで時間がかかることがあります。また、調べる指標が非常に多い場合もあります。

このような問題を解決するため、Spinnaker には自動カナリア分析機能が用意されています。これは、モニタリング システムから両方のバージョンの指標を読み取り、統計分析を実行して比較を自動化します。このチュートリアルでは、GKE にデプロイされ Stackdriver によってモニタリングされるアプリで、自動カナリア分析を行う方法を示します。

Spinnaker は、複雑な導入シナリオを実践している組織を対象とした(専用のリリース エンジニアリング部門が設けられていることも多い)、高度なアプリ導入および管理プラットフォームです。このチュートリアルは、Spinnaker の使用経験がなくても実施できます。ただし、本番環境への自動カナリア分析の実装は一般に、Spinnaker の使用経験を持ち、リリースが安全かどうかを判断する方法を知っているチームが、強力なモニタリング システムを介して行います。

このチュートリアルについて

このチュートリアルで使用するアプリは、エラー率が環境変数で構成されたシンプルな "Hello World" です。このアプリ用のビルド済みの Docker イメージが用意されています。次の図に示すように、このアプリは Prometheus 形式で指標を公開します。Prometheus は Kubernetes コミュニティで人気のあるオープンソースのモニタリング システムであり、Stackdriver と互換性があります。

アプリのアーキテクチャ

目標

  • GKE クラスタを作成する。
  • Spinnaker をインストールする。
  • カナリア デプロイなしでアプリを GKE にデプロイする。
  • アプリのカナリア デプロイを構成し、実行する。
  • 自動カナリア分析を構成する。
  • 自動カナリア分析をテストする。

料金

始める前に

  1. GCP プロジェクトを選択または作成します。

    [リソースの管理] ページに移動

  2. プロジェクトに対する課金を有効にします。

    課金の有効化

  3. Stackdriver アカウントを作成します。

    Stackdriver ドキュメントを読む

このチュートリアルを終了した後、作成したリソースを削除すれば、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

環境設定

このセクションでは、チュートリアルを実施するために必要なインフラストラクチャを構成します。このチュートリアルでは、Cloud Shell からすべてのターミナル コマンドを実行します。

  1. Cloud Shell を開きます。

    Cloud Shell に移動

  2. プロジェクト ID を変数としてエクスポートします。

    export GOOGLE_CLOUD_PROJECT=[PROJECT_ID]
    

    ここで:

    • [PROJECT_ID] は、使用するプロジェクトの ID を表します。
  3. GKE クラスタを作成します。

    gcloud config set project $GOOGLE_CLOUD_PROJECT
    gcloud config set compute/zone us-central1-f
    gcloud services enable container.googleapis.com
    gcloud beta container clusters create kayenta-tutorial \
        --machine-type=n1-standard-2 --enable-stackdriver-kubernetes
    
  4. Stackdriver-Prometheus 統合プラグインをインストールします。

    kubectl apply --as=admin --as-group=system:masters -f \
        https://storage.googleapis.com/stackdriver-prometheus-documentation/rbac-setup.yml
    curl -sS "https://storage.googleapis.com/stackdriver-prometheus-documentation/prometheus-service.yml" | \
        sed "s/_stackdriver_project_id:.*/_stackdriver_project_id: $GOOGLE_CLOUD_PROJECT/" | \
        sed "s/_kubernetes_cluster_name:.*/_kubernetes_cluster_name: kayenta-tutorial/" | \
        sed "s/_kubernetes_location:.*/_kubernetes_location: us-central1-f/" | \
        kubectl apply -f -
    
  5. 新しい GKE クラスタに Spinnaker をデプロイします。

    curl -sSL "https://www.spinnaker.io/downloads/kubernetes/quick-install.yml" | \
        sed 's/version:.*/version: 1.13.10/g' | kubectl apply -f -
    
  6. デプロイが完了するまで数分かかります。進行状況を確認するには、コマンド watch kubectl -n spinnaker get pods を実行します。watch コマンドを停止するには、Ctrl+C キーを押します。デプロイが完了すると、すべてのポッドが Ready 1/1 として出力されます。

    NAME                                READY  STATUS    RESTARTS   AGE
    minio-deployment-7c665c4b57-jx7px   1/1    Running   0          5m
    spin-clouddriver-789c6fff77-rjtc6   1/1    Running   0          4m
    spin-deck-68b5968f7f-trmkn          1/1    Running   0          4m
    spin-echo-57dbff9fb8-rq5qc          1/1    Running   0          4m
    spin-front50-67965475b8-l24db       1/1    Running   0          4m
    spin-gate-6d8bbf8c45-m9pzn          1/1    Running   0          4m
    spin-halyard-59fd54bd69-xns49       1/1    Running   0          5m
    spin-kayenta-99b97b85f-4gvsv        1/1    Running   0          4m
    spin-orca-5748974888-cph9g          1/1    Running   0          4m
    spin-redis-6d49c9c5b9-q2hzm         1/1    Running   0          4m
    spin-rosco-6b4ddbcb94-mjrht         1/1    Running   0          4m
    
  7. Spinnaker にアクセスするため、ローカルポートを Spinnaker のデッキ コンポーネントに転送します。

    DECK_POD=$(kubectl -n spinnaker get pods -l \
        cluster=spin-deck,app=spin \
        -o=jsonpath='{.items[0].metadata.name}')
    kubectl -n spinnaker port-forward $DECK_POD 8080:9000 >/dev/null &
    
  8. Cloud Shell で [ウェブでプレビュー] アイコンをクリックし、[ポート 8080 でプレビュー] を選択します。

    ポート 8080 の [ウェブでプレビュー] アイコン

Spinnaker を使用したアプリのデプロイ

このセクションでは、Spinnaker を構成して、GKE クラスタにアプリをデプロイします。

Spinnaker アプリを作成する

デプロイする前に、Spinnaker アプリを作成します。

  1. Spinnaker で、[Actions] > [Create Application] をクリックします。

    [アプリケーションを作成] プルダウン メニュー

  2. [New Application] ダイアログで、次の値を入力します。

    • Name: sampleapp
    • Owner Email: [example@example.com]

  3. [Create] をクリックします。

これで Spinnaker の sampleapp に入りました。まだ何も構成していないため、ほとんどのタブは空です。

デプロイ パイプラインを作成して実行する

このセクションではまず、successRate パラメータを受け取る単純な Spinnaker パイプラインを使用してアプリをデプロイし、4 つのポッドを持つ GKE デプロイを作成します。これらのポッドは、successRate パラメータに対応する割合でランダムにエラーをスローします。このチュートリアルでは、100 - successRate の割合で 500 エラーをスローします。

  1. Cloud Shell で、用意された JSON ファイルを使用してパイプラインを作成します。次のコマンドは、パイプラインの JSON 定義を Spinnaker API に直接送信します。

    wget https://raw.githubusercontent.com/spinnaker/spinnaker/master/solutions/kayenta/pipelines/simple-deploy.json
    curl -d@simple-deploy.json -X POST \
        -H "Content-Type: application/json" -H "Accept: */*" \
        http://localhost:8080/gate/pipelines
    
  2. Spinnaker の Pipelines セクションに、Simple deploy というパイプラインが表示されます。これが表示されない場合、ページを再読み込みします。[Start Manual Execution] をクリックします。

    Simple deploy パイプラインの手動実行の開始

  3. [Confirm Execution] ウィンドウで、[Success Rate] として 70 を選択し、[Run] をクリックします。数秒後、パイプラインによってアプリと 4 つのポッドの構成がデプロイされます。

  4. Cloud Shell で、チュートリアルが終了するまでの間新しいアプリにリクエストを送信するポッドを作成します。

    kubectl -n default run injector --image=alpine:3.10 -- \
        /bin/sh -c "apk add --no-cache curl; \
        while true; do curl -sS --max-time 3 \
        http://sampleapp:8080/; done"
    

インジェクタのログを確認する

  1. アプリの動作を確認するため、インジェクタのログを確認します。

    kubectl -n default logs -f \
        $(kubectl -n default get pods -l run=injector \
        -o=jsonpath='{.items[0].metadata.name}')
    
  2. 多数の内部サーバー エラー メッセージがログに表示されます。インジェクタのログの追跡を停止するには、Ctrl+C キーを押します。

アプリのヘルスチェックを行う

これでアプリがデプロイされてトラフィックが処理されるようになったので、次にアプリが正しく動作しているかどうかを確認します。もちろん、このチュートリアルでは 70% の成功率でアプリをデプロイしたため、アプリが正しく動作しないことが最初からわかっています。

このアプリは /metrics エンドポイントで Prometheus 形式の指標を公開しており、これが Stackdriver によって取り込まれます。このセクションでは、これらの指標を Stackdriver で可視化します。

  1. Stackdriver で、[Metrics Explorer] に移動します。

    Metrics Explorer

  2. [Find resource type and metric] フィールドに、次のように入力します。

    external.googleapis.com/prometheus/requests
    
  3. グラフを見やすくするため、[Group By] フィールドに「http_code」と入力します。次のグラフでは、アプリが応答した HTTP リクエストの割合が HTTP ステータス コード別にグループ化されています。

    アプリが応答した HTTP リクエストのグラフ

グラフからわかるように、アプリの現在のエラー率は約 30%(設定したとおり)であり、許容されないレベルにあります。チュートリアルの残りの部分では、カナリア デプロイ パイプラインと自動分析をセットアップし、このようにエラー率の高いアプリがデプロイされないようにする方法を説明します。

カナリア デプロイの作成

このセクションでは、カナリア デプロイ パイプラインを自動分析なしで作成し、アプリの新しいバージョンを本番環境に全面的にデプロイする前に新しいバージョンのテストを行います。次の図は、このパイプラインのステージの全体図を示しています。

カナリア デプロイ パイプラインのステージの図

  • ステップ 0: Simple Deploy パイプラインと同様に、このパイプラインも Success Rate パラメータを入力として受け取ります。この新しいパイプラインは、このパラメータを使用してさまざまな成功率をシミュレートします。これはパイプラインの Configuration ステージです。
  • ステップ 1: Find Baseline Version ステージでは、直近に実行された Simple Deploy パイプラインから、本番環境で実行されているアプリの現在のバージョンが取得されます。このチュートリアルでは、現在デプロイされているアプリの成功率を取得します。
  • Find Baseline Version ステージと並行して、Deploy Canary Config ステージで、アプリのカナリア バージョンの新しい成功率構成がデプロイされます。
  • ステップ 2: Deploy Canary ステージと Deploy Baseline ステージでは、比較のために新しいカナリア バージョンとベースライン バージョンの 2 つのバージョンがデプロイされます。カナリア バージョンは Deploy Canary Config で作成された構成を使用するのに対し、ベースライン バージョンは本番環境バージョンで使用されている構成を使用します。

  • ステップ 3: Manual Judgment ステージではパイプラインが停止し、手動で続行を指示するまで先に進みません。このステージで、カナリア バージョンが正しく動作するかどうかを確認できます。

  • ステップ 4: Manual Judgment ステージからパイプラインを続行した後、Delete Canary ステージと Delete Baseline ステージでインフラストラクチャがクリーンアップされます。

  • クリーンアップと並行して Deploy to Production ステージが開始され、最初に指定したときと同じ Success Rate パラメータを使用して Simple Deploy パイプラインがトリガーされます。カナリアでテストしたアプリと同じバージョンが本番環境にデプロイされます。

  • Deploy to Production ステージは、Manual Judgment ステージで手動で continue を選択した場合にのみトリガーされます。

  • ステップ 5: 最後に、Successful Deployment ステージでパイプライン全体が成功したことが確認されます。ここでは、Manual Judgment ステージで本番環境へのデプロイを許可したことが確認されます。このステージは、Deploy to ProductionDelete CanaryDelete Baseline の各ステージが正常に実行された場合にのみ実行されます。

これで、Canary Deploy パイプラインを作成して実行できます。

  1. Canary Deploy パイプラインを作成するには、次のコマンドを実行して Simple deploy パイプラインの ID を取得し、Canary Deploy パイプラインに挿入します。

    wget https://raw.githubusercontent.com/spinnaker/spinnaker/master/solutions/kayenta/pipelines/canary-deploy.json
    export PIPELINE_ID=$(curl \
        localhost:8080/gate/applications/sampleapp/pipelineConfigs/Simple%20deploy \
        | jq -r '.id')
    jq '(.stages[] | select(.refId == "9") | .pipeline) |= env.PIPELINE_ID | (.stages[] | select(.refId == "8") | .pipeline) |= env.PIPELINE_ID' canary-deploy.json | \
        curl -d@- -X POST \
        -H "Content-Type: application/json" -H "Accept: */*" \
        http://localhost:8080/gate/pipelines
    
  2. Spinnaker に Canary Deploy パイプラインが表示されない場合は、sampleapp ページを再読み込みして、[Pipelines] をクリックします。

  3. 次のようにして、Canary Deploy パイプラインを開始します。

    1. [Start Manual Execution] をクリックします。
    2. [Success Rate] として 80 を選択します。
    3. [Run] をクリックします。
  4. しばらくするとパイプラインが Manual Judgment ステージに達しますが、まだ [Continue] はクリックしないでください。続行する前に、カナリア バージョンとベースライン バージョンを比較する必要があるためです。

    カナリア パイプラインの Manual judgement ステージ

  5. Cloud Shell で kubectl -n default get pods コマンドを実行して、canary と baseline のラベルが付いた新しいポッドを確認します。

    NAME                                READY STATUS  RESTARTS  AGE
    injector-66bd655ffd-9ntwx           1/1   Running 0         30m
    sampleapp-5cdf8f55dd-995rz          1/1   Running 0         28m
    sampleapp-5cdf8f55dd-dqq8n          1/1   Running 0         28m
    sampleapp-5cdf8f55dd-ntq57          1/1   Running 0         28m
    sampleapp-5cdf8f55dd-rlpzp          1/1   Running 0         28m
    sampleapp-baseline-567b8d6849-gsgqr 1/1   Running 0          4m
    sampleapp-canary-54b9759dd6-gmjhc   1/1   Running 0          4m
    
  6. Stackdriver で、[Metrics Explorer] に移動します。

    Metrics Explorer

  7. [Metrics Explorer] にすでになんらかの指標が構成されている場合、既存のすべての構成をフォームから削除します。

  8. 以下のパラメータを指定して、ベースラインとカナリアの両方のエラー率を表示します。

    1. Metric: external.googleapis.com/prometheus/requests
    2. Filters:

      • http_code equals 500
      • version different (!=) from prod
  9. カナリア バージョン(次のグラフの紫色)とベースライン バージョン(次のグラフの青色)を比較します。実際のグラフの色はこれとは異なる場合があります。このチュートリアルでは、カナリア バージョンのエラー率はベースライン バージョンよりも低くなっています。したがって、カナリア バージョンを本番環境に全面的にデプロイしても安全です。カナリア バージョンのエラー率の方が高い場合、この段階でデプロイを中止し、アプリを修正します。

    カナリア バージョンとベースライン バージョンのエラー率を比較するグラフ

  10. Spinnaker の [Manual Judgement] ダイアログで、[Continue] をクリックします。

    カナリア パイプラインの Manual judgement ステージ

  11. デプロイが完了したら、Stackdriver の [Metrics Explorer] に戻ります。

    Metrics Explorer

  12. [Metrics Explorer] にすでになんらかの指標が構成されている場合、既存のすべての構成をフォームから削除します。

  13. [Find resource type and metric] フィールドに、次のように入力します。

    external.googleapis.com/prometheus/requests
    
  14. [Group By] フィールドに「http_code」と入力します。次のグラフでは、アプリが応答した HTTP リクエストの割合が HTTP ステータス コードによって分割されています。

    HTTP リクエストの割合を比較するグラフ

    このグラフは、本番、ベースライン、カナリアのすべてのポッドの HTTP コード 200 および 500 の割合を示します。カナリア バージョンの方がエラー率が低かったため、このバージョンを本番環境にデプロイしました。デプロイ中に短時間でリクエストの総数が若干少なくなり、その後全体のエラー率が低下したことがわかります。これはカナリア バージョンが本番環境に正しくデプロイされたことを示します。

カナリア分析の自動化

カナリア デプロイは便利ですが、現在の実装では手動でデプロイの可否を判断しなければなりません。全面的にデプロイする前に、カナリアが期待どおりに動作していることを人手を介して確認する必要があります。また、カナリアとベースラインの違いは常に明確であるとは限りません。

カナリア分析を自動化することは良い考えです。自動化すると、自ら分析作業を行わなくて済みます。また、自動化された統計分析の方が、人間が一連の指標に潜む問題を検出するよりも適しています。このセクションでは、Manual Judgement ステージを自動カナリア分析に置き換えます。

カナリアのサポートを有効にする

まず、Spinnaker で、Kayenta と呼ばれる自動カナリア分析機能を構成します。Kayenta の構成には Halyard を使用します。これは Spinnaker の構成やデプロイに使用するのと同じツールです。

  1. Cloud Shell で、プロジェクト ID を取得します。

    echo $GOOGLE_CLOUD_PROJECT
    
  2. Halyard ポッド内のシェルを取得します。

    export HALYARD_POD=$(kubectl -n spinnaker get pods -l \
        stack=halyard,app=spin \
        -o=jsonpath='{.items[0].metadata.name}')
    kubectl -n spinnaker exec -it $HALYARD_POD -- bash
    
  3. Stackedriver をバックエンドとして使用するように Kayenta を構成します。

    hal config canary google enable
    hal config canary google account add kayenta-tutorial --project [PROJECT_ID]
    hal config canary google edit --stackdriver-enabled=true
    

    ここで:

    • [PROJECT_ID] は、取得したプロジェクト ID を表します。
  4. 新しい構成を適用し、Halyard ポッドを終了します。

    hal deploy apply
    exit
    
  5. デプロイが完了するまで数分かかります。進行状況を確認するには、コマンド watch kubectl -n spinnaker get pods を実行します。デプロイが完了すると、すべてのポッドが Ready 1/1 として出力されます。watch コマンドを停止するには、Ctrl+C キーを押します。

    NAME                               READY  STATUS   RESTARTS AGE
    minio-deployment-7c665c4b57-prl6d  1/1    Running  0        1h
    spin-clouddriver-6c4f954667-8769c  1/1    Running  0        1h
    spin-deck-7d44499f9b-hkqz4         1/1    Running  0        1h
    spin-echo-6cf4bbbbfc-vxzlr         1/1    Running  0        1h
    spin-front50-7666c894c6-fm7sz      1/1    Running  0        1h
    spin-gate-76f789696d-vsn98         1/1    Running  0        1h
    spin-halyard-59fd54bd69-vb99h      1/1    Running  0        1h
    spin-kayenta-84f6b9b697-5krhh      1/1    Running  0        1m
    spin-orca-78f5c74c6f-srl4f         1/1    Running  0        1h
    spin-redis-6d49c9c5b9-gddgv        1/1    Running  0        1h
    spin-rosco-699cb484f7-grthh        1/1    Running  0        1h
    

自動カナリア分析機能を構成する

Kayenta が有効になったので、次に sampleapp で Kayenta を構成します。

  1. Spinnaker で、[Config] をクリックします。

  2. [Features] セクションで [Canary] を選択し、[Save Changes] をクリックします。

    パイプラインの機能のスクリーンショット

カナリア構成を作成する

Spinnaker の自動カナリア分析は、さまざまな指標に対する統計テストを実行し、スコアを出力します。このスコアは範囲が 0〜100 で、ベースラインとカナリアを比較した結果合格基準を満たしていた、または満たしていなかった指標の数を表します。指標を複数のグループにまとめ、グループごとに重みを変えることで、スコアに影響を与えることができます。分析のスコアに応じて、デプロイを進めるかどうかを決定できます。このチュートリアルのように指標を 1 つしか使わない場合、スコアは 0(不合格)と 100(合格)のどちらかになります。

アプリには複数のカナリア構成を設定でき、1 つのカナリア構成を複数のアプリで共有できます。カナリア構成は、次の 2 つの主要な要素からなります。

  • 分析する指標のセット(複数のグループにまとめることができます)。
  • スコアの下限しきい値と合格しきい値。

デプロイ パイプラインでは、Canary Analysis ステージでカナリア構成が使用されます。このステージでは、カナリアランを複数回実行できます。いずれかのランのスコアが下限しきい値を下回った場合、このステージは中止され、他のランは実行されません。ステージ全体が合格とみなされるには、最後のランのスコアが合格しきい値を上回る必要があります。

カナリア構成を作成する手順は次のとおりです。

  1. カナリアが有効になったので、[Pipelines] セクションは [Delivery] に置き換えられます([Delivery] セクションが表示されていない場合は Spinnaker を再読み込みしてください)。[Delivery] セクションで、[Canary Configs] に移動します。

  2. [Add Configuration] をクリックします。

  3. [Configuration Name] に「kayenta-test」と入力します。

  4. [Metrics] セクションで、[Add Metric] をクリックします。

  5. [Add Metric] ダイアログで、次の値を入力して [OK] をクリックします。

    • Name: error_rate
    • Fail on: increase
    • Resource Type: k8s_container
    • Metric type: external.googleapis.com/prometheus/requests
    • Aligner: ALIGN_RATE
    • Filter Template: [Create new...] を選択します。
      • 新しいフィルタ テンプレートの [Name] に「http_code」と入力します。
      • 新しいフィルタ テンプレートの [Template] に「metric.labels.http_code = "500" AND resource.label.pod_name = starts_with("${scope}")」と入力します。
      • [Save] をクリックします。
  6. [Scoring] セクションで、次の値を選択します。

    • Marginal: 75
    • Pass: 95
    • Group 1: 100
  7. [Save Changes] をクリックします。

パイプラインにカナリア分析ステージを追加する

カナリア構成を作成したら、次に既存のデプロイ パイプラインの Manual Judgment ステージを、この構成を使用する Canary Analysis ステージに置き換えます。

  1. [Delivery] > [Pipelines] に移動し、[Canary Deploy] パイプラインの [Configure] をクリックします。

    カナリア デプロイの構成ボタンのスクリーンショット

  2. [Add Stage] をクリックします。

  3. [Type] で [Canary Analysis] を選択します。

  4. [Depends On] セクションで、新しいステージの依存先を次のステージに設定します。

    • Deploy Canary
    • Deploy Baseline
  5. [Canary Analysis Configuration] セクションで、次の値を入力します。

    パラメータ名 定義
    Analysis Type リアルタイム(手動) カナリアとベースラインが自動的に作成される自動モードは、Kubernetes ではまだ使用できません。
    Config Name kayenta-test 前のステップで作成したカナリア構成の名前。
    Lifetime 0 時間 5 分 カナリア分析の存続時間。
    Delay 0 分析を行う前にアプリをウォームアップする時間。
    Interval 5 1 回の統計分析を実行するために Kayenta が使用する時間枠。
    Baseline sampleapp-baseline Kayenta がベースラインとして使用する GKE デプロイ。
    Baseline Location default ベースラインが存在する GKE 名前空間。
    Canary sampleapp-canary Kayenta がカナリアとして使用する GKE デプロイ。
    Canary Location default カナリアが存在する GKE 名前空間。
  6. [Execution Options] セクションで、[Ignore the failure] を選択します。カナリア分析が失敗した場合でもベースラインとカナリアを破棄できるように、失敗を無視します。このチュートリアルの後の方で、カナリアが失敗する可能性を考慮に入れてステージを変更します。

  7. パイプラインの線図で、[Deploy to Production] をクリックします。

    パイプラインの [Deploy to Production] ボタンのスクリーンショット

  8. [Depends On] セクションを次のように変更します。

    1. [Canary Analysis] を追加します。
    2. [Manual Judgment] を削除します。
  9. カナリア分析が成功した場合にのみ本番環境にデプロイされるようにするため、[Conditional on Expression] パラメータを変更します。

    ${ #stage('Canary Analysis')['status'].toString() == 'SUCCEEDED'}
    
  10. パイプラインの線図で [Delete Canary] をクリックし、[Depends On] セクションを次のように変更します。

    1. [Canary Analysis] を追加します。
    2. [Manual Judgment] を削除します。
  11. パイプラインの線図で [Delete Baseline] をクリックし、[Depends On] セクションを変更します。

    1. [Canary Analysis] を追加します。
    2. [Manual Judgment] を削除します。
  12. カナリア分析が失敗した場合にパイプライン全体が失敗するようにするため、パイプラインの線図で [Successful deployment] をクリックし、既存の前提条件の [Edit] アイコンをクリックします。

    デプロイの成功を示す既存の前提条件を編集する

    1. [Expression] を次のように変更します。

      ${ #stage('Canary Analysis')['status'].toString() == 'SUCCEEDED'}
      
    2. [Update] をクリックします。

  13. 最後に、Manual Judgement ステージを新しく作成した Canary Analysis ステージに置き換えます。

    1. パイプラインの線図で、[Manual Judgment] をクリックします。
    2. [Remove stage] をクリックします。
  14. [Save Changes] をクリックします。これで、パイプラインは次の図のようになります。 カナリア分析パイプラインの可視化

新しいパイプラインをテストする

自動カナリア分析の構成が完了したので、次にパイプラインをテストして期待どおりに動作することを確認します。

  1. [Delivery] > [Pipelines] に移動し、[Canary Deploy] パイプライン(CLI を使用した場合は [Automated Canary Deploy])の [Start Manual Execution] をクリックします。

  2. [Success Rate] として 60 を選択し、[Run] をクリックします。

  3. カナリア分析の現在の進行状況を確認するには、[Canary Analysis] をクリックしてから [Task Status] をクリックします。数分後、Canary Analysis ステージは失敗します。これは本番環境の現在の成功率が 80 であるためです。Canary Analysis ステージが失敗したら、このカナリア分析のレポートに移動します。

    1. [Canary Analysis] をクリックします。
    2. [Canary Summary] をクリックします。
    3. [Report] アイコンをクリックします。レポートページでは、カナリア バージョンのエラー率がベースライン バージョンよりも高くなっています。

      カナリア分析サマリーのレポート アイコン

  4. このセクションの手順をもう一度繰り返しますが、今度はカナリア分析を成功させるために [Success Rate] で 90 を選択します。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。

  1. GCP Console で [プロジェクト] ページに移動します。

    プロジェクト ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

リソースを削除する

このチュートリアルで使用した GCP プロジェクトを残しておく場合は、個々のリソースを削除します。

  1. Spinnaker をアンインストールします。

    kubectl delete -f https://www.spinnaker.io/downloads/kubernetes/quick-install.yml
    
  2. GKE クラスタを削除します。

    gcloud container clusters delete kayenta-tutorial
    
  3. 確認のプロンプトが表示されたら、「Y」と入力します。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...