3.2. ロールアウトのデプロイ


クラスター管理者は、ユーザートラフィックのサブセットを新しいアプリケーションバージョンに段階的にルーティングするように Argo Rollouts を設定できます。次に、アプリケーションがデプロイされ、機能しているかどうかをテストできます。

次の手順例では、rollouts-demo ロールアウトとサービスを作成します。次に、ロールアウトではトラフィックの 20% をアプリケーションのカナリアバージョンにルーティングし、手動によるプロモーションを待ちます。次に、トラフィック全体が新しいアプリケーションバージョンにルーティングされるまで、複数の自動プロモーションを実行します。

手順

  1. Web コンソールの Administrator パースペクティブで、Operator Installed Operator Red Hat OpenShift GitOps Rollout をクリックします。
  2. Project ドロップダウンメニューから、Rollout カスタムリソース (CR) を作成および設定するプロジェクトを作成または選択します。
  3. Create Rollout をクリックし、YAML ビューに以下の設定を入力します。

    apiVersion: argoproj.io/v1alpha1
    kind: Rollout
    metadata:
      name: rollouts-demo
    spec:
      replicas: 5
      strategy:
        canary: 1
          steps: 2
          - setWeight: 20 3
          - pause: {}  4
          - setWeight: 40
          - pause: {duration: 45}  5
          - setWeight: 60
          - pause: {duration: 20}
          - setWeight: 80
          - pause: {duration: 10}
      revisionHistoryLimit: 2
      selector:
        matchLabels:
          app: rollouts-demo
      template: 6
        metadata:
          labels:
            app: rollouts-demo
        spec:
          containers:
          - name: rollouts-demo
            image: argoproj/rollouts-demo:blue
            ports:
            - name: http
              containerPort: 8080
              protocol: TCP
            resources:
              requests:
                memory: 32Mi
                cpu: 5m
    1
    ロールアウトで使用する必要のあるデプロイメントストラテジー。
    2
    ロールアウトの手順を指定します。この例では、トラフィックの 20%、40%、60%、80% を段階的にカナリアバージョンにルーティングします。
    3
    カナリアバージョンに送信する必要があるトラフィックの割合。値が 20 の場合、トラフィックの 20% がカナリアバージョンに送信されることを意味します。
    4
    プロモーションのリクエストが見つかるまで Argo Rollouts コントローラーに、無期限に一時停止するように指定します。
    5
    Argo Rollouts コントローラーに 45 秒間一時停止するように指定します。期間の値は、秒 (s)、分 (m)、または時間 (h) で設定できます。たとえば、1 時間の場合は 1h と指定できます。値が指定されていない場合、期間の値はデフォルトで秒になります。
    6
    作成する Pod を指定します。
  4. Create をクリックします。

    注記

    ロールアウトが作成時にすぐに利用できるように、Argo Rollouts コントローラーは、.spec.template.spec.containers.image フィールドで指定された argoproj/rollouts-demo:blue の初期コンテナーイメージを安定バージョンとして自動的に扱います。最初のインスタンスでは、Rollout リソースの作成により、すべてのトラフィックがアプリケーションの安定バージョンにルーティングされ、トラフィックがカナリアバージョンに送信される部分がスキップされます。ただし、.spec.template.spec.containers.image フィールドに変更を加えた以降のすべてのアプリケーションアップグレードでは、Argo Rollouts コントローラーは通常どおりカナリアの手順を実行します。

  5. 次のコマンドを実行して、ロールアウトが正しく作成されたことを確認します。

    $ oc argo rollouts list rollouts -n <namespace> 1
    1
    Rollout リソースが定義されている namespace を指定します。

    出力例

    NAME           STRATEGY   STATUS        STEP  SET-WEIGHT  READY  DESIRED  UP-TO-DATE  AVAILABLE
    rollouts-demo  Canary     Healthy       8/8   100         5/5    5        5           5

  6. rollouts-demo ロールアウトをターゲットとする Kubernetes サービスを作成します。

    1. Web コンソールの Administrator パースペクティブで、Networking Services をクリックします。
    2. Create Service をクリックし、YAML ビューに次の設定を入力します。

      apiVersion: v1
      kind: Service
      metadata:
        name: rollouts-demo
      spec:
        ports: 1
        - port: 80
          targetPort: http
          protocol: TCP
          name: http
      
        selector: 2
          app: rollouts-demo
      1
      コンテナー内で実行するためにアプリケーションが使用するポートの名前を指定します。
      2
      selector フィールドの内容が Rollout カスタムリソース (CR) の内容と同じであることを確認します。
    3. Create をクリックします。

      ロールアウトは、作成されたサービスをカナリア ReplicaSet の Pod テンプレートハッシュで自動的に更新します。例: rollouts-pod-template-hash: 687d76d795

  7. 次のコマンドを実行して、ロールアウトの進行状況を確認します。

    $ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 1
    1
    Rollout リソースが定義されている namespace を指定します。

    出力例

    Name:            rollouts-demo
    Namespace:       spring-petclinic
    Status:          ✔ Healthy
    Strategy:        Canary
      Step:          8/8
      SetWeight:     100
      ActualWeight:  100
    Images:          argoproj/rollouts-demo:blue (stable)
    Replicas:
      Desired:       5
      Current:       5
      Updated:       5
      Ready:         5
      Available:     5
    
    NAME                                       KIND        STATUS     AGE    INFO
    ⟳ rollouts-demo                            Rollout     ✔ Healthy  4m50s
    └──# revision:1
       └──⧉ rollouts-demo-687d76d795           ReplicaSet  ✔ Healthy  4m50s  stable
          ├──□ rollouts-demo-687d76d795-75k57  Pod         ✔ Running  4m49s  ready:1/1
          ├──□ rollouts-demo-687d76d795-bv5zf  Pod         ✔ Running  4m49s  ready:1/1
          ├──□ rollouts-demo-687d76d795-jsxg8  Pod         ✔ Running  4m49s  ready:1/1
          ├──□ rollouts-demo-687d76d795-rsgtv  Pod         ✔ Running  4m49s  ready:1/1
          └──□ rollouts-demo-687d76d795-xrmrj  Pod         ✔ Running  4m49s  ready:1/1

    ロールアウトの作成後、ロールアウトの Status フィールドに Phase: Healthy が表示されることを確認できます。

  8. Rollout タブの Rollouts セクションで、rollouts-demo ロールアウトの Status フィールドに Phase: Healthy が表示されていることを確認します。

    ヒント

    または、以下のコマンドを実行して、ロールアウトが正常であることを確認できます。

    $ oc argo rollouts status rollouts-demo -n <namespace> 1
    1
    Rollout リソースが定義されている namespace を指定します。

    出力例

    Healthy

これで、Rollout CR の次の更新でカナリアデプロイメントを実行する準備が整いました。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.