K8s pods亲和力&抗亲和力,柔软(preferredDuringScheduling)在1.4中不受尊重?

时间:2017-02-16 15:26:52

标签: kubernetes

我正在试验K8s 1.4 pod亲和力 - 抗亲和力。我试图让K8s尽可能地在同一节点上将相同服务的pod聚集在一起(即,如果不能在服务已经存在的节点上放置更多,则仅转到下一个节点)。为此,我设置了:

  1. 硬性(requiredDuringScheduling)反亲和关系,以排除已运行不同服务的地方(pod_label_xyz不在[value-a]

  2. 尝试运行相同服务(preferredDuringScheduling中的pod_label_xyz) - 权重100

  3. 的软([value-a])亲和力
  4. 软件(preferredDuringScheduling)反亲和力,尝试不运行相同服务尚未运行的地方(pod_label_xyz不存在) - 重量100

  5. 当有5个节点和3个服务时pod_label_xyz& (value-avalue-bvalue-c),每个使用复制控制器创建一个pod,第一个pod正确安排,当扩展其中任何一个时,第一个硬规则受到尊重K8S。但是,第2和第3(实际上是第2个冗余)不受尊重。我看到当我向上扩展时,K8尝试将pod推送到空节点(未被任何其他服务使用),即使有能力安排更多服务已经运行的地方。实际上,如果我进一步扩展,则会在原始节点以及新节点(以前未使用的节点)上创建新的pod。

    请告知我是否遗漏了某些内容

    谢谢

    这是我使用的注释

    scheduler.alpha.kubernetes.io/affinity: >
        {  
           "podAffinity":{  
              "preferredDuringSchedulingIgnoredDuringExecution":[  
                 {  
                    "weight":100,
                    "podAffinityTerm":{  
                       "labelSelector":{  
                          "matchExpressions":[  
                             {  
                                "key":"pod_label_xyz",
                                "operator":"Exists"
                             },
                             {  
                                "key":"pod_label_xyz",
                                "operator":"In",
                                "values":[  
                                   "value-a"
                                ]
                             }
                          ]
                       },
                       "namespaces":[  
                          "sspni-882-frj"
                       ],
                       "topologyKey":"kubernetes.io/hostname"
                    }
                 }
              ]
           },
           "podAntiAffinity":{  
              "requiredDuringSchedulingIgnoredDuringExecution":[  
                 {  
                    "labelSelector":{  
                       "matchExpressions":[  
                          {  
                             "key":"pod_label_xyz",
                             "operator":"Exists"
                          },
                          {  
                             "key":"pod_label_xyz",
                             "operator":"NotIn",
                             "values":[  
                                "value-a"
                             ]
                          }
                       ]
                    },
                    "namespaces":[  
                       "sspni-882-frj"
                    ],
                    "topologyKey":"kubernetes.io/hostname"
                 }
              ],
              "preferredDuringSchedulingIgnoredDuringExecution":[  
                 {  
                    "weight":100,
                    "podAffinityTerm":{  
                       "labelSelector":{  
                          "matchExpressions":[  
                             {  
                                "key":"pod_label_xyz",
                                "operator":"DoesNotExist"
                             }
                          ]
                       },
                       "namespaces":[  
                          "sspni-882-frj"
                       ],
                       "topologyKey":"kubernetes.io/hostname"
                    }
                 }
              ]
           }
        }
    

0 个答案:

没有答案