本文說明如何設定逾時值,以防叢集節點排空作業違反 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 違規逾時註解不會保留在新建立的機器物件上。