注意点

同时指定 nodeSelector 和 nodeAffinity ,必须两个条件都满足
指定多个 nodeSelectorTerms 有一个匹配即可
一个 nodeSelectorTerms 中有多个 matchExpressions, 必须全部满足
node 标签变化,已经调度完成的 pod 不受影响
软亲和没有符合节点 pod 调度其他,硬亲和没有符合节点 pod 处于 Pending


pod.spec.affinity.nodeAffinity

软策略

pod.spec.affinity.nodeAffinity.preferredDuringSchedulingIgnoredDuringExecution

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: web-dep
  5. spec:
  6. replicas: 5
  7. selector:
  8. matchLabels:
  9. app: web-dep
  10. template:
  11. metadata:
  12. labels:
  13. app: web-dep
  14. spec:
  15. containers:
  16. - image: nginx
  17. name: web-dep-nginx
  18. affinity:
  19. nodeAffinity:
  20. preferredDuringSchedulingIgnoredDuringExecution:
  21. - weight: 10
  22. preference:
  23. matchExpressions:
  24. - key: kubernetes.io/hostname
  25. operator: In
  26. values:
  27. - node03
  28. - node04
  29. - weight: 90
  30. preference:
  31. matchExpressions:
  32. - key: kubernetes.io/hostname
  33. operator: In
  34. values:
  35. - node01
  36. - node02

硬策略

pod.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: web-dep
  5. spec:
  6. replicas: 5
  7. selector:
  8. matchLabels:
  9. app: web-dep
  10. template:
  11. metadata:
  12. labels:
  13. app: web-dep
  14. spec:
  15. containers:
  16. - image: nginx
  17. name: web-dep-nginx
  18. affinity:
  19. nodeAffinity:
  20. requiredDuringSchedulingIgnoredDuringExecution:
  21. nodeSelectorTerms:
  22. - matchExpressions:
  23. - key: kubernetes.io/hostname
  24. operator: In
  25. values:
  26. - node01
  27. - node02
  28. - node03
  29. - node04

参数整理

键值运算关系

operator
In key 的 值 在 value 列表
NotIn key 的 值 不在 value 列表
Gt key 的 值 大于
Lt key 的 值 小于
Exists 只判断 key 存在,不写 value
DoesNotExist 只判断 key 不存在,不写 value