カナリアOKEデプロイメント

Container Engine for Kubernetes (OKE)のカナリア・リリース戦略を使用して、デプロイメント・パイプラインを作成します。

前提条件

前提条件を次に示します。

  • デプロイメント・パイプライン、デプロイ先のKubernetesクラスタ環境およびアーティファクトが必要です。アーティファクトは、インラインで定義するか、アーティファクト・レジストリに配置できます。
  • OKEクラスタにはデフォルトでイングレス・コントローラがないため、カナリア・デプロイメント戦略用にNGINXイングレス・コントローラを設定する必要があります。イングレス・コントローラは、イングレス仕様に基づいてトラフィックをルーティングするKubernetesアプリケーションです。NGINXイングレス・コントローラは、ロード・バランシングのためにイングレス・リソースを監視します。イングレス・リソースを更新することで、トラフィックはステージング環境から本番環境にシフトされます。詳細は、クラスタでのイングレス・コントローラの設定を参照してください。

デプロイメント・パイプラインの動的グループおよびポリシーの作成については、デプロイメント・パイプライン・ポリシーを参照してください。詳細は、DevOps IAMポリシーを参照してください。

Oracle Cloudコンソール、REST APIおよびCLIを使用したDevOpsへのアクセスについては、DevOpsへのアクセスを参照してください。

    1. ナビゲーション・メニューを開き、「開発者サービス」をクリックします。「DevOps」で、「プロジェクト」をクリックします。
    2. プロジェクトおよびデプロイメント・パイプラインを選択します。
    3. パイプラインにステージを追加するには、「+」アイコンをクリックし、「ステージの追加」を選択します。
    4. ステージ・タイプとして「カナリア戦略」を選択し、「次」をクリックします。
    5. デプロイメント・タイプとして「OKE」を選択します。
    6. ステージの名前と説明を入力します。説明の追加はオプションです。
    7. 「環境」で、カナリア・トラフィックがシフトされる既存のクラスタ環境を選択します。
    8. カナリア・ネームスペースを入力します。たとえば、canary-envです。

      ネームスペースは、OKEクラスタ内にカナリア・デプロイメント環境を定義するために使用されます。

    9. 「アーティファクトの選択」をクリックし、DevOpsプロジェクトから1つ以上のアーティファクト・リソースを選択します。

      DevOpsサービスは、Kubernetesマニフェスト・アーティファクトのKubernetesサーバー側の適用を、コンソールに表示されている順序で実行します。また、アーティファクトを削除して別のものを選択したり、アーティファクト・リストを並べ替えたりできます。パイプライン・ステージでアーティファクトを削除しても、アーティファクト・リソースはプロジェクトから削除されません。Kubernetesサーバー側の適用の詳細は、サーバー側の適用を参照してください。

    10. NGINXイングレス名を入力します。たとえば、ingress-nginxです。

      これは、アプリケーションのイングレス・リソースの名前です。DevOpsサービスは、このイングレス・リソースの注釈を変更してデプロイメント戦略を実行します。

    11. 次へ」をクリックします。
    12. デプロイメント実行を検証するか、「なし」を選択して検証しないように選択できます。

      アプリケーションを検証するために、カスタム・ファンクションがパイプラインに追加されます。「関数を使用してカスタム・ロジックを実行します」を選択します。次の値を入力します:

      1. ステージの名前と説明を入力します。説明の追加はオプションです。
      2. 「環境」で、呼び出す既存のファンクションを選択します。

        読取り専用の「ファンクション名」フィールドに、パイプラインでコールされるファンクションが表示されます。

      3. (オプション)アーティファクトを選択してステージに追加するには、「アーティファクトの選択」をクリックします。

        DevOpsプロジェクトから既存のアーティファクト・リソースを選択します。アーティファクトは、汎用(ユニバーサル)ファイル・タイプである必要があります。アーティファクトのパラメータは、JSON形式である必要があり、プレースホルダを持つことができます。デプロイメント時にプレースホルダを引数値に置換するようにDevOpsアーティファクト・リソースを構成する場合は、「パラメータ化の許可」チェック・ボックスを選択する必要があります。詳細は、パラメータの構成を参照してください。

        次に、2つのユーザー定義パラメータとその値を渡すための汎用アーティファクト・コンテンツの例を示します:
        • パラメータ: test_nameapp_version
        • 値: {"test_name":"verify_production", "app_version":"${app_version}"}
      4. 「ステージ実行モード」で、非同期実行または同期実行を選択します。

        「非同期実行」を選択した場合、サービスはファンクションを呼び出しますが、ファンクションの完了を待機しません。「同期実行」を選択した場合、サービスはファンクションを呼び出し、ファンクションの完了を待機します。

      5. 検証を無効にするか有効にするかを選択します。

        検証が有効な場合、サービスはファンクションの戻り値を検証します。戻り値は、UTF-8文字列リテラルのtrueまたはfalseです。戻り値がtrueの場合、ステージは「成功」としてマークされ、「失敗」としてマークされます。

        検証が無効な場合、サービスは戻り値を検証しません。

        検証は、ステージ実行モードとして「同期実行」オプションを選択した場合にのみ実行されます。

      6. (オプション)パイプラインにタグを追加するには、「タグ付けオプションの表示」をクリックします。タグ付けとは、テナンシ内のリソースを整理およびトラッキングできるメタデータ・システムです。

        タグ・ネームスペースを選択できます。選択しなければ、フリーフォーム・タグが追加されます。対応するタグ・キーおよびタグ値を入力します。複数のタグを追加できます。

    13. 次へ」をクリックします。
    14. トラフィックの一部をカナリア環境にシフトする「シフト・トラフィック」ステージの名前とオプションの説明を入力します。
    15. ランプアップ制限をパーセンテージで入力して、シフトする最大トラフィックを指定します。値は1から25である必要があります。

      たとえば、ランプアップ制限が20の場合、トラフィックの20%がカナリア環境にシフトされます。

    16. 次へ」をクリックします。
    17. 手動の「承認」ステージの名前と説明を入力します。説明の追加はオプションです。
    18. 承認者数を入力し、「次」をクリックします。
    19. 「本番カナリア」ステージの名前と説明を入力します。説明の追加はオプションです。
    20. 「本番環境」で、カナリア環境で検証されたアプリケーションのデプロイに使用される既存のクラスタ環境を選択します。
    21. 本番ネームスペースを入力します。
    22. ステージが失敗した場合に、デプロイメントを最後に成功したバージョンに自動的にロールバックするには、「自動ロールバック」チェック・ボックスを選択します。
    23. (オプション)パイプラインにタグを追加するには、「タグ付けオプションの表示」をクリックします。タグ付けとは、テナンシ内のリソースを整理およびトラッキングできるメタデータ・システムです。

      詳細は、リソース・タグを参照してください。

    24. ステージをパイプラインに追加するには、「追加」をクリックします。

      モーダル・ウィンドウが開き、OKEカナリア・デプロイメント戦略の一部である様々なステージ構成のステータスが表示されます。これには、カナリア・デプロイメント、トラフィック・シフト、承認および本番デプロイメントのステージが含まれます。検証が成功しなかった場合は、失敗した各ステージに固有のエラー・メッセージを確認し、修正処理を実行できます。

      検証が成功した場合は、必要に応じて、デプロイメント・パイプラインを実行するか、パイプラインに順次またはパラレルにステージを追加できます。

    ノート

    最初のカナリアOKEデプロイメントでは、デプロイメントの実行中、アプリケーションがカナリア環境にデプロイされた後に「サービスが一時的に使用できません」というエラー・メッセージが表示されます。本番環境のイングレス・リソースがまだ存在しないためで、これは予期された動作です。エラーは本番ステージで解決されるため、このメッセージを無視してデプロイメントを続行できます。
  • OKEカナリア・ステージを作成するには、create-deploy-oke-canary-stageコマンドを実行します:

    oci devops deploy-stage create-deploy-oke-canary-stage

    必須パラメータ:

    • --canary-strategy
    • --kubernetes-manifest-artifact-ids
    • --oke-cluster-environment-id
    • --pipeline-id
    • --stage-predecessor-collection

    このコマンドのヘルプを表示するには:

    oci devops deploy-stage create-oke-canary-stage -h

    ファンクションの呼出しステージを作成するには、create-invoke-function-stageコマンドを実行します:

    oci devops deploy-stage create-invoke-function-stage

    必須パラメータ:

    • --function-environment-id
    • --is-async
    • --is-validation-enabled
    • --pipeline-id
    • --stage-predecessor-collection

    このコマンドのヘルプを表示するには:

    oci devops deploy-stage create-invoke-function-stage -h

    手動承認ステージを作成するには、create-manual-approval-stageコマンドを実行します:

    oci devops deploy-stage create-manual-approval-stage

    必須パラメータ:

    • --approval-policy
    • --pipeline-id
    • --stage-predecessor-collection

    このコマンドのヘルプを表示するには:

    oci devops deploy-stage create-manual-approval-stage -h

    OKEカナリア承認ステージを作成するには、create-oke-canary-approval-stageコマンドを実行します:

    oci devops deploy-stage create-oke-canary-approval-stage

    必須パラメータ:

    • --oke-canary-traffic-shift-stage-id
    • --approval-policy
    • --pipeline-id
    • --stage-predecessor-collection

    このコマンドのヘルプを表示するには:

    oci devops deploy-stage create-oke-canary-approval-stage -h

    deploy-stageのすべてのコマンドを取得するには:

    oci devops deploy-stage -h
  • ステージを作成するには、CreateDeployStage操作を使用します。パイプラインに追加するステージに応じて、次の値をステージ・タイプとして選択します:

    • Container Engine for Kubernetes (OKE)カナリア・デプロイメント・ステージ: OKE_CANARY_DEPLOYMENT
    • ファンクションの呼出しステージ: INVOKE_FUNCTION
    • OKEカナリア・トラフィック・シフト・ステージ: OKE_CANARY_TRAFFIC_SHIFT
    • OKEカナリア承認ステージ: OKE_CANARY_APPROVAL