StatefulSet

StatefulSet 代表具有一致身份的 Pod 集合。

apiVersion: apps/v1

import "k8s.io/api/apps/v1"

StatefulSet

StatefulSet 代表具有一致身份的 Pod 集合。身份定義為:

  • 網路:一個穩定的 DNS 和主機名。
  • 儲存:根據請求數量的 VolumeClaims。

StatefulSet 保證給定的網路身份始終對映到相同的儲存身份。


StatefulSetSpec

StatefulSetSpec 是 StatefulSet 的規範。


  • serviceName (string)

    serviceName 是管理此 StatefulSet 的服務的名稱。此服務必須在 StatefulSet 之前存在,並負責該集合的網路身份。Pod 獲取的 DNS/主機名遵循以下模式:pod-specific-string.serviceName.default.svc.cluster.local,其中“pod-specific-string”由 StatefulSet 控制器管理。

  • selector (LabelSelector),必需

    selector 是一個針對 Pod 的標籤查詢,應與副本數量匹配。它必須與 Pod 模板的標籤匹配。更多資訊:https://kubernetes.club.tw/docs/concepts/overview/working-with-objects/labels/#label-selectors

  • template (PodTemplateSpec),必需

    template 是描述在檢測到副本不足時將建立的 Pod 的物件。由 StatefulSet 建立的每個 Pod 都將滿足此模板,但與 StatefulSet 的其餘部分具有唯一的身份。每個 Pod 將以 <statefulsetname>-<podindex> 的格式命名。例如,一個名為“web”且索引號為“3”的 StatefulSet 中的 Pod 將被命名為“web-3”。唯一允許的 template.spec.restartPolicy 值為“Always”。

  • replicas (int32)

    replicas 是給定模板的所需副本數量。這些副本是相同模板的例項化,但各個副本也具有一致的身份。如果未指定,則預設為 1。

  • updateStrategy (StatefulSetUpdateStrategy)

    updateStrategy 指示在對模板進行修訂時,將用於更新 StatefulSet 中 Pod 的 StatefulSetUpdateStrategy。

    StatefulSetUpdateStrategy 指示 StatefulSet 控制器將用於執行更新的策略。它包括執行指示策略更新所需的任何附加引數。

    • updateStrategy.type (string)

      Type 指示 StatefulSetUpdateStrategy 的型別。預設為 RollingUpdate。

    • updateStrategy.rollingUpdate (RollingUpdateStatefulSetStrategy)

      當 Type 為 RollingUpdateStatefulSetStrategyType 時,RollingUpdate 用於傳遞引數。

      RollingUpdateStatefulSetStrategy 用於傳遞 RollingUpdateStatefulSetStrategyType 的引數。

      • updateStrategy.rollingUpdate.maxUnavailable (IntOrString)

        更新期間最大不可用 Pod 數量。值可以是絕對數字(例如:5)或所需 Pod 的百分比(例如:10%)。絕對數字透過向上取整從百分比計算。此值不能為 0。預設為 1。此欄位是 alpha 級別,僅由啟用 MaxUnavailableStatefulSet 功能的伺服器遵守。該欄位適用於範圍 0 到 Replicas-1 中的所有 Pod。這意味著如果範圍 0 到 Replicas-1 中有任何不可用的 Pod,它將被計入 MaxUnavailable。

        IntOrString 是一種可以容納 int32 或字串的型別。在 JSON 或 YAML 編組和解組時,它會生成或使用內部型別。這允許您擁有一個 JSON 欄位,例如,可以接受名稱或數字。

      • updateStrategy.rollingUpdate.partition (int32)

        Partition 指示 StatefulSet 應分割槽進行更新的序號。在滾動更新期間,所有從序號 Replicas-1 到 Partition 的 Pod 都會被更新。所有從序號 Partition-1 到 0 的 Pod 保持不變。這有助於進行基於金絲雀的部署。預設值為 0。

  • podManagementPolicy (string)

    podManagementPolicy 控制在初始擴容、替換節點上的 Pod 或縮容期間如何建立 Pod。預設策略是 OrderedReady,Pod 按遞增順序建立(pod-0,然後 pod-1,以此類推),控制器會等待每個 Pod 準備就緒後才繼續。縮容時,Pod 以相反順序刪除。另一種策略是 Parallel,它將並行建立 Pod 以匹配所需規模而不等待,並在縮容時一次性刪除所有 Pod。

  • revisionHistoryLimit (int32)

    revisionHistoryLimit 是 StatefulSet 修訂歷史中將保留的最大修訂數量。修訂歷史包括所有未由當前應用的 StatefulSetSpec 版本表示的修訂。預設值為 10。

  • volumeClaimTemplates ([]PersistentVolumeClaim)

    原子性:在合併期間將被替換

    volumeClaimTemplates 是 Pod 允許引用的宣告列表。StatefulSet 控制器負責以保持 Pod 身份的方式將網路身份對映到宣告。此列表中的每個宣告必須在模板中至少有一個容器中具有一個匹配(按名稱)的 volumeMount。此列表中的宣告優先於模板中具有相同名稱的任何卷。

  • minReadySeconds (int32)

    新建立的 Pod 在沒有任何容器崩潰的情況下應保持就緒的最短秒數,才能被認為是可用的。預設為 0(Pod 一旦準備就緒就被認為是可用的)

  • persistentVolumeClaimRetentionPolicy (StatefulSetPersistentVolumeClaimRetentionPolicy)

    persistentVolumeClaimRetentionPolicy 描述了從 volumeClaimTemplates 建立的持久卷宣告的生命週期。預設情況下,所有持久卷宣告都按需建立並保留,直到手動刪除。此策略允許更改生命週期,例如在刪除有狀態集或縮容 Pod 時刪除持久卷宣告。

    StatefulSetPersistentVolumeClaimRetentionPolicy 描述了用於從 StatefulSet VolumeClaimTemplates 建立的 PVC 的策略。

    • persistentVolumeClaimRetentionPolicy.whenDeleted (string)

      WhenDeleted 指定在刪除 StatefulSet 時,從 StatefulSet VolumeClaimTemplates 建立的 PVC 會發生什麼。預設策略 Retain 導致 PVC 不受 StatefulSet 刪除的影響。Delete 策略導致這些 PVC 被刪除。

    • persistentVolumeClaimRetentionPolicy.whenScaled (string)

      WhenScaled 指定在 StatefulSet 縮容時,從 StatefulSet VolumeClaimTemplates 建立的 PVC 會發生什麼。預設策略 Retain 導致 PVC 不受縮容的影響。Delete 策略導致複製計數以上的多餘 Pod 的相關 PVC 被刪除。

  • ordinals (StatefulSetOrdinals)

    ordinals 控制 StatefulSet 中副本索引的編號。預設的 ordinals 行為為第一個副本分配“0”索引,併為每個附加請求的副本將索引遞增 1。

    StatefulSetOrdinals 描述了用於此 StatefulSet 中副本序號分配的策略。

    • ordinals.start (int32)

      start 是表示第一個副本索引的數字。它可用於從替代索引(例如:1-indexed)而非預設的 0-indexed 名稱對副本進行編號,或用於協調副本從一個 StatefulSet 漸進式地移動到另一個。如果設定,副本索引將在範圍:[.spec.ordinals.start, .spec.ordinals.start + .spec.replicas) 內。如果未設定,則預設為 0。副本索引將在範圍:[0, .spec.replicas) 內。

