在敏捷開發與微服務架構普及的今天,大型科技公司的工程團隊每天可能需要向生產環境執行數十次甚至上百次發布。

如何在不影響線上用戶、維持 零停機(Zero Downtime) 的前提下安全發布新版本?一旦新代碼包含未被發現的致命 Bug,如何將影響半徑限制在最小範圍並在秒級內全自動回滾?

Kubernetes 提供了多種部署策略(Deployment Strategies)。本文將帶你深入剖析 4 大主流部署模式的運作原理、資源開銷與選型維度。


1. 四大部署策略全景對比矩陣

部署策略停機時間 (Downtime)額外硬體資源消耗回滾速度 (Rollback)風險影響半徑適用場景
Recreate (重建)有 (全量短暫中斷)0% (完全無額外開銷)慢 (需重新啟動舊版)全量用戶受影響不相容資料庫 Schema 破壞性升級、測試環境
RollingUpdate (滾動)零停機 (需正確配置)低 (依 maxSurge 比例增加 25%)較慢 (需反向逐步滾動替換)逐步擴大標準無狀態 Web 應用與常規業務更新
Blue-Green (藍綠)零停機高 (100% 雙倍叢集資源消耗)極快 (秒級切換 Service 標籤)全量瞬間切換關鍵核心交易系統、發布前需全量預熱驗收
Canary (金絲雀)零停機極低 (僅需 1~2 個額外 Pod)極快 (立即切斷金絲雀流量)極小 (僅 1%~5% 灰度用戶)大規模高併發系統、關鍵演算法/架構重構驗證

2. RollingUpdate 滾動更新底層原理與參數調優

Kubernetes Deployment 預設採用 RollingUpdate 策略:逐步建立新版本 Pod,待其健康檢查通過後,再逐步銷毀舊版本 Pod。

Kubernetes RollingUpdate 滾動更新三階段示意圖展示原始階段全量 v1 Pod,滾動階段新增 v2 Pod 並逐步銷毀舊 v1 Pod,完成階段全量切換為 v2 Pod。階段 1: 原始狀態Pod v1 (Running)Pod v1 (Running)Pod v1 (Running)階段 2: 滾動中 (Surge)Pod v1 (Running)Pod v1 (Terminating)Pod v2 (Running)Pod v2 (Creating)階段 3: 完成發布Pod v2 (Running)Pod v2 (Running)Pod v2 (Running)

關鍵參數調優:maxSurge 與 maxUnavailable

spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 25% # 升級期間最多允許超出期望副本數的百分比(如 4 個 Pod 最多建 5 個)
      maxUnavailable: 0 # 升級期間保證 100% 的可用副本數(絕不提前關閉舊 Pod)
  • 避坑守則:必須配置 ReadinessProbe 與 preStop Hook!
    • 若無 readinessProbe,K8s 在容器進程剛啟動(Spring Boot 尚未載入完畢)就立即將流量導入,導致大量 502 Bad Gateway!
    • 必須設定 preStop: exec: command: ["sleep", "10"],讓 Pod 在收到 SIGTERM 前有足夠時間讓 kube-proxy 從負載平衡節點中摘除其 IP。

3. Blue-Green(藍綠部署)架構

藍綠部署維護兩組完全獨立但對等的環境:

Kubernetes 藍綠部署(Blue-Green)架構圖展示 Service 透過 Selector 標籤在 Blue 舊版與 Green 新版環境之間秒級原子切換流量。Kubernetes Service (線上生產流量)當前流量: selector version=blue驗收後切換: version=green ➔Blue 環境 (線上舊版 v1.0)Pod 1 (v1.0 - Running)Pod 2 (v1.0 - Running)Pod 3 (v1.0 - Running)Green 環境 (預發新版 v2.0)Pod 1 (v2.0 - 獨立內部測試通過)Pod 2 (v2.0 - 預熱完成)Pod 3 (v2.0 - 隨時待命接管)
  • 優勢:流量切換只在一瞬間(修改 Service Selector 的單一 API 操作);若發現問題,可在一秒內將 Selector 改回 Blue 完成閃電回滾。
  • 缺點:在發布期間需要消耗雙倍的伺服器算力資源。

4. 現代自動化 Canary 金絲雀分析:Argo Rollouts 實戰

在大規模架構中,人工盯著日誌確認金絲雀發布過於低效。現代雲原生標準採用 Argo Rollouts 配合 Prometheus 指標自動分析:

Argo Rollouts 自動化金絲雀分析與自適應回滾流程圖展示金絲雀發布導入 5% 流量,自動透過 Prometheus 分析成功率與 P99 延遲,指標正常則推進至 100%,異常則自動中止回滾。1. 發布金絲雀 (SetWeight: 5%)導入 5% 真實線上流量 ➔ 進入 10 分鐘指標觀察期2. 自動執行 AnalysisTemplate 指標分析查詢 Prometheus: HTTP 5xx 錯誤率是否 < 0.1%?P99 延遲是否 < 200ms?✅ 指標正常:推進 20% ➔ 50% ➔ 100% 全量發布❌ 指標異常 (5xx 超標):秒級自動中止並全量回滾!
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: order-service-rollout
spec:
  strategy:
    canary:
      steps:
        - setWeight: 5
        - pause: { duration: 10m } # 觀察 10 分鐘
        - analysis:
            templates:
              - templateName: success-rate-check
        - setWeight: 20
        - pause: { duration: 30m }
        - setWeight: 100

5. 總結

  • 標準微服務:優先選用調優後的 RollingUpdate(maxUnavailable: 0 + 精準 readinessProbe)。
  • 關鍵核心系統:採用 Blue-Green 進行充分預熱與秒級回滾。
  • 億級流量與演算法模型:採用 Argo Rollouts + Canary 實現自動化指標評估與灰度放量。