Kubernetes環境で無停止デプロイメントを超えて「安全なデプロイメント」を検討されているなら、Argo RolloutsのAnalysis機能は選択肢ではなく必須です。
本日は、デプロイメントの成否を分ける4つの主要なトリガー:Pre/PostSyncAnalysisとPre/PostPromotionAnalysisの違いを詳細に分析し、どのような状況でどの機能を使用すべきかを完全に整理してご紹介します。🚀
デプロイメントボタンを押して「どうか問題がありませんように」と祈っていた時代は終わりました。Argo Rolloutsはデプロイメントの各段階でAnalysisRunを実行し、メトリクス(Prometheus、Datadogなど)をチェックし、自動的に承認またはロールバックを行います。
その中でも、特に混同しやすい4つの分析タイミングについて深く掘り下げていきます。

1. SyncとPromotion: まず用語を整理しましょう! 💡
本格的な比較の前に、この2つの単語の意味を明確にする必要があります。
- Sync (同期): ユーザーがkubectl applyを実行したり、GitOpsツールが新しい状態をクラスターに反映する行為そのものを指します。
- Promotion (昇格): カナリアデプロイメントで、最初のステップ(例:トラフィック10%)が成功し、次のステップ(例:トラフィック50%または全体デプロイメント)へ移行する段階を指します。
2. PreSync & PostSync Analysis: 「デプロイメントの開始と終了を監視せよ」 🔍
これらの機能は主にデプロイメントのタイミングを基準に動作します。
① PreSyncAnalysis (同期前分析)
新しいバージョンのPodが作成される直前に実行されます。
- いつ使うべきか?
- 現在のクラスターの健全性が新しいアプリケーションを受け入れる準備ができているかを確認する時。
- 外部依存関係(DB、APIサーバーなど)がアクティブになっているかをチェックする時。
- 特徴: ここで失敗すると、新しいバージョンのデプロイメント自体が開始されません。
② PostSyncAnalysis (同期後分析)
新しいリソースがクラスターに作成された直後に実行されます。
- いつ使うべきか?
- 新しいバージョンのPodがReady状態になった直後、非常に基本的なヘルスチェックを実行する時。
- 本格的なトラフィック移行前に、設定値が正しく反映されているかを検証する時。
3. PrePromotion & PostPromotion Analysis: 「成功の門を守れ」 🚪
これらの機能は、デプロイメント戦略(Strategy)内の段階(Steps)の移行に関連しています。
① PrePromotionAnalysis (昇格前分析)
カナリア段階でトラフィックを次の段階へさらに多く移行する直前に実行されます。
- いつ使うべきか?
- 「さて、10%のトラフィックから50%に増やすが、これまでに受け取った10%のトラフィックデータはクリーンか?」と問う時。
- 手動承認(Manual Pause)が解除された直後、最終確認作業を自動化する時。
② PostPromotionAnalysis (昇格後分析)
トラフィックの比重を高めた直後に実行されます。
- いつ使うべきか?
- トラフィックが大幅に増加した直後(例:10% -> 100%)、負荷に耐えられずに発生する遅延時間(Latency)やエラー率を即座に検知する時。
- 完全なデプロイメント(Full Promotion)後、一定期間安定性を維持するかを監視する時。
4. コード実践例: Rolloutの定義 💻
理解を深めるために、各分析段階を含むRollout YAMLの例を用意しました。コメントを通じて各タイミングを確認してください。
YAML
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: advanced-canary-rollout
spec:
replicas: 5
strategy:
canary:
# 1. デプロイメント開始前後に実行される分析 (Sync関連)
analysis:
templates:
- templateName: cluster-health-check
# PreSync: デプロイメント開始前のチェック
preSync: {}
# PostSync: デプロイメントリソース作成後のチェック
postSync: {}
steps:
- setWeight: 20
- pause: {duration: 5m}
# 2. 段階移行(Promotion)時に実行される分析
- analysis:
templates:
- templateName: http-error-rate
# PrePromotion: 20% -> 50%へ移行する直前に実行
prePromotion: {}
# PostPromotion: 20% -> 50%へ移行した直後に実行
postPromotion: {}
- setWeight: 50
- pause: {} # 手動承認待ち
- setWeight: 100
5. 主要な要約テーブル: 何を選択すべきか? 📊
| 機能 | 実行タイミング | 主な目的 | 比喩 |
| — | — | — | — |
| PreSync | デプロイメント開始前 | インフラ/依存関係の最終チェック | 「スタジアムの門を開けてもいいか?」 |
| PostSync | デプロイメント直後 | 初期環境設定の検証 | 「選手たちはユニフォームをきちんと着ているか?」 |
| PrePromotion | 次の段階へ移行前 | 現在のトラフィックデータに基づく合否判定 | 「1セットうまくいったから、2セット目に行こうか?」 |
| PostPromotion | 次の段階へ移行後 | 拡張されたトラフィックでの安定性監視 | 「観客が増えたけど、事故は起きていないか?」 |
—
6. 結論: 戦略的な分析設計 🏁
- 最も重要なこと: PrePromotionAnalysisです。カナリアデプロイメントの本質である「一部のユーザーにのみテスト」した結果に基づいて、次の段階への進行を決定するためです。
- インフラが不安定な場合: PreSyncAnalysisを積極的に活用し、不要なデプロイメント試行を遮断してください。
- 突然の負荷が心配な場合: PostPromotionAnalysisを通じて、トラフィック急増時に即座に対応してください。
さあ、Argo RolloutsのAnalysis機能を活用して、寝ている間も安心して任せられる自動化されたデプロイメントシステムを構築しましょう! 🛠️
タグ: ArgoRollouts, Kubernetes, GitOps, CanaryDeployment, AnalysisRun, DevOps, 無停止デプロイメント, 自動化, クラウドネイティブ, プロメテウス
コメントを残す