使用亲和力将两个 kubernetes pods 与未知标签值分开

Using affinity to keep two kubernetes pods apart with unknown label values

想象一下我有一些 pods 我需要在单独的 k8s 节点上,如果我知道 pods 都有一个标签 my/label=somevalue

我可以使用这样的东西
affinity:
  podAntiAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 2
        podAffinityTerm:
          labelSelector:
            matchLabels:
              my/label: somevalue

我有一些 pods 我需要根据同一标签的多个值进行分隔,这些值是事先不知道的(它是由运算符计算的共享密钥)。

有没有一种方法可以指定一个 podAffinityTerm,它适用于共享相同值 my.label 的任何 pods,而不考虑实际值?

例如

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

我需要 pods a 和 b 彼此分开,并且 pods c 和 d 彼此分开,但是例如a和d可以共存于同一个节点

据我所知,没有内置方法可以在不知道标签值的情况下指定亲和力。在创建 pod 阶段,您需要同时提供键和值。为了让 affinity 正常工作,你需要在创建时知道这个值,并把它放在合适的 yaml 文件中。

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

its a sharding key which is calculated by an operator

然后在yaml文件中替换它。这样在创建pod的时候就可以正确设置了。

此外,您还可以看看Well-Known Labels, Annotations and Taints

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