kubernetes scheduling for expensive resources
You can use labels and label selectors for this.kubernates docs
Update: example
apiVersion: v1kind: Podmetadata: name: with-gpu-antiAffinityspec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: resources operator: In values: - cpu-only
Using labels and label selectors for your nodes is right. But you need to use NodeAffinity
on your pods.
Something like this:
apiVersion: v1kind: Podmetadata: name: run-with-gpuspec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/node-type operator: In values: - gpu containers: - name: your-gpu-workload image: mygpuimage
Also, attach the label to your GPU nodes:
$ kubectl label nodes <node-name> kubernetes.io/node-type=gpu