如何在节点关联性规则中一次测试多个键的值?是否有键通配符?



假设我有一个标有标签的节点myKey1: 2myKey2: 5myKey3: 3myKey4: 6.我现在想检查其中一个标签的值是否大于 4,如果是,则在此节点上安排我的工作负载。为此,我使用以下nodeAffinity规则:

spec:
containers:
- name: wl1
image: myImage:latest
imagePullPolicy: IfNotPresent
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: myKey1
operator: Gt
values:
- 4
nodeSelectorTerms:
- matchExpressions:
- key: myKey2
operator: Gt
values:
- 4
nodeSelectorTerms:
- matchExpressions:
- key: myKey3
operator: Gt
values:
- 4
nodeSelectorTerms:
- matchExpressions:
- key: myKey4
operator: Gt
values:
- 4

相反,我喜欢使用更短的东西来处理一堆类似的标签,例如

affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: myKey*
operator: Gt
values:
- 4

所以基本上使用key通配符和通过逻辑OR连接的不同检查。这是否可能,或者是否有其他解决方案来检查多个相似标签的值?

正如Matthias M在评论中写道:

我会为所有节点添加一个额外的标签,它应该匹配。我认为这是最简单的解决方案。这对你来说也是一个解决方案吗?kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node

在您的情况下,实际上只需添加另一个键并仅检查一个条件会更容易。或者,您可以尝试使用基于集的值:

较新的资源,如JobDeploymentReplicaSetDaemonSet,也支持基于集的需求。

selector:
matchLabels:
component: redis
matchExpressions:
- {key: tier, operator: In, values: [cache]}
- {key: environment, operator: NotIn, values: [dev]}

matchLabels{key,value}对的地图。matchLabels映射中的单个{key,value}相当于matchExpressions的一个元素,其key字段为"key",operator为"In",values数组仅包含"值"。matchExpressions是容器选择器要求的列表。有效运算符包括 In、NotIn、Exists 和 DoesNotExist。在 In 和 NotIn 的情况下,设置的值必须为非空。来自matchLabelsmatchExpressions的所有要求都一起进行了AND--它们都必须得到满足才能匹配。

有关它的更多信息,请阅读此问题。

最新更新