コンテンツにスキップ

リソース定義@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はkubectl applyコマンドでリソースを作成しているだけなため、デプロイ手法は、Deploymentの.spec.strategyキーや、DaemonSetとStatefulSetの.spec.updateStrategyキーの設定値に依存する。

ArgoCDのstrategyオプションを使用することにより、これらのKubernetesリソース自体を冗長化し、より安全にapplyを行える。

▼ 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

▼ canary

argocd_canary-release

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

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

サービスメッシュツールでは手動カナリアリリースを実装できるが、これと連携し、サービスメッシュツールで自動カナリアリリースを実現できる。

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  namespace: argocd
  name: foo-canary-rollout
spec:
  strategy:
    # カナリアリリース
    canary:
      steps:
        canaryService: canary-virtual-service
        stableService: stable-virtual-service


.spec.template

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

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

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