searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

浅谈k8s中的节点亲和性NodeAffinity

2024-07-03 09:52:36
7
0

背景

在 Kubernetes(k8s)中,节点亲和性(NodeAffinity)是一种用于控制 Pod 调度到特定节点的机制。可为 Pod 的调度提供了更精细的控制,以满足各种复杂的应用场景需求。

硬亲和

requiredDuringSchedulingIgnoredDuringExecution 是节点亲和性中的一种强制约束,是一种硬亲和。这意味着在 Pod 调度时,必须满足指定的节点条件,否则 Pod 将无法被调度。例如,如果定义了某个 Pod 必须调度到具有特定标签的节点上,那么在调度过程中,Kubernetes 的调度器会严格遵循这个规则。

软亲和

preferredDuringSchedulingIgnoredDuringExecution 则相对较为灵活。它表示在满足其他调度条件的前提下,优先将 Pod 调度到符合指定条件的节点上,但并非强制要求,是一种软亲和

举例

假设有一个集群的一个区域ZoneA,其中一部分节点配备了 GPU(这些节点上有gpu-enable: true的标签),而另一部分没有GPU的节点是没有此标签。
此时,某个Pod只申请CPU和MEMORY资源,我们可使用硬亲和性来保证调度到ZoneA的同时,使用软亲和性使其尽量调度到调度到非 GPU 节点上。
具体编排如下:

......
     spec:
         affinity:
           nodeAffinity:
             requiredDuringSchedulingIgnoredDuringExecution:
               nodeSelectorTerms:
                 - matchExpressions:
                     - key: my-zone
                       operator: In
                       values:
                         - zone-a
             preferredDuringSchedulingIgnoredDuringExecution:
             - weight: 50
               preference:
                 matchExpressions:
                 - key: gpu-enable
                   operator: NotIn
                   values:
                   - true
.......

总结

通过合理地配置节点亲和性,我们能够更加高效地利用集群资源,确保 Pod 能够被调度到最适合的节点上,从而提高整个集群的性能和资源利用率。

总之,k8s 中的节点亲和性为我们提供了强大的工具,使我们能够根据实际需求灵活地控制 Pod 的调度,以实现更优化的集群管理。

0条评论
0 / 1000
duhj1
3文章数
0粉丝数
duhj1
3 文章 | 0 粉丝