Basic - Creating a StatefulSet
什麼是 StatefulSet
StatefulSet 是 Kubernetes 中的一種工作負載資源,用於管理具有穩定標識(Stable Identity)和持久化存儲的應用程式。 它主要適用於需要有序部署和縮放的應用,例如資料庫或分散式系統。
StatefulSet 的應用價值
StatefulSet 對於需要滿足以下一個或多個需求的應用程序非常有價值:
- 穩定的、唯一的網路識別子
- 每個 Pod 都有穩定的網路名稱(例如
my-app-0、my-app-1),允許應用程序在 Pod 重啟或遷移後仍能透過固定的網路標識進行通信。這對需要點對點通信的分散式系統特別重要。
- 每個 Pod 都有穩定的網路名稱(例如
- 穩定的、持久的儲存
- 每個 Pod 都關聯到特定的 PersistentVolume(PV),即使 Pod 被刪除或重新部署,數據依然保持穩定和持久性。這對需要數據一致性的應用(如資料庫)非常有幫助。
- 有序的、優雅的部屬和縮放
- StatefulSet 確保 Pod 的部署和縮放按照固定的順序進行,例如先啟動
my-app-0,然後依次啟動其他 Pod。縮放時,Pod 也會依照順序進行刪除或啟動。
- StatefulSet 確保 Pod 的部署和縮放按照固定的順序進行,例如先啟動
- 有序的、自動滾動更新
- 當 StatefulSet 的配置更新時,會按照 Pod 的序列進行滾動更新,確保在更新過程中系統穩定性不受影響。
與 Deployment 的差異
StatefulSet 與 Deployment 類似,都可以用來管理 Pod,但有以下重要差異:
- 穩定的網路標識
- 每個 Pod 都有固定的名稱,格式為
pod-name-index,如my-app-0、my-app-1。
- 每個 Pod 都有固定的名稱,格式為
- 穩定的存儲
- 每個 Pod 都會綁定到特定的 PersistentVolume(PV),即使 Pod 被刪除或重新調度,數據仍然保持一致。
- 有序部署和刪除
- Pod 的部署、更新和刪除按照固定順序進行。例如,只有在
my-app-0準備好後,my-app-1才會開始部署。
- Pod 的部署、更新和刪除按照固定順序進行。例如,只有在
StatefulSet 中的有序命名及網路 ID
有序命名(Ordinal Index)
StatefulSet 的每個 Pod 都具有穩定且有序的名稱,這些名稱由以下組成:
- StatefulSet 名稱
- 有序索引(Ordinal Index)
Pod 的命名規則為:
<StatefulSet 名稱>-<Ordinal Index>