Chuyển đến nội dung chính

第 6 課:複製集與部署

使用 ReplicaSet 和 Deployment 管理多個 Pod 副本。滾動更新、回滾、部署策略(重新建立、滾動更新、藍/綠、金絲雀)。了解修訂歷史記錄以及如何安全回滾。

🎯 課程目標___HTMLTAG_1__HTMLTAG_2___了解 ReplicaSet 如何保證 Pod 副本數量、為什麼 Deployment 比純 ReplicaSet 更好、如何安全地執行滾動更新和回滾以及常見的部署策略。

Kubernetes Deployment & Rolling Update Strategies

1。副本集

ReplicaSet 確保指定數量的 Pod 副本始終運作。如果 Pod 被刪除或崩潰,ReplicaSet 會建立一個新的 Pod 來補償。

___程式碼區塊_0___

ReplicaSet 使用 標籤選擇器 來了解它管理哪些 Pod。但是,您很少直接建立 ReplicaSet — 而是使用 Deployment.

2。部署 — 為什麼它比 ReplicaSet 更好?

Deployment 是比 ReplicaSet 更高層級的抽象,允許:

    ___HTMLTAG_18__HTMLTAG_19___聲明性更新:僅聲明所需狀態,部署負責其餘 ___HTMLTAG_22__HTMLTAG_23___滾動更新:零停機部署 ___HTMLTAG_26__HTMLTAG_27___修訂歷史記錄:保存更新歷史記錄,允許回滾 ___HTMLTAG_30__HTMLTAG_31___暫停/恢復:可以暫停推出
___程式碼區塊_1___

3。滾動更新

滾動更新逐漸以新 Pod 取代舊 Pod,確保不會出現停機。

___程式碼區塊_2___

使用 maxSurge:2 和 max 不可用:1 在 5 個副本上:

  • 最多同時存在 7 個 Pod(5 + 2 個突波)
  • 至少有 4 個可用 Pod(5 - 1 個不可用)
  • Kubernetes 在終止舊 Pod 的同時建立新 Pod__HTMLTAG_51___

4。重新建立策略

在建立新 Pod 之前刪除所有舊 Pod。 有停機時間,但它很簡單且沒有版本衝突。

___程式碼區塊_3___

用於以下情況:資料庫遷移需要單一實例,不接受並行運行的2個版本。

5。修訂歷史記錄和回滾

___程式碼區塊_4___

保存的修訂數量由 spec.revisionHistoryLimit 控制(預設 10).

6。暫停和恢復推出

___程式碼區塊_5___

7。藍/綠部署

與舊版本並行部署新版本,然後將所有流量轉移到新版本。

___程式碼區塊_6___ ___程式碼區塊_7___

8。金絲雀部署

傳送一小部分流量到新版本進行測試。

___程式碼區塊_8___

9。縮放

___程式碼區塊_9___

10。應避免部署反模式

  • ❌ 不要設定資源請求/限制 → Pod 在節點壓力時被驅逐
  • ❌ No readinessProbe → 到 Pod 的流量未準備好
  • ❌ max不可用:0 和 maxSurge:同時 0 → 無效
  • ❌ 使用 最新 影像標籤 → 不可複製
  • ❌ revisionHistoryLimit:0 → 無法回滾

摘要

  • Deployment 管理 ReplicaSet,不應直接建立 ReplicaSet
  • 滾動更新:零停機,調整 maxSurge 和 maxUnavailable
  • 使用 kubectl 推出撤銷進行回滾___HTMLTAG_110__HTMLTAG_111___
  • 藍/綠:即時切換,需要雙倍資源__HTMLTAG_113___
  • Canary:逐步推出,透過副本數量控制流量%__HTMLTAG_115___