0

我有一个 K8s 部署,其规范中有节点选择器和硬 pod 反亲和性。节点选择器将 Pod 部署限制在一个节点池中,而反亲和性限制没有两个标签为“App: test-pool”的 pod 被安排在一起。

观察

目标节点池有 9 个具有唯一标签值的节点,节点选择器使用该标签值来定位 pod 部署。当我有 9 个部署副本时,所有副本都安排在不同的节点上,我认为这是由于反亲和性。但是,一旦我将副本增加到 10,我看到第 10 个 pod 也成功部署在节点池中的 9 个节点之一上,从而忽略了硬反关联规则。以下是depoyment的片段:

kind: Deployment
metadata:
  name: test-app
  labels:
    App: test-app
spec:
  replicas: 10
  selector:
    matchLabels:
      App: test-app
  strategy:
    rollingUpdate:
      maxSurge: 34%
      maxUnavailable: 34%
    type: RollingUpdate
  template:
    metadata:
      labels:
        App: test-app
    spec:
      nodeSelector:
        app: test-pool
      tolerations:
        - key: "dedicated"
          operator: "Equal"
          value: "test-pool"
          effect: "NoSchedule"
        - key: "dedicated"
          operator: "Equal"
          value: "test-pool"
          effect: "NoExecute"
            affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - test-app
            topologyKey: kubernetes.io/hostname
   
...
...

期待

我期待参考反关联规则的调度失败。有人可以解释为什么在调度过程中忽略了 pod 反关联规则。

4

0 回答 0