参考链接:
https://www.cnblogs.com/centos-python/articles/10886525.html
https://blog.csdn.net/tiger435/article/details/78489369
https://www.ziji.work/kubernetes/k8s-affinity.html
# 三种亲和性:
nodeAffinity(主机亲和性),podAffinity(POD亲和性)以及podAntiAffinity(POD反亲和性)
1)nodeAffinity
主要解决POD要部署在哪些主机,以及POD不能部署在哪些主机上的问题,处理的是POD和主机之间的关系。
2)podAffinity
主要解决POD可以和哪些POD部署在同一个拓扑域中的问题(拓扑域用主机标签实现,可以是单个主机,也可以是多个主机组成的cluster、zone等。)
3)podAntiAffinity
主要解决POD不能和哪些POD部署在同一个拓扑域中的问题。它们处理的是Kubernetes集群内部POD和POD之间的关系。
# 示例:
1)podAffinity:
2)podAntiAffinity
- requiredDuringSchedulingIgnoredDuringExecution,硬约束,一定要满足,效果同NodeSelector,Pod只能调度到具有kubernetes.io/hostname=k8s-node01标签的Node节点。
- preferredDuringSchedulingIgnoredDuringExecution,软约束,不一定满足,k8s调度会尽量不调度Pod到具有kubernetes.io/hostname=k8s-node01或kubernetes.io/hostname=k8s-node02标签的Node节点。
- nodeSelectorTerms可以定义多条约束,只需满足其中一条。
- matchExpressions可以定义多条约束,必须满足全部约束。