5.4. 管理每个节点的 pod 数量上限
在 OpenShift Container Platform 中,您可以根据节点上的处理器内核数和/或硬限制,来配置可在节点上运行的 pod 数量。如果您同时使用这两个选项,则取两者中较小的限制来限制节点上的 pod 数。
超过这些值可能会导致:
- OpenShift Container Platform CPU 使用率提高。
- pod 调度缓慢。
- 潜在的内存不足情形,具体取决于节点中的内存量。
- IP 地址池耗尽。
- 资源过量使用,导致用户应用程序性能变差。
包含单个容器的一个 pod 实际上会使用两个容器。第二个容器在容器实际启动前先设置了网络。因此,运行 10 个 pod 的节点实际上运行有 20 个容器。
podsPerCore
参数根据节点的处理器内核数限制节点上可运行的 pod 数量。例如,如果将一个有 4 个处理器内核的节点上的 podsPerCore
设置为 10
,则该节点上允许的 pod 数量上限为 40。
maxPods
参数将节点上可运行的 pod 数量限制为一个固定值,不考虑节点的属性。
5.4.1. 配置每个节点的最大 pod 数量
有两个参数控制可调度到节点的 pod 数量上限,分别为 podsPerCore
和 maxPods
。如果您同时使用这两个选项,则取两者中较小的限制来限制节点上的 pod 数。
例如,如果将一个有 4 个处理器内核的节点上的 podsPerCore
设置为 10
,则该节点上允许的 pod 数量上限为 40。
先决条件
为您要配置的节点类型获取与静态
MachineConfigPool
CRD 关联的标签。执行以下步骤之一:查看机器配置池:
$ oc describe machineconfigpool <name>
例如:
$ oc describe machineconfigpool worker
输出示例
apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfigPool metadata: creationTimestamp: 2019-02-08T14:52:39Z generation: 1 labels: custom-kubelet: small-pods 1
- 1
- 如果添加了标签,它会出现在
labels
下。
如果标签不存在,则添加一个键/值对:
$ oc label machineconfigpool worker custom-kubelet=small-pods
流程
为配置更改创建自定义资源 (CR)。
max-pods
CR 配置示例apiVersion: machineconfiguration.openshift.io/v1 kind: KubeletConfig metadata: name: set-max-pods 1 spec: machineConfigPoolSelector: matchLabels: custom-kubelet: small-pods 2 kubeletConfig: podsPerCore: 10 3 maxPods: 250 4
注意将
podsPerCore
设置为0
可禁用这个限制。在上例中,
podsPerCore
的默认值为10
,maxPods
的默认值则为250
。这意味着,除非节点有 25 个以上的内核,否则podsPerCore
就是默认的限制因素。列出
MachineConfigPool
CRD 以查看是否应用了更改。如果 Machine Config Controller 抓取到更改,则UPDATING
列会报告True
:$ oc get machineconfigpools
输出示例
NAME CONFIG UPDATED UPDATING DEGRADED master master-9cc2c72f205e103bb534 False False False worker worker-8cecd1236b33ee3f8a5e False True False
更改完成后,
UPDATED
列会报告True
。$ oc get machineconfigpools
输出示例
NAME CONFIG UPDATED UPDATING DEGRADED master master-9cc2c72f205e103bb534 False True False worker worker-8cecd1236b33ee3f8a5e True False False