azure - 如何限制每个节点附加托管磁盘的 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> \
...
解决方案
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 状态,直到找到足够的节点来容纳。
推荐阅读
- terraform - 如何将两个模板文件连接成一个文件并传递到 terraform 中的 ECS 容器任务定义
- sql - 无法在 SQL Developer 中使用 PDB 中添加的新用户创建连接
- django - 主机 127.0.0.1:8000 不属于域 example.com,无法识别该请求的子域
- python - 如何显示机器人已停止工作的通知?
- c++ - mariadb 连接器/c++ : /usr/bin/ld: 找不到 -lmariadbcpp
- python - python中井字游戏中的TypeError
- android - 错误:未知的命名模块“react-native-webrtc”
- python - 在 Matplotlib 上绕一个更大的圆的圆周旋转圆?
- css - 如何使轮播响应?
- c# - 使用相同用户 ID 将用户导入 AWS Cognito