PodDisruptionBudget

PodDisruptionBudget 是一個物件,用於定義可能對 Pod 集合造成之最大干擾。

apiVersion: policy/v1

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

PodDisruptionBudget

PodDisruptionBudget 是一個物件,用於定義可能對 Pod 集合造成之最大干擾


PodDisruptionBudgetSpec

PodDisruptionBudgetSpec 是 PodDisruptionBudget 的描述。


  • maxUnavailable (IntOrString)

    如果驅逐後,「selector」選取的 Pod 最多「maxUnavailable」個無法使用(即使在沒有被驅逐的 Pod 的情況下),則允許驅逐。例如,可以透過指定 0 來防止所有自願驅逐。這是與「minAvailable」互斥的設定。

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

  • minAvailable (IntOrString)

    如果驅逐後,「selector」選取的 Pod 至少「minAvailable」個仍然可用(即使在沒有被驅逐的 Pod 的情況下),則允許驅逐。因此,例如,您可以透過指定「100%」來防止所有自願驅逐。

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

  • selector (LabelSelector)

    標籤查詢,針對其驅逐由干擾預算管理的 Pod。空值選擇器將不比對任何 Pod,而空 ({}) 選擇器將選取命名空間內的所有 Pod。

  • unhealthyPodEvictionPolicy (字串)

    UnhealthyPodEvictionPolicy 定義何時應考慮驅逐不健康 Pod 的準則。目前的實作將健康 Pod 視為具有 status.conditions 項目且 type="Ready"、status="True" 的 Pod。

    有效的策略為 IfHealthyBudget 和 AlwaysAllow。如果未指定策略,則將使用預設行為,這對應於 IfHealthyBudget 策略。

    IfHealthyBudget 策略表示,只有在受保護的應用程式未中斷時(status.currentHealthy 至少等於 status.desiredHealthy),才能驅逐執行中的 Pod (status.phase="Running"),但尚未健康的 Pod。健康 Pod 將受 PDB 驅逐的約束。

    AlwaysAllow 策略意指,所有正在執行中 (status.phase="Running") 但尚未處於健康狀態的 Pod,皆視為已中斷,且無論是否符合 PDB 中的條件,皆可被驅逐。這表示已中斷應用程式的預期執行中 Pod 可能沒有機會變成健康狀態。健康狀態的 Pod 則會受到 PDB 的驅逐規範約束。

    未來可能會新增其他策略。若用戶端在 eviction 決策中遇到無法辨識的策略,應不允許驅逐不健康的 Pod。

    此欄位為 Beta 級別。當啟用功能閘道 PDBUnhealthyPodEvictionPolicy (預設為啟用) 時,eviction API 會使用此欄位。

PodDisruptionBudgetStatus

PodDisruptionBudgetStatus 代表 PodDisruptionBudget 狀態的相關資訊。狀態可能落後於系統的實際狀態。


  • currentHealthy (int32), 必填

    目前健康 Pod 的數量

  • desiredHealthy (int32), 必填

    健康 Pod 的最小期望數量

  • disruptionsAllowed (int32), 必填

    目前允許的 Pod 中斷次數。

  • expectedPods (int32), 必填

    此中斷預算計算的 Pod 總數

  • conditions ([]Condition)

    Patch 策略:依據鍵值 type 合併

    Map:在合併期間,將保留鍵值 type 的唯一值

    Conditions 包含 PDB 的條件。中斷控制器設定 DisruptionAllowed 條件。以下是 reason 欄位的已知值 (未來可能會新增其他原因): - SyncFailed:控制器遇到錯誤,且無法計算允許的中斷次數。因此,不允許任何中斷,且條件的狀態將為 False。

    • InsufficientPods:Pod 數量等於或低於 PodDisruptionBudget 所需的數量。不允許任何中斷,且條件的狀態將為 False。
    • SufficientPods:Pod 數量多於 PodDisruptionBudget 所需的數量。條件將為 True,且允許的中斷次數由 disruptionsAllowed 屬性提供。

    Condition 包含此 API 資源目前狀態某個面向的詳細資訊。

    • conditions.lastTransitionTime (Time), 必填

      lastTransitionTime 是條件上次從一個狀態轉換到另一個狀態的時間。這應該是底層條件變更的時間。如果未知,則使用 API 欄位變更的時間是可以接受的。

      Time 是 time.Time 的包裝器,支援正確地封送至 YAML 和 JSON。為 time 套件提供的許多 factory 方法提供了包裝器。

    • conditions.message (string), 必填

      message 是一段人類可讀的訊息,指示轉換的詳細資訊。這可能是空字串。

    • conditions.reason (string), 必填

      reason 包含一個程式化的識別符,指示條件上次轉換的原因。特定條件類型的產生者可以為此欄位定義預期的值和含義,以及這些值是否被視為有保障的 API。該值應為 CamelCase 字串。此欄位不得為空。

    • conditions.status (string), 必填

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

    • conditions.type (string), 必填

      條件的類型,以 CamelCase 或 foo.example.com/CamelCase 表示。

    • conditions.observedGeneration (int64)

      observedGeneration 代表條件設定所依據的 .metadata.generation。例如,如果 .metadata.generation 目前為 12,但 .status.conditions[x].observedGeneration 為 9,則條件相對於實例的目前狀態已過時。

  • disruptedPods (map[string]Time)

    DisruptedPods 包含有關 Pod 的資訊,這些 Pod 的驅逐已由 API 伺服器 eviction 子資源處理常式處理,但 PodDisruptionBudget 控制器尚未觀察到。Pod 將在此映射表中,從 API 伺服器處理驅逐請求的時間開始,到 PDB 控制器看到 Pod 已標記為刪除 (或在逾時之後) 的時間為止。映射表中的鍵是 Pod 的名稱,值是 API 伺服器處理驅逐請求的時間。如果未發生刪除且 Pod 仍然存在,PodDisruptionBudget 控制器會在一段時間後自動將其從列表中移除。如果一切順利,此映射表在大多數時間都應為空。映射表中有大量條目可能表示 Pod 刪除存在問題。

    Time 是 time.Time 的包裝器,支援正確地封送至 YAML 和 JSON。為 time 套件提供的許多 factory 方法提供了包裝器。

  • observedGeneration (int64)

    更新此 PDB 狀態時觀察到的最新世代。DisruptionsAllowed 和其他狀態資訊僅在 observedGeneration 等於 PDB 的物件世代時才有效。

