配置 PDB 违规超时

本文档介绍如何配置超时值,以防集群节点的排空违反 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 超时注释不会在新创建的机器对象上持续保存。