5.11. Pod 中断预算
了解并配置 pod 中断预算。
5.11.1. 了解如何使用 pod 中断预算来指定必须在线的 pod 数量
pod 中断预算允许在操作过程中指定 pod 的安全限制,如排空节点以进行维护。
PodDisruptionBudget
是一个 API 对象,用于指定在某一时间必须保持在线的副本的最小数量或百分比。在项目中进行这些设置对节点维护(比如缩减集群或升级集群)有益,而且仅在自愿驱除(而非节点失败)时遵从这些设置。
PodDisruptionBudget
对象的配置由以下关键部分组成:
- 标签选择器,即一组 pod 的标签查询。
可用性级别,用来指定必须同时可用的最少 pod 的数量:
-
minAvailable
是必须始终可用的 pod 的数量,即使在中断期间也是如此。 -
maxUnavailable
是中断期间可以无法使用的 pod 的数量。
-
Available
指的是具有 Ready=True
的 pod 数量。ready=True
指的是能够服务请求的 pod,并应添加到所有匹配服务的负载平衡池中。
允许 maxUnavailable
为 0%
或 0
,minAvailable
为 100%
或等于副本数,但这样设置可能会阻止节点排空操作。
您可以使用以下命令来检查所有项目的 pod 中断预算:
$ oc get poddisruptionbudget --all-namespaces
输出示例
NAMESPACE NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE openshift-apiserver openshift-apiserver-pdb N/A 1 1 121m openshift-cloud-controller-manager aws-cloud-controller-manager 1 N/A 1 125m openshift-cloud-credential-operator pod-identity-webhook 1 N/A 1 117m openshift-cluster-csi-drivers aws-ebs-csi-driver-controller-pdb N/A 1 1 121m openshift-cluster-storage-operator csi-snapshot-controller-pdb N/A 1 1 122m openshift-cluster-storage-operator csi-snapshot-webhook-pdb N/A 1 1 122m openshift-console console N/A 1 1 116m #...
如果系统中至少有 minAvailable
个 pod 正在运行,则 PodDisruptionBudget
被视为是健康的。超过这一限制的每个 pod 都可被驱除。
根据您的 pod 优先级与抢占设置,可能会无视 pod 中断预算要求而移除较低优先级 pod。
5.11.2. 使用 pod 中断预算指定必须在线的 pod 数量
您可以使用 PodDisruptionBudget
对象来指定某一时间必须保持在线的副本的最小数量或百分比。
流程
配置 pod 中断预算:
使用类似以下示例的对象定义来创建 YAML 文件:
apiVersion: policy/v1 1 kind: PodDisruptionBudget metadata: name: my-pdb spec: minAvailable: 2 2 selector: 3 matchLabels: name: my-pod
或者:
apiVersion: policy/v1 1 kind: PodDisruptionBudget metadata: name: my-pdb spec: maxUnavailable: 25% 2 selector: 3 matchLabels: name: my-pod
运行以下命令,将对象添加到项目中:
$ oc create -f </path/to/file> -n <project_name>