關於 GKE 中的 StatefulSet


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

關於 StatefulSet

StatefulSet 代表一組 Pod,這些 Pod 具備專屬永久身分,以及由 GKE 維護的穩定主機名稱,無論排定在那個位置,都會保留這些名稱。任何 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 Service 資源。詳情請參閱「Kubernetes 服務類型」。

無頭服務

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

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

同類應用程式探索

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

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

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

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

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

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

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

使用 StatefulSet

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

後續步驟