Kubernetes——浅聊 Affinity

浅聊 Affinity

在 Kubernetes 中,

Affinity 是指用于控制 Pod 调度的策略,包括亲和性(Affinity)反亲和性(Anti-Affinity)2种。

亲和性(Affinity)包括 NodeAffinity 和 PodAffinity 2种。

反亲和性(Anti-Affinity)包括 NodeAntiAffinity 和 PodAntiAffinity 2种。

 一、亲和性(Affinity)

  • 表示 Pod 需要部署在哪些节点上。
  • 比如需要部署在某些特定的节点或者跟其他某些节点上的 Pod 在同一个节点上。
    • NodeAffinity:用于将 Pod 调度到特定的节点上,可以指定 Pod 可调度的节点的标签要求。nodeAffinity 又包含以下两个方面:
      • requiredDuringSchedulingIgnoredDuringExecution(硬亲和规则):表示 Pod 只能调度到满足指定标签要求的节点上。

      • preferredDuringSchedulingIgnoredDuringExecution(软亲和规则):表示如果有多个节点同时满足指定标签要求,优先调度 Pod 到这些节点上。
    • PodAffinity:用于将 Pod 部署到与其他 Pod 所在节点相同的节点上,可以指定其他 Pod 的标签要求。podAffinity 包含以下三个方面:
      • requiredDuringSchedulingIgnoredDuringExecution(硬亲和规则):表示 Pod 只能调度到其他 Pod 所在节点上,这些节点需要满足指定标签的要求。

      • preferredDuringSchedulingIgnoredDuringExecution:表示 Pod 优先调度到其他 Pod 所在节点上,这些节点需要满足指定标签的要求。

      • requiredDuringSchedulingRequiredDuringExecution:表示 Pod 必须调度到与其他 Pod 所处节点相同的节点上

二、反亲和性(Anti-Affinity)

  • 表示 Pod 不能部署在哪些节点上。
  • 如不能与某些特定的节点或者跟某些 Pod 在同一个节点上。
    • NodeAntiAffinity:确保同一节点上运行的 Pod 来自不同的批次或不同的服务。
      • requiredDuringSchedulingIgnoredDuringExecution:表示强制规定同一个容器组内的 Pod 不能调度到同一个节点上。

      • preferredDuringSchedulingIgnoredDuringExecution:表示会尽可能让调度器将同一个容器组内的 Pod 分散到多个节点上,但是如果没有其他可以选择的节点,它仍然可以调度到同一个节点上。
    • PodAntiAffinity:确保同一批副本中的 Pod 不会被调度到同一节点上。
      • requiredDuringSchedulingIgnoredDuringExecution:必须满足反亲和规则才能将 Pod 调度到节点上。在集群调度器调度 Pod 时,必须满足该规则,否则不可调度。如果新节点上的 Pod 发生故障而无法继续正常运行,调度器会重新将其调度到其他节点。

      • preferredDuringSchedulingIgnoredDuringExecution:推荐遵循反亲和规则,但不强制要求。只有当没有其他合适的节点并且规则的 score 达到某个预定义的阈值时,才会将 Pod 调度到同一节点上。

      • requiredDuringSchedulingRequiredDuringExecution:必须满足反亲和规则才能将 Pod 调度到节点上。如果新节点上的 Pod 发生故障而无法继续正常运行,调度器不会将其调度到其他节点。
posted @ 2023-04-28 14:55  左扬  阅读(144)  评论(0编辑  收藏  举报
levels of contents