1

想象一下,我在单独的 k8s 节点上有一些我需要的 pod,如果我知道两个 pod 都有标签,我可以使用这样的东西my/label=somevalue

affinity:
  podAntiAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 2
        podAffinityTerm:
          labelSelector:
            matchLabels:
              my/label: somevalue

我有一些我需要根据同一标签的多个值分开的豆荚,这些值预先不知道(它是一个由操作员计算的共享密钥)。

有没有一种方法可以指定podAffinityTerm适用于共享相同值的任何 pod 的a my.label,而不管实际值如何?

例如

Pod a has my/label=x
Pod b has my/label=x
Pod c has my/label=y
Pod d has my/label=y

我需要 pod a & b 彼此分离,pod c & d 相互分离,但例如 a 和 d 可以在同一个节点上共存

4

1 回答 1

1

据我所知,在不知道标签值的情况下,没有指定亲和力的内置方法。在创建 pod 的阶段,您需要提供 key 和 value。为了使亲和力正常工作,您需要在创建时知道该值并将其放入适当的 yaml 文件中。

从理论上讲,您可以创建一个自定义脚本,例如在 bash 中,这将为您带来价值

它是由操作员计算的分片键

然后在 yaml 文件中替换它。这样在创建 pod 时会正确设置。

此外,您还可以查看Well-Known Labels、Annotations 和 Taints

根据您的具体情况,您可以尝试与他们一起解决问题。另请参阅此页面。在那里,您将找到有关将 pod 分配给节点的所有信息。

于 2021-09-09T08:19:03.947 回答