關於 GKE 中的 StatefulSet


本頁說明如何在 Google Kubernetes Engine (GKE) 中使用 StatefulSet 物件。您也可以瞭解如何部署有狀態應用程式

關於 StatefulSet

StatefulSet 代表一組具有不重複永久身分和穩定主機名稱的 Pod,無論排定在何處,GKE 都會維護這些 Pod。任何 StatefulSet Pod 的狀態資訊和其他彈性資料,都會保留在與 StatefulSet 中每個 Pod 相關聯的持續性磁碟區中。StatefulSet Pod 隨時可以重新啟動。

針對無狀態應用程式,請使用部署

StatefulSets 在 GKE 和 Kubernetes 中的運作方式類似。這份文件說明 GKE 專屬的注意事項。如要瞭解 StatefulSet 的運作方式,請參閱 Kubernetes 說明文件中關於 StatefulSet 的內容

規劃 StatefulSet 的網路

StatefulSet 會以 PersistentVolume 和專屬網路 ID (主機名稱) 的形式提供永久儲存空間。下表列出應用程式運算子設定 StatefulSet 時應注意的附帶條件:

網路注意事項 說明 最佳做法
使用 GKE Service,而非固定 IP 位址

雖然 Pod 副本有專屬的序數索引、支援每個副本的磁碟區,以及網路身分 (主機名稱),但如果 GKE 重新排程或逐出 Pod,指派給副本的 IP 位址可能會變更。

為減輕網路問題,架構應使用 Kubernetes 服務資源。詳情請參閱「Kubernetes 服務類型」。

無頭服務

初始化時,StatefulSet 會與相符的無頭服務配對。

確認 Service 中的 `metadata.name` 與 StatefulSet 中的 serviceName 欄位相符。這可讓應用程式中的每個 Pod 都能以明確定義的專屬網路位址存取。此外,無介面服務會為 StatefulSet 中的每個副本提供多個 IP 記錄,方便進行完整的對等互連探索。

同類應用程式探索

有狀態應用程式需要最少數量的副本 (仲裁) 才能正常運作,並維持完整可用性。

由於 Pod 可能會當機、重新排程或遭到撤銷,StatefulSet 中的每個副本都應能離開並重新加入仲裁。需要對等互連的應用程式應具備透過 Kubernetes 中無標題服務探索其他對等互連的功能。

根據就緒探測器和執行中探測器進行健康狀態檢查

您的應用程式應視情況正確設定就緒、存活和啟動探測。為每個探查選取逾時時間,取決於應用程式的需求。

針對 readiness 探測,請按照下列最佳做法設定應用程式,在準備好處理流量時標示為就緒:

  • 有效性探測:您可以使用有效性探測,判斷容器是否正常運作。舉例來說,資料庫副本可以使用有效性探測器,指出 GKE 應重新啟動副本,例如死結情況
  • 完備性探測:您可以使用完備性探測,暫時從提供流量的服務中移除副本。舉例來說,如果資料庫副本需要執行備份,您可能會使用就緒探針暫時停止接收要求。
  • 啟動探測:您可以透過啟動探測延遲健康狀態檢查,直到長時間執行的初始化作業完成為止。舉例來說,如果您有資料庫副本,可以透過啟動探查,等待從磁碟初始化儲存的資料。

如要進一步瞭解探測器,請參閱「設定執行中、就緒和啟動探測器」。

使用 StatefulSet

如要瞭解如何在 GKE 叢集中部署 StatefulSet 並與其互動,請參閱 Kubernetes 說明文件中的 StatefulSet 基本概念

後續步驟