对于 Kubernetes 中的亲和性(Affinity),强亲和性(Hard Affinity)和弱亲和性(Soft Affinity)之间的主要区别在于容器是否要求绝对满足亲和性规则以进行调度。
强亲和性(Hard Affinity):
示例配置(YAML):
- 要求满足规则:强亲和性要求容器必须位于满足亲和性规则的节点上,否则容器将无法被调度到集群中。
- 应用案例:强亲和性适用于必须要求容器在特定节点上运行的情况。例如,您可能希望某个关键的数据库容器始终在特定的高性能节点上运行,以确保数据的快速访问和低延迟。
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: special-node
operator: In
values:
- database
弱亲和性(Soft Affinity):
- 不强制满足规则:弱亲和性允许容器在不满足亲和性规则的情况下被调度到集群中,但会尽量优先选择满足规则的节点。
- 应用案例:弱亲和性适用于您希望容器尽量满足规则,但不强制要求的情况。这可以用于一些非关键的应用容器,使其更有可能在满足条件的节点上运行,但不会使其无法调度到其他节点上。
示例配置(YAML):
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 50
preference:
matchExpressions:
- key: special-node
operator: In
values:
- application
在上述示例中,weight
表示容器在选择节点时的权重,较高的权重会更有可能使容器在匹配规则的节点上运行,但不会强制要求这一点。