如何限制每个节点附加托管磁盘的数量 pods

How to limit amount of pods with attached managed disks per node

假设有一个集群,上面有很多不同的部署 运行。一些 pods 使用 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

Pods留在

Waiting: Container creating

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

podAntiAffinity

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

我安装的是AKS。

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

KUBE_MAX_PD_VOLS 就是您要找的。默认情况下,Azure 磁盘 的值为 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 个磁盘。

这样 pods 毫无问题地分布在节点之间,无法容纳的 pods 会一直处于 Pending 状态,直到它们找到足够的节点来容纳。