PodDisruptionBudget
apiVersion: policy/v1
import "k8s.io/api/policy/v1"
PodDisruptionBudget
PodDisruptionBudget 是一個物件,用於定義可能對 Pod 集合造成之最大干擾
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata (ObjectMeta)
標準物件的中繼資料。更多資訊:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
spec (PodDisruptionBudgetSpec)
PodDisruptionBudget 的所需行為規格。
status (PodDisruptionBudgetStatus)
PodDisruptionBudget 最近觀察到的狀態。
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 的集合。
apiVersion: policy/v1
kind: PodDisruptionBudgetList
metadata (ListMeta)
標準物件的中繼資料。更多資訊:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
items ([]PodDisruptionBudget), 必填
Items 是 PodDisruptionBudget 的列表
操作
get
讀取指定的 PodDisruptionBudget
HTTP 請求
GET /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}
參數
回應
200 (PodDisruptionBudget): OK
401: 未經授權
get
讀取指定 PodDisruptionBudget 的狀態
HTTP 請求
GET /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}/status
參數
回應
200 (PodDisruptionBudget): OK
401: 未經授權
list
列出或監看 PodDisruptionBudget 種類的物件
HTTP 請求
GET /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets
參數
namespace (在路徑中): 字串, 必填
allowWatchBookmarks (在查詢中): 布林值
continue (在查詢中): 字串
fieldSelector (在查詢中): 字串
labelSelector (在查詢中): 字串
limit (在查詢中): 整數
pretty (在查詢中): 字串
resourceVersion (在查詢中): 字串
resourceVersionMatch (在查詢中): 字串
sendInitialEvents (在查詢中): 布林值
timeoutSeconds (在查詢中): 整數
watch (在查詢中): 布林值
回應
200 (PodDisruptionBudgetList): OK
401: 未經授權
list
列出或監看 PodDisruptionBudget 種類的物件
HTTP 請求
GET /apis/policy/v1/poddisruptionbudgets
參數
allowWatchBookmarks (在查詢中): 布林值
continue (在查詢中): 字串
fieldSelector (在查詢中): 字串
labelSelector (在查詢中): 字串
limit (在查詢中): 整數
pretty (在查詢中): 字串
resourceVersion (在查詢中): 字串
resourceVersionMatch (在查詢中): 字串
sendInitialEvents (在查詢中): 布林值
timeoutSeconds (在查詢中): 整數
watch (在查詢中): 布林值
回應
200 (PodDisruptionBudgetList): OK
401: 未經授權
create
建立 PodDisruptionBudget
HTTP 請求
POST /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets
參數
namespace (在路徑中): 字串, 必填
body: PodDisruptionBudget, 必填
dryRun (在查詢中): 字串
fieldManager (在查詢中): 字串
fieldValidation (在查詢中): 字串
pretty (在查詢中): 字串
回應
200 (PodDisruptionBudget): OK
201 (PodDisruptionBudget): 已建立
202 (PodDisruptionBudget): 已接受
401: 未經授權
update
取代指定的 PodDisruptionBudget
HTTP 請求
PUT /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}
參數
name (在路徑中): 字串, 必填
PodDisruptionBudget 的名稱
namespace (在路徑中): 字串, 必填
body: PodDisruptionBudget, 必填
dryRun (在查詢中): 字串
fieldManager (在查詢中): 字串
fieldValidation (在查詢中): 字串
pretty (在查詢中): 字串
回應
200 (PodDisruptionBudget): OK
201 (PodDisruptionBudget): 已建立
401: 未經授權
update
取代指定 PodDisruptionBudget 的狀態
HTTP 請求
PUT /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}/status
參數
name (在路徑中): 字串, 必填
PodDisruptionBudget 的名稱
namespace (在路徑中): 字串, 必填
body: PodDisruptionBudget, 必填
dryRun (在查詢中): 字串
fieldManager (在查詢中): 字串
fieldValidation (在查詢中): 字串
pretty (在查詢中): 字串
回應
200 (PodDisruptionBudget): OK
201 (PodDisruptionBudget): 已建立
401: 未經授權
patch
部分更新指定的 PodDisruptionBudget
HTTP 請求
PATCH /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}
參數
name (在路徑中): 字串, 必填
PodDisruptionBudget 的名稱
namespace (在路徑中): 字串, 必填
body: Patch, 必填
dryRun (在查詢中): 字串
fieldManager (在查詢中): 字串
fieldValidation (在查詢中): 字串
force (在查詢中): 布林值
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 (在查詢中): 字串
fieldManager (在查詢中): 字串
fieldValidation (在查詢中): 字串
force (在查詢中): 布林值
pretty (在查詢中): 字串
回應
200 (PodDisruptionBudget): OK
201 (PodDisruptionBudget): 已建立
401: 未經授權
delete
刪除 PodDisruptionBudget
HTTP 請求
DELETE /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets/{name}
參數
name (在路徑中): 字串, 必填
PodDisruptionBudget 的名稱
namespace (在路徑中): 字串, 必填
body: DeleteOptions
dryRun (在查詢中): 字串
gracePeriodSeconds (在查詢中): 整數
pretty (在查詢中): 字串
propagationPolicy (在查詢中): 字串
回應
200 (Status): OK
202 (Status): 已接受
401: 未經授權
deletecollection
刪除 PodDisruptionBudget 的集合
HTTP 請求
DELETE /apis/policy/v1/namespaces/{namespace}/poddisruptionbudgets
參數
namespace (在路徑中): 字串, 必填
body: DeleteOptions
continue (在查詢中): 字串
dryRun (在查詢中): 字串
fieldSelector (在查詢中): 字串
gracePeriodSeconds (在查詢中): 整數
labelSelector (在查詢中): 字串
limit (在查詢中): 整數
pretty (在查詢中): 字串
propagationPolicy (在查詢中): 字串
resourceVersion (在查詢中): 字串
resourceVersionMatch (在查詢中): 字串
sendInitialEvents (在查詢中): 布林值
timeoutSeconds (在查詢中): 整數
回應
200 (Status): OK
401: 未經授權
此頁面為自動產生。
如果您計畫回報此頁面的問題,請在您的問題描述中提及此頁面為自動產生。修正可能需要在 Kubernetes 專案的其他地方進行。