本文档介绍如何配置超时值,以防集群节点的排空违反 Pod 中断预算 (PDB)。
排空节点后,必须终止该节点上的所有 Pod。默认情况下,如果终止 Pod 违反 PDB,则会阻止排空节点。
在某些情况下,您可能希望配置违反 PDB 的节点排空时间上限。例如,您可能希望在启动集群更新或升级之前配置超时值。或者,您可能需要为当前因违反 PDB 而被阻止排空的节点配置超时值。
设置超时值
每个节点都由一个机器对象表示。
列出集群中的机器对象:
kubectl --kubeconfig CLUSTER_KUBECONFIG get machines
将 CLUSTR_KUBECONIFG 替换为集群 kubeconfig 文件的路径。
输出示例:
my-node-pool-7f864959cd-cw472 my-node-pool-7f864959cd-kh86m my-node-pool-7f864959cd-wtpvx
打开机器对象以进行修改:
kubectl --kubeconfig CLUSTER_KUBECONFIG edit machine MACHINE_NAME
将 MACHINE_NAME 替换为机器对象的名称。
在编辑器中,添加以下注释:
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 后,删除旧的机器对象和节点对象。违反 PDB 超时注释不会在新创建的机器对象上持续保存。