コンテンツにスキップ

リソース定義@Argo Rollouts

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. Rollout

Rollout とは

Kubernetes の Deployment に代わって、Pod のライフサイクルを管理する。

Deployment よりも複雑な手法で Pod をデプロイできる。


.spec.analysis

▼ analysis とは

Progressive Delivery を使用する場合、詳細を設定する。

▼ successfulRunHistoryLimit

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  namespace: argocd
  name: foo-rollout
spec:
  analysis:
    successfulRunHistoryLimit: 10

▼ unsuccessfulRunHistoryLimit

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  namespace: argocd
  name: foo-rollout
spec:
  analysis:
    unsuccessfulRunHistoryLimit: 10


.spec.strategy

▼ strategy とは

デプロイ手法を設定する。

大前提として、そもそも ArgoCD は Kubernetes リソースを同期するため、通常の Kubernetes リソースのデプロイ手法は、Deployment の .spec.strategy キーや、DaemonSet と StatefulSet の .spec.updateStrategy キーの設定値に依存する。

一方、Rollout の .spec.strategy キーを使用すると、ブルー/グリーンデプロイメントやカナリアリリースを実装できる。

▼ blueGreen

argocd_blue-green-deployment

ブルー/グリーンデプロイメントを使用して、新しい Pod をデプロイする。

設定項目 説明
activeService 現環境へのルーティングに使用する Service を設定する。
autoPromotionEnabled 現環境から新環境への自動切り替えを有効化するか否かを設定する。もし無効化した場合、autoPromotionSeconds の秒数だけ切り替えを待機する。
autoPromotionSeconds 現環境から新環境への切り替えを手動で実行する場合、切り替えを待機する最大秒数を設定する。最大秒数が経過すると、自動的に切り替わってしまうことに注意する。
previewReplicaCount 新環境の Pod 数を設定する。
previewService 新環境へのルーティングに使用する Service を設定する。
scaleDownDelaySeconds
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  namespace: argocd
  name: foo-blue-green-rollout
spec:
  strategy:
    # ブルー/グリーンデプロイメイト
    blueGreen:
      activeService: foo-active-service
      previewService: foo-preview-service
      previewReplicaCount: 1
      autoPromotionEnabled: "true"
      scaleDownDelaySeconds: 30
  template:
  # ここで Deployment と同じような設定を実装する

▼ canary

argocd_canary-release

カナリアリリースを使用して、新しい Pod をデプロイする。

キー 説明
steps カナリアリリースの手順を設定する。
・setWeight:新しい Pod への重み付けを設定する。
・pause:次の手順に移行せずに待機する。待機秒数を設定できる。
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  namespace: argocd
  name: foo-canary-rollout
spec:
  strategy:
    # カナリアリリース
    canary:
      steps:
        - setWeight: 25
        - setWeight: 75
        - pause:
            duration: 10
  template:
  # ここで Deployment と同じような設定を実装する

Istio では、VirtualService と DestinationRule を使用してカナリアリリースを実装できる。

Argo Rollouts と Istio を連携すると、VirtualService の振り分け率を段階的に変更するカナリアリリースを自動化できる。

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  namespace: argocd
  name: foo-canary-rollout
spec:
  strategy:
    # カナリアリリース
    canary:
      canaryService: foo-canary-service
      stableService: foo-stable-service
      trafficRouting:
        istio:
          virtualService:
            name: foo-virtual-service
            routes:
              - primary
      steps:
        - setWeight: 25
        - pause:
            duration: 10


.spec.template

Deployment の spec.template キーと同じである。

Rollout で管理したい Pod を定義する。

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  namespace: argocd
  name: foo-canary-rollout
spec:
  template: ...