🎯 課程目標___HTMLTAG_1__HTMLTAG_2___了解 ReplicaSet 如何保證 Pod 副本數量、為什麼 Deployment 比純 ReplicaSet 更好、如何安全地執行滾動更新和回滾以及常見的部署策略。
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___暫停/恢復:可以暫停推出
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___