【ツール活用|実務向け】Argo Rolloutsで実現する「攻めのデプロイ」:カナリアリリースを自動化しよう

導入

Kubernetes標準のDeploymentによるローリングアップデートは、迅速なデプロイには適していますが、本番環境でのリスク管理という点では不十分な場合があります。新しいバージョンをリリースした途端にエラーが急増し、手動でロールバックに奔走した経験はないでしょうか?
今回紹介する「Argo Rollouts」は、まさにその課題を解決するためのツールです。成功率やエラー率といったメトリクスを監視し、段階的にトラフィックを移行させる「プログレッシブ・デリバリー」を自動化することで、人的ミスを減らし、安全なリリースサイクルを実現します。

基礎知識

Argo Rolloutsは、Kubernetesのカスタムコントローラーであり、Deploymentの代わりに「Rollout」というカスタムリソースを使用します。
主な機能である「カナリアデプロイ」とは、新しいバージョンへ徐々にトラフィックを振り分け、問題がないことを確認してから全量切り替える手法です。これを支えるのが「AnalysisTemplate」という仕組みで、Prometheusなどの監視ツールと連携し、エラー率が閾値を超えた場合に自動ロールバックを実行するトリガーとして機能します。

実装/解決策

Argo Rolloutsを導入するには、まずコントローラーをクラスタにインストールし、DeploymentをRolloutリソースに置き換えます。ポイントは「Strategy(戦略)」の定義です。ここで、どのくらいの時間をかけてトラフィックを移行するか、どのような条件でロールバックするかを記述します。

サンプルプログラム

以下は、10分間かけてトラフィックを20%ずつ段階的に移行し、その間にエラー率を監視する基本的なRollout設定例です。


apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: sample-app
spec:
replicas: 3
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:

  • name: nginx

image: nginx:1.21 # 新しいバージョンへ更新するとデプロイが開始されます
strategy:
canary:
steps:

  • setWeight: 20 # 20%のトラフィックを新バージョンへ
  • pause: {duration: 2m} # 2分間待機してメトリクスを確認
  • setWeight: 40 # 40%へ移行
  • pause: {duration: 2m}
  • setWeight: 100 # 最終的に全トラフィックを移行

analysis:
templates:

  • templateName: success-rate-check # 成功率監視用のテンプレートを指定

応用・注意点

現場で活用する際、最も注意すべきは「AnalysisTemplateの監視対象」です。単にCPUやメモリを見るのではなく、アプリケーションのHTTP 5xxエラー率や、ビジネス指標(注文成功数など)をターゲットに設定してください。
また、陥りやすい罠として「Serviceのセレクター管理」があります。Argo Rolloutsは自動的にServiceの向き先を制御するため、手動でServiceのセレクターをいじると、コントローラーとの競合が発生します。必ずArgo Rollouts側の設定に一任するようにしましょう。まずはステージング環境で自動ロールバックの挙動を一度テストし、失敗時の挙動をチームで把握しておくことを強く推奨します。

コメント

タイトルとURLをコピーしました