設定 PDB 違規逾時時間

本文說明如何設定逾時值,以防叢集節點排空作業違反 Pod 中斷預算 (PDB)。

節點清空後,節點上的所有 Pod 都必須終止。根據預設,如果終止 Pod 會違反 PDB,系統就會封鎖節點排除作業。

在某些情況下,您可能會想設定節點排空作業因 PDB 違規而遭到封鎖的最長時間。舉例來說,您可能想在開始更新或升級叢集前,先設定逾時值。或者,您可能需要為目前因 PDB 違規而無法排空的節點設定逾時值。

設定逾時值

每個節點都以 Machine 物件表示。

列出叢集中的機器物件:

kubectl --kubeconfig CLUSTER_KUBECONFIG get machines

CLUSTR_KUBECONIFG 替換為叢集 kubeconfig 檔案的路徑。

輸出內容範例:

my-node-pool-7f864959cd-cw472
my-node-pool-7f864959cd-kh86m
my-node-pool-7f864959cd-wtpvx

開啟 Machine 物件進行編輯:

kubectl --kubeconfig CLUSTER_KUBECONFIG edit machine MACHINE_NAME

MACHINE_NAME 替換為 Machine 物件的名稱。

在編輯器中新增下列註解:

onprem.cluster.gke.io/pdb-violation-timeout: TIMEOUT

TIMEOUT 替換成指定逾時時間長度的字串。有效時間單位為「s」、「m」和「h」。時間值範例:「1h」、「1h30m」、「10m」和「100s」。

如果將逾時值設為「0s」,PDB 違規事項就不會逾時。 這與預設行為相同。

範例:

apiVersion: cluster.k8s.io/v1alpha1
kind: Machine
metadata:
  annotations:
    kubelet-version: 1.23.5-gke.1502
    onprem.cluster.gke.io/gke-on-prem-version: 1.12.0-gke.430
    vm-ip-address: 203.0.113.2
    onprem.cluster.gke.io/pdb-violation-timeout: "5m"

關閉編輯工作階段。

滾動式更新

在滾動更新期間,系統會先建立新的湧入機器。接著,系統會排空舊節點,並在節點上的所有 Pod 都遭逐出後,刪除舊的 Machine 物件和 Node 物件。PDB 違規逾時註解不會保留在新建立的機器物件上。