我有 3 个节点,每个节点都标记如下:
- node-0 -> mongo-volume=volume-0
- 节点 1 -> mongo-volume=volume-1
- 节点 2 -> mongo-volume=volume-2
我正在寻找一种在特殊节点上安排 statefulset 副本的方法。
我首先使用 requiredDuringSchedulingIgnoredDuringExecution 的硬方法,一切正常。
然后我想通过使用preferredDuringSchedulingIgnoredDuringExecution来测试软方式。
我首先告诉我的 statefulset 优先选择具有标签volume-0的节点,没有问题,pod 都部署在node-0上。
然后我更改了对具有标签volume-1的节点的偏好。还有我的问题,pod 部署在node-0和node-2上,但node-1上的节点。
我对标签 volume-2 做了同样的事情,它再次运行良好,pod 都部署在node-2上。
节点亲和性配置:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: mongo-volume
operator: In
values:
- volume-1
当我查看节点的资源使用情况时,我注意到 node-1 的负载比其他节点多一些。它可以解释为什么调度程序拒绝在这个节点上部署 pod 吗?
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
node-0 63m 6% 795Mi 41%
node-1 116m 11% 978Mi 51%
node-2 78m 7% 752Mi 39%
我想知道为什么它适用于节点 0 和节点 2,但不适用于节点 1。如果有可能的方法来解决它。