首页 > 解决方案 > 如何限制每个节点附加托管磁盘的 pod 数量

问题描述

想象一下有一个集群,上面运行着许多不同的部署。一些 pod 使用 PersistentVolumes(Azure 磁盘)。Azure 中有一个限制,可以将多少磁盘安装到 VM,这会导致调度错误,例如

Status=409 Code="OperationNotAllowed" Message="The maximum number of data disks allowed to be attached to a VM of this size is 8

豆荚留在

Waiting: Container creating

永久状态,但是在调度时,一些节点的带有附加磁盘的 pod 数量要少得多。最好限制每个节点带有附加磁盘的 pod 数量,这样这个错误就不会发生。我相信

podAntiAffinity

是我需要的,我知道我可以限制具有相同标签的 Pod 在同一节点上进行调度,但我不知道如何允许它,直到节点具有最大数量的带有磁盘的 Pod。

我的安装是AKS。

az acs create \ --orchestrator-type=kubernetes \ --orchestrator-version 1.7.9 \ --resource-group <resource_group_here> \ --name=<name_here> \ ...

标签: azurekuberneteslimitquotas

解决方案


KUBE_MAX_PD_VOLS就是你要找的。默认情况下,Azure Disks的值为 16 。因此,您可以使用具有相同附加磁盘限制 (16) 的实例,也可以将其设置为首选值。您可以在github上查看它的声明位置

您应该在调度程序声明中设置此环境变量。我在/etc/kubernetes/manifests/kube-scheduler.yaml. 这就是它现在的样子: apiVersion: "v1" kind: "Pod" metadata: name: "kube-scheduler" ... spec: containers: - name: "kube-scheduler" ... env: - name: KUBE_MAX_PD_VOLS value: "8" ...

注意spec.containers.env.KUBE_MAX_PD_VOLS设置 - 它防止在每个节点上调度超过 8 个磁盘。

这样,Pod 在节点之间传播时不会出现任何问题,无法容纳的 Pod 将保持 Pending 状态,直到找到足够的节点来容纳。


推荐阅读