StatefulSet

StatefulSet 代表一組具有一致身分識別的 Pod。

apiVersion: apps/v1

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

StatefulSet

StatefulSet 代表一組具有一致身分識別的 Pod。身分識別定義為

  • 網路:單一穩定的 DNS 與主機名稱。
  • 儲存:與請求一樣多的 VolumeClaims。

StatefulSet 保證給定的網路身分識別將始終對應到相同的儲存身分識別。


StatefulSetSpec

StatefulSetSpec 是 StatefulSet 的規格。


  • serviceName (字串), 必要

    serviceName 是管理此 StatefulSet 的服務名稱。此服務必須在 StatefulSet 之前存在,並負責集合的網路身分識別。Pod 取得 DNS/主機名稱,其格式如下:pod-specific-string.serviceName.default.svc.cluster.local,其中 "pod-specific-string" 由 StatefulSet 控制器管理。

  • selector (LabelSelector), 必要

    selector 是 Pod 的標籤查詢,應符合複本計數。它必須符合 Pod 範本的標籤。更多資訊: https://kubernetes.dev.org.tw/docs/concepts/overview/working-with-objects/labels/#label-selectors

  • template (PodTemplateSpec), 必要

    template 是描述 Pod 的物件,如果偵測到複本不足,將會建立 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 (字串)

      Type 指出 StatefulSetUpdateStrategy 的類型。預設值為 RollingUpdate。

    • updateStrategy.rollingUpdate (RollingUpdateStatefulSetStrategy)

      RollingUpdate 用於在 Type 為 RollingUpdateStatefulSetStrategyType 時傳達參數。

      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 保持不變。這有助於實現基於 Canary 的部署。預設值為 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)

    Atomic: 將在合併期間被取代

    volumeClaimTemplates 是 Pod 可以參考的宣告清單。StatefulSet 控制器負責以維護 Pod 身分的方式將網路身分對應到宣告。此清單中的每個宣告都必須在範本中的一個容器中至少有一個相符(依名稱)的 volumeMount。此清單中的宣告優先於範本中具有相同名稱的任何磁碟區。

  • minReadySeconds (int32)

    新建立的 Pod 應處於就緒狀態的最小秒數,且其容器沒有任何崩潰,才被視為可用。預設值為 0(Pod 一旦就緒就會被視為可用)

  • persistentVolumeClaimRetentionPolicy (StatefulSetPersistentVolumeClaimRetentionPolicy)

    persistentVolumeClaimRetentionPolicy 描述從 volumeClaimTemplates 建立的永久磁碟區宣告的生命週期。預設情況下,所有永久磁碟區宣告都會在需要時建立並保留,直到手動刪除。此策略允許變更生命週期,例如在刪除其 StatefulSet 或縮減其 Pod 規模時刪除永久磁碟區宣告。這需要啟用 StatefulSetAutoDeletePVC 功能閘道,該閘道為 Beta 版。

    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 中副本索引的編號。預設序數行為為第一個副本分配 "0" 索引,並為每個額外請求的副本將索引遞增 1。

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

    • ordinals.start (int32)

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

StatefulSetStatus

StatefulSetStatus 表示 StatefulSet 的目前狀態。


  • replicas (int32), required

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

  • readyReplicas (int32)

    readyReplicas 是為此 StatefulSet 建立且具有就緒條件的 Pod 數量。

  • currentReplicas (int32)

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

  • updatedReplicas (int32)

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

  • availableReplicas (int32)

    此 StatefulSet 定位的可用 Pod 總數(至少準備就緒 minReadySeconds)。

  • collisionCount (int32)

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

  • conditions ([]StatefulSetCondition)

    Patch 策略:依鍵 type 合併

    Map:在合併期間,依鍵類型保留唯一值

    表示 statefulset 目前狀態的最新可用觀察結果。

    StatefulSetCondition 描述 statefulset 在特定時間點的狀態。

    • conditions.status (string), required

      條件狀態,True、False、Unknown 其中之一。

    • conditions.type (string), required

      statefulset 條件類型。

    • 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 的世代,該世代在 API 伺服器進行變更時會更新。

StatefulSetList

StatefulSetList 是 StatefulSet 的集合。


Operations


get 讀取指定的 StatefulSet

HTTP Request

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

Parameters

  • name (in path): string, required

    StatefulSet 的名稱

  • namespace (in path): string, required

    命名空間

  • pretty (in query): string

    pretty

Response

200 (StatefulSet): OK

401: 未經授權

get 讀取指定 StatefulSet 的狀態

HTTP Request

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

Parameters

  • name (in path): string, required

    StatefulSet 的名稱

  • namespace (in path): string, required

    命名空間

  • pretty (in query): string

    pretty

Response

200 (StatefulSet): OK

401: 未經授權

list 列出或監看 StatefulSet 種類的物件

HTTP Request

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

Parameters

Response

200 (StatefulSetList): OK

401: 未經授權

list 列出或監看 StatefulSet 種類的物件

HTTP Request

GET /apis/apps/v1/statefulsets

Parameters

Response

200 (StatefulSetList): OK

401: 未經授權

create 建立 StatefulSet

HTTP Request

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

Parameters

Response

200 (StatefulSet): OK

201 (StatefulSet): 已建立

202 (StatefulSet): 已接受

401: 未經授權

update 取代指定的 StatefulSet

HTTP Request

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

Parameters

Response

200 (StatefulSet): OK

201 (StatefulSet): 已建立

401: 未經授權

update 取代指定 StatefulSet 的狀態

HTTP Request

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

Parameters

Response

200 (StatefulSet): OK

201 (StatefulSet): 已建立

401: 未經授權

patch 部分更新指定的 StatefulSet

HTTP Request

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

Parameters

  • name (in path): string, required

    StatefulSet 的名稱

  • namespace (in path): string, required

    命名空間

  • body: Patch, required

  • dryRun (in query): string

    dryRun

  • fieldManager (in query): string

    fieldManager

  • fieldValidation (in query): string

    fieldValidation

  • force (in query): boolean

    force

  • pretty (in query): string

    pretty

Response

200 (StatefulSet): OK

201 (StatefulSet): 已建立

401: 未經授權

patch 部分更新指定 StatefulSet 的狀態

HTTP Request

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

Parameters

  • name (in path): string, required

    StatefulSet 的名稱

  • namespace (in path): string, required

    命名空間

  • body: Patch, required

  • dryRun (in query): string

    dryRun

  • fieldManager (in query): string

    fieldManager

  • fieldValidation (in query): string

    fieldValidation

  • force (in query): boolean

    force

  • pretty (in query): string

    pretty

Response

200 (StatefulSet): OK

201 (StatefulSet): 已建立

401: 未經授權

delete 刪除 StatefulSet

HTTP Request

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

Parameters

Response

200 (Status): OK

202 (Status): 已接受

401: 未經授權

deletecollection 刪除 StatefulSet 的集合

HTTP Request

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

Parameters

Response

200 (Status): OK

401: 未經授權

此頁面為自動產生。

如果您計劃回報此頁面的問題,請在您的問題描述中提及此頁面為自動產生。修正可能需要在 Kubernetes 專案的其他地方進行。

上次修改時間:2024 年 8 月 28 日下午 6:01 PST:更新 v1.31 的自動產生 API 參考文件 (8ba98c79c1)