目 录CONTENT

文章目录

k8s | 深入理解组件scheduler

RobKing
2023-07-13 / 0 评论 / 0 点赞 / 155 阅读 / 897 字

k8s | 深入理解组件scheduler

​ kube-scheduler 负责分配调度 Pod 到集群内的节点上,它监听 kube-apiserver,查询还未分配 Node 的 Pod,然后根据调度策略为这些 Pod 分配节点

指定 Node 节点调度

有三种方式指定 Pod 只运行在指定的 Node 节点上

  • nodeSelector:只调度到匹配指定 label 的 Node 上
  • nodeAffinity:功能更丰富的 Node 选择器,比如支持集合操作
  • podAffinity:调度到满足条件的 Pod 所在的 Node 上

affinity 和 anti-affinity 节点亲和性和反亲和性

​ 节点亲和性和反亲和性是 Kubernetes 中的调度策略,用于控制将 Pod 调度到特定节点或避免特定节点的过程。

​ 假设你有一个 Kubernetes 集群,其中有三个节点:Node-A、Node-B 和 Node-C。现在你有两个不同的应用程序,一个是 Web 服务,一个是数据库服务。你希望将 Web 服务调度到具有高网络带宽的节点上,而将数据库服务调度到具有高性能存储的节点上。

  1. 节点亲和性示例(Web 服务): 对于 Web 服务,你可以定义一个标签 app=web,用于标识属于 Web 服务的 Pod。而你的节点 Node-A 具有标签 network=high,表示拥有高网络带宽。现在,你希望将 Web 服务的 Pod 调度到具有高网络带宽的节点上。

    在这种情况下,你可以设置节点亲和性策略,将 Pod 的选择器设置为 app=web,节点选择器设置为 network=high。这样,Kubernetes 的调度器将根据亲和性策略,将属于 Web 服务的 Pod 调度到具有高网络带宽的节点 Node-A 上。这样,Web 服务将获得较高的网络性能,提供更好的服务质量。

  2. 节点反亲和性示例(数据库服务): 对于数据库服务,你可以定义一个标签 app=db,用于标识属于数据库服务的 Pod。而你的节点 Node-B 具有标签 storage=high,表示拥有高性能存储。现在,你希望将数据库服务的 Pod 避免调度到具有高性能存储的节点上,以防止存储资源竞争。

    在这种情况下,你可以设置节点反亲和性策略,将 Pod 的选择器设置为 app=db,节点选择器设置为 storage!=high。这样,Kubernetes 的调度器将根据反亲和性策略,避免将属于数据库服务的 Pod 调度到具有高性能存储的节点 Node-B 上。相反,它们会被调度到其他节点,如 Node-A 或 Node-C 上。这样可以避免存储资源的竞争和潜在的性能问题。

​ 通过节点亲和性和反亲和性策略,你可以根据特定的标签和选择器来定义 Pod 与节点之间的关系,类比为在团队项目中的学生分组。亲和性策略类似于将某些学生分在一起合作,而反亲和性策略类似于避免某些学生合作。这样可以根据不同的需求和资源要求,有效地控制 Pod 的调度位置,以满足特定的业务需求和服务质量要求。

0

评论区