节点的节点相似性被忽略

时间:2019-07-26 16:48:05

标签: kubernetes kubectl kubernetes-statefulset

我有3个节点,每个节点的标签如下:

  • node-0-> mongo-volume = volume-0
  • node-1-> mongo-volume = volume-1
  • node-2-> mongo-volume = volume-2

我正在寻找一种在特殊节点上安排有状态集副本的方法。

我首先将硬性方法与requiredDuringSchedulingIgnoredDuringExecution结合使用,并且一切正常。

然后,我想通过使用preferredDuringSchedulingIgnoredDuringExecution测试软方法。

我首先告诉我的状态集偏好具有标签 volume-0 的节点,没有问题,所有吊舱都已部署在 node-0 上。

然后,我更改了具有标签 volume-1 的节点的首选项。这是我的问题,这些Pod部署在 node-0 node-2 上,但是节点部署在 node-1 上。

我对第二卷标签做了同样的操作,并且再次运行良好,所有吊舱都部署在 node-2 上。

节点关联性配置:

affinity:
  nodeAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 100
      preference:
        matchExpressions:
        - key: mongo-volume
          operator: In
          values:
          - volume-1  

当我寻找节点的资源使用情况时,我注意到node-1的负载比其他节点多。是否可以解释为什么sheduler拒绝在该节点上部署吊舱?

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。如果有可能的话,可以解决它。

1 个答案:

答案 0 :(得分:1)

相似性策略是首选在此节点上运行,而不是直接选择

关联性的权重是关联性策略的优先级。例如:

podAntiAffinity:
  preferredDuringSchedulingIgnoredDuringExecution:
  - weight: 100
    podAffinityTerm:
      labelSelector:
        matchExpressions:
        - key: k1
          operator: In
          values:
          - "v1"
      topologyKey: kubernetes.io/hostname
  - weight: 30
    podAffinityTerm:
      labelSelector:
        matchExpressions:
        - key: k2
          operator: In
          values:
          - "v2"
      topologyKey: kubernetes.io/hostname

K8s scheduler文档说:

  

kube-scheduler通过两步操作为Pod选择一个节点:

     
      
  1. 过滤

  2.   
  3. 得分

  4.   
     

过滤步骤会找到可用于安排Pod的一组节点。例如,PodFitsResources过滤器检查候选节点是否具有足够的可用资源来满足Pod的特定资源请求。在此步骤之后,节点列表包含任何合适的节点;通常,会有不止一个。如果列表为空,则该Pod尚无法安排。

     

在评分步骤中,调度程序对其余节点进行排名,以选择最合适的Pod位置。调度程序会根据活动评分规则为每个幸存的节点分配一个分数。

     

最后,kube-scheduler将Pod分配给排名最高的节点。如果存在多个得分相等的节点,则kube-scheduler会随机选择其中之一

亲和力是考虑因素的一部分,但不是全部。