'How can I test the value of multiple keys at once in a node affinity rule? Is there a key wildcard?
Let's assume I have a node labeled with the labels myKey1: 2, myKey2: 5, myKey3: 3, myKey4: 6. I now want to check if one of those labels has a value greater than 4 and if so schedule my workload on this node. For that I use the following nodeAffinity rule:
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
I would instead love to use something shorter to be able to address a bunch of similar labels like e.g.
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: myKey*
operator: Gt
values:
- 4
so basically using a key-wildcard and the different checks connected via a logical OR. Is this possible or is there another solution to check the value of multiple similar labels?
Solution 1:[1]
As Matthias M wrote in the comment:
I would add an extra label to all nodes, which should match. I think that was the simplest solution. Was that also a solution for you? kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node
In your situation, it will actually be easier to just add another key and check only one condition. Alternatively, you can try to use set-based values:
Newer resources, such as
Job,Deployment,ReplicaSet, andDaemonSet, support set-based requirements as well.
selector:
matchLabels:
component: redis
matchExpressions:
- {key: tier, operator: In, values: [cache]}
- {key: environment, operator: NotIn, values: [dev]}
matchLabelsis a map of{key,value}pairs. A single{key,value}in thematchLabelsmap is equivalent to an element ofmatchExpressions, whosekeyfield is "key", theoperatoris "In", and thevaluesarray contains only "value".matchExpressionsis a list of pod selector requirements. Valid operators include In, NotIn, Exists, and DoesNotExist. The values set must be non-empty in the case of In and NotIn. All of the requirements, from bothmatchLabelsandmatchExpressionsare ANDed together -- they must all be satisfied in order to match.
For more about it read also this question.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Miko?aj G?odziak |
