优先选择某些节点直到满

时间:2019-11-30 22:42:33

标签: kubernetes azure-aks azure-kubernetes

我有一个配置有两个相当小的VM工作程序节点的AKS集群,然后是一个使用ACI的虚拟节点。我真正想做的是让pod在两个VM节点上进行调度,直到它们装满,然后再使用虚拟节点,但是我无法使它工作。

我已经尝试使用节点亲和力,如建议的here一样,但这是行不通的,首先在虚拟节点上调度了pod。如果我使用必需的节点关联性,那么它们只会在VM节点上进行调度,但这不是我想要的。我猜这里的问题是我的VM节点上的资源可用性大大低于虚拟节点(如您所料),因此虚拟节点的权重大大提高,这抵消了相似性规则,但是我不知道我真的不知道,因为我看不到任何方法可以看到这个重量。

那么,有没有人能使这种情况奏效?

2 个答案:

答案 0 :(得分:1)

https://kubernetes.io/docs/concepts/scheduling/kube-scheduler/遍历了调度程序使用的不同计分选项,https://github.com/kubernetes/examples/blob/master/staging/scheduler-policy/scheduler-policy-config.json显示了如何自定义它们。

我怀疑您想要的是preferred亲和力,并增加了NodeAffinityPriority的得分因子。

答案 1 :(得分:0)

nodeAffinity是正确的方法,但是必须正确使用requiredDuringSchedulingIgnoredDuringExecutionpreferredDuringSchedulingIgnoredDuringExecution参数。

例如:

apiVersion: v1
kind: Pod
metadata:
  name: node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: KEY-FOR-ALL-THREE-NODES
            operator: In
            values:
            - VALUE-FOR-ALL-THREE-NODES
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        preference:
          matchExpressions:
          - key: KEY-FOR-THE-TWO-SMALL-NODES
            operator: In
            values:
            - VALE-FOR-THE-TWO-SMALL-NODES
  containers:
  - name: nginx
    image: nginx

该Pod只能在声明为key: value的节点上运行(因此,这三个节点都是如此),但是您希望它在具有重量的小节点(如果有空间)上运行100。权重是一个主观的东西,因此它应该与+1然后+100相同。

此外,由于您具有三个节点,因此您可以跳过需求部分,而仅设置首选项。