StatefulSetStatus

StatefulSetStatus 代表 StatefulSet 的當前狀態。


  • replicas (int32),必需

    replicas 是由 StatefulSet 控制器建立的 Pod 數量。

  • readyReplicas (int32)

    readyReplicas 是為此 StatefulSet 建立的具有 Ready Condition 的 Pod 數量。

  • currentReplicas (int32)

    currentReplicas 是由 StatefulSet 控制器從 currentRevision 指示的 StatefulSet 版本建立的 Pod 數量。

  • updatedReplicas (int32)

    updatedReplicas 是由 StatefulSet 控制器從 updateRevision 指示的 StatefulSet 版本建立的 Pod 數量。

  • availableReplicas (int32)

    此有狀態集目標(至少 minReadySeconds 已就緒)的可用 Pod 總數。

  • collisionCount (int32)

    collisionCount 是 StatefulSet 的雜湊衝突計數。StatefulSet 控制器在需要為最新 ControllerRevision 建立名稱時,將此欄位用作衝突避免機制。

  • conditions ([]StatefulSetCondition)

    補丁策略:按鍵 type 合併

    對映:合併時將保留鍵型別上的唯一值

    代表有狀態集當前狀態的最新可用觀察結果。

    StatefulSetCondition 描述了有狀態集在某個時間點的狀態。

    • conditions.status (string),必需

      條件的 status,可以是 True、False、Unknown 之一。

    • conditions.type (string),必需

      有狀態集條件的型別。

    • conditions.lastTransitionTime (Time)

      條件上次從一種狀態轉換到另一種狀態的時間。

      Time 是 time.Time 的一個包裝器,支援正確地編組到 YAML 和 JSON。提供了 time 包提供的許多工廠方法的包裝器。

    • conditions.message (string)

      一個人類可讀的訊息,指示有關轉換的詳細資訊。

    • conditions.reason (string)

      條件上次轉換的原因。

  • currentRevision (string)

    currentRevision,如果非空,表示用於生成序列 [0,currentReplicas) 中的 Pod 的 StatefulSet 版本。

  • updateRevision (string)

    updateRevision,如果非空,表示用於生成序列 [replicas-updatedReplicas,replicas) 中的 Pod 的 StatefulSet 版本。

  • observedGeneration (int64)

    observedGeneration 是此 StatefulSet 觀察到的最新一代。它對應於 StatefulSet 的 generation,該 generation 在 API 伺服器修改時更新。

StatefulSetList

StatefulSetList 是 StatefulSet 的集合。


操作


get 讀取指定的 StatefulSet

HTTP 請求

GET /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}

引數

  • name (在路徑中): string,必填

    StatefulSet 的名稱

  • namespace (在路徑中): string,必填

    名稱空間

  • pretty (在查詢中): string

    pretty

響應

200 (StatefulSet): OK

401: 未授權

get 讀取指定的 StatefulSet 的狀態

HTTP 請求

GET /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/status

引數

  • name (在路徑中): string,必填

    StatefulSet 的名稱

  • namespace (在路徑中): string,必填

    名稱空間

  • pretty (在查詢中): string

    pretty

響應

200 (StatefulSet): OK

401: 未授權

list 列出或監視 StatefulSet 型別的物件

HTTP 請求

GET /apis/apps/v1/namespaces/{namespace}/statefulsets

引數

響應

200 (StatefulSetList): OK

401: 未授權

list 列出或監視 StatefulSet 型別的物件

HTTP 請求

GET /apis/apps/v1/statefulsets

引數

響應

200 (StatefulSetList): OK

401: 未授權

create 建立一個 StatefulSet

HTTP 請求

POST /apis/apps/v1/namespaces/{namespace}/statefulsets

引數

響應

200 (StatefulSet): OK

201 (StatefulSet): 已建立

202 (StatefulSet): 已接受

401: 未授權

update 替換指定的 StatefulSet

HTTP 請求

PUT /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}

引數

響應

200 (StatefulSet): OK

201 (StatefulSet): 已建立

401: 未授權

update 替換指定的 StatefulSet 的狀態

HTTP 請求

PUT /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/status

引數

響應

200 (StatefulSet): OK

201 (StatefulSet): 已建立

401: 未授權

patch 部分更新指定的 StatefulSet

HTTP 請求

PATCH /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}

引數

  • name (在路徑中): string,必填

    StatefulSet 的名稱

  • namespace (在路徑中): string,必填

    名稱空間

  • body: Patch,必需

  • dryRun (在查詢中): string

    dryRun

  • fieldManager (在查詢中): string

    fieldManager

  • fieldValidation (在查詢中): string

    fieldValidation

  • force (在查詢中): boolean

    force

  • pretty (在查詢中): string

    pretty

響應

200 (StatefulSet): OK

201 (StatefulSet): 已建立

401: 未授權

patch 部分更新指定的 StatefulSet 的狀態

HTTP 請求

PATCH /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}/status

引數

  • name (在路徑中): string,必填

    StatefulSet 的名稱

  • namespace (在路徑中): string,必填

    名稱空間

  • body: Patch,必需

  • dryRun (在查詢中): string

    dryRun

  • fieldManager (在查詢中): string

    fieldManager

  • fieldValidation (在查詢中): string

    fieldValidation

  • force (在查詢中): boolean

    force

  • pretty (在查詢中): string

    pretty

響應

200 (StatefulSet): OK

201 (StatefulSet): 已建立

401: 未授權

delete 刪除一個 StatefulSet

HTTP 請求

DELETE /apis/apps/v1/namespaces/{namespace}/statefulsets/{name}

引數

響應

200 (Status): OK

202 (Status): 已接受

401: 未授權

deletecollection 刪除 StatefulSet 集合

HTTP 請求

DELETE /apis/apps/v1/namespaces/{namespace}/statefulsets

引數

響應

200 (Status): OK

401: 未授權

本頁面是自動生成的。

如果你打算報告此頁面存在的問題,請在問題描述中提及此頁面是自動生成的。修復可能需要在 Kubernetes 專案的其他地方進行。

最後修改時間:2025 年 4 月 24 日上午 9:14 PST:v1.33 的 Markdown API 參考 (b84ec30bbb)