Pod Affinity
If you have the time, you must read about Pod Affinity.
Problem
I do not want to run a specific workload (sensitive-workload) along with some disruptive workloads (mysql and prometheus) within the same node. I know that these disruptive workloads have the following pod labels:
- app=mysql (default namespace)
- app=prometheus (monitoring namespace)
kubectl get pods -l app=mysql -n default kubectl get pods -l app=prometheus -n monitoring
Solution:
apiVersion: apps/v1beta1 kind: Deployment metadata: name: sensitive-workload namespace: default spec: template: metadata: labels: app: sensitive-workload spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - mysql topologyKey: "kubernetes.io/hostname" - labelSelector: matchExpressions: - key: app operator: In values: - prometheus topologyKey: "kubernetes.io/hostname" namespaces: - monitoring
By default labelSelector will search within the same namespace of the workload. You can use the namespaces field to add more namespaces to look for.
Top comments (0)