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:
- 4I 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:
- 4so 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?
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.