小编tak*_*omi的帖子

podAntiAffinity 不能与 nodeAffinity 一起使用

我在 k8s 上进行了一系列部署,部署相同的服务器二进制文件,但规格不同,例如内存限制等。每个部署仅运行 1 个 pod,并且希望为这些部署安排 pod,以便每个虚拟机仅安排单个 pod。

由于某些部署需要比其他部署更大的内存,因此我们结合nodeAffinity和podAntiAffinity来满足以下要求。

  • 每种类型的实例将仅分配一个带有标签pod_group_affinity==的 podper_node
  • 每个具有不同内存需求的 Pod 正确分配给具有相应内存大小的节点

下面是我的配置。

    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: node.kubernetes.io/instance-type
                operator: In
                values:
                - ${INSTANCE_TYPE}
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: pod_group_affinity
                operator: In
                values:
                - per_node
            topologyKey: "kubernetes.io/hostname"
Run Code Online (Sandbox Code Playgroud)

我首先尝试使用本地 minikube 作为单个虚拟机(并提供正确的 node.kubernetes.io/instance-type 值),但所有部署的 pod 均已安排。它不应该发生,因为所有 pod 都有 pod_group_affinity == per_node 标签。即使我删除了nodeAffinity部分,podAntiAffinity似乎仍然不起作用。

我错过了什么吗?例如,podAntiAffinity 不适用于多个部署中的 pod 间?但只要我读了这篇文章https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#more-practical-use-cases,podAntiAffinity就可以引用另一个部署中的pod标签。

问候,

编辑:由于@confused Genius的建议,我添加了更多信息来调查原因。

  • kubectl get nodes --show-labes
$ kubectl get nodes --show-labels
NAME …
Run Code Online (Sandbox Code Playgroud)

kubernetes

3
推荐指数
1
解决办法
1510
查看次数

标签 统计

kubernetes ×1