[k8s]我尝试使用podAntiAffinity将一个Pod分配给普通Pod,将其他Pod分配给现场节点

时间:2020-04-28 06:10:46

标签: kubernetes kubernetes-pod affinity

我有6个节点,所有节点都带有标签“ group:emp”,其中4个带有标签“ iKind:spot”,其中2个带有标签“ ikind:normal”。

我使用部署yaml将一个Pod分配给普通Pod,将另一个Pod分配给了现场节点,但是没有用。

我开始将Pod的数量从1增加到6,但是到2时,所有Pod都分配在第一个竞标节点上

App registrations

2 个答案:

答案 0 :(得分:0)

如果要在所有节点上部署Pod,则必须更改您的PreferredDuringSchedulingIgnoredDuringExecution。

更改

preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 70
            preference:
              matchExpressions:
              - key: ikind
                operator: In
                values:
                - spot

preferredDuringSchedulingIgnoredDuringExecution:
              - weight: 70
                preference:
                  matchExpressions:
                  - key: ikind
                    operator: In
                    values:
                    - spot
                    - normal

现在,它将被ikind:spotikind:normal部署在两个节点上,然后才被发现。

我已经在3个gke节点上对其进行了测试,并且一切看起来都很好。

pod-test-54dc97fbcb-9hvvm   1/1     Running       gke-cluster-1-default-pool-1ffaf1b8-gmhb   <none>           <none>
pod-test-54dc97fbcb-k2hv2   1/1     Running       gke-cluster-1-default-pool-1ffaf1b8-gmhb   <none>           <none>
pod-test-54dc97fbcb-nqd97   1/1     Running       gke-cluster-1-default-pool-1ffaf1b8-7c25   <none>           <none>
pod-test-54dc97fbcb-zq9df   1/1     Running       gke-cluster-1-default-pool-1ffaf1b8-jk6t   <none>           <none>
pod-test-54dc97fbcb-zvwhk   1/1     Running        gke-cluster-1-default-pool-1ffaf1b8-7c25   <none>           <none>

它的描述here

apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/e2e-az-name
            operator: In
            values:
            - e2e-az1
            - e2e-az2
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: another-node-label-key
            operator: In
            values:
            - another-node-label-value
  containers:
  - name: with-node-affinity
    image: k8s.gcr.io/pause:2.0

此节点关联性规则表示,只能将Pod放置在带有标签的标签上,该标签的键为kubernetes.io/e2e-az-name,其值为e2e-az1或e2e-az2。另外,在满足该条件的节点中,具有标签的键为“ another-node-label-key”且标签的值为“ another-node-label-value”的节点应该是首选。

答案 1 :(得分:0)

我将喜欢matchExpressions的节点添加到普通节点,并赋予权重30,它可以正常工作。 为了避免节点数的影响,我改变了法线和光点的权重。

当副本为1时,普通节点中有1个容器

当副本为2时,普通节点中有1个容器,点节点中有1个容器

当副本为3时,普通节点中有2个容器,现货节点中有1个容器

preferredDuringSchedulingIgnoredDuringExecution: - weight: 70 preference: matchExpressions: - key: ikind operator: In values: - normal - weight: 30 preference: matchExpressions: - key: ikind operator: In values: - spot