PodDisruptionBudgetList

PodDisruptionBudgetList 是 PodDisruptionBudget 的集合。


操作


get 讀取指定的 PodDisruptionBudget

HTTP 請求

GET /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}

參數

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

    PodDisruptionBudget 的名稱

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

    命名空間

  • pretty (在查詢中): 字串

    pretty

回應

200 (PodDisruptionBudget): OK

401: 未經授權

get 讀取指定 PodDisruptionBudget 的狀態

HTTP 請求

GET /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}/status

參數

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

    PodDisruptionBudget 的名稱

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

    命名空間

  • pretty (在查詢中): 字串

    pretty

回應

200 (PodDisruptionBudget): OK

401: 未經授權

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

HTTP 請求

GET /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets

參數

回應

200 (PodDisruptionBudgetList): OK

401: 未經授權

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

HTTP 請求

GET /apis/policy/v1/poddisruptionbudgets

參數

回應

200 (PodDisruptionBudgetList): OK

401: 未經授權

create 建立 PodDisruptionBudget

HTTP 請求

POST /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets

參數

回應

200 (PodDisruptionBudget): OK

201 (PodDisruptionBudget): 已建立

202 (PodDisruptionBudget): 已接受

401: 未經授權

update 取代指定的 PodDisruptionBudget

HTTP 請求

PUT /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}

參數

回應

200 (PodDisruptionBudget): OK

201 (PodDisruptionBudget): 已建立

401: 未經授權

update 取代指定 PodDisruptionBudget 的狀態

HTTP 請求

PUT /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}/status

參數

回應

200 (PodDisruptionBudget): OK

201 (PodDisruptionBudget): 已建立

401: 未經授權

patch 部分更新指定的 PodDisruptionBudget

HTTP 請求

PATCH /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}

參數

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

    PodDisruptionBudget 的名稱

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

    命名空間

  • body: Patch, 必填

  • dryRun (在查詢中): 字串

    dryRun

  • fieldManager (在查詢中): 字串

    fieldManager

  • fieldValidation (在查詢中): 字串

    fieldValidation

  • force (在查詢中): 布林值

    force

  • pretty (在查詢中): 字串

    pretty

回應

200 (PodDisruptionBudget): OK

201 (PodDisruptionBudget): 已建立

401: 未經授權

patch 部分更新指定 PodDisruptionBudget 的狀態

HTTP 請求

PATCH /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}/status

參數

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

    PodDisruptionBudget 的名稱

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

    命名空間

  • body: Patch, 必填

  • dryRun (在查詢中): 字串

    dryRun

  • fieldManager (在查詢中): 字串

    fieldManager

  • fieldValidation (在查詢中): 字串

    fieldValidation

  • force (在查詢中): 布林值

    force

  • pretty (在查詢中): 字串

    pretty

回應

200 (PodDisruptionBudget): OK

201 (PodDisruptionBudget): 已建立

401: 未經授權

delete 刪除 PodDisruptionBudget

HTTP 請求

DELETE /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}

參數

回應

200 (Status): OK

202 (Status): 已接受

401: 未經授權

deletecollection 刪除 PodDisruptionBudget 的集合

HTTP 請求

DELETE /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets

參數

回應

200 (Status): OK

401: 未經授權

此頁面為自動產生。

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

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