Kubernetes 中的 NodeSelector 是什么?

在 Kubernetes 中,NodeSelector 是一种基本的节点选择器,用于将 Pod 调度到指定的 Node 上。它通过节点标签(node label)来选择目标节点。

NodeSelector 的主要作用是:

  • 指定 Pod 调度到带有匹配标签的 Node 上。
  • 实现基于节点特征的 Pod 调度。

NodeSelector 定义在 Pod 中的 .spec.nodeSelector 字段,以键值对的形式指定节点标签及其值。例如:

yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec: 
  nodeSelector:
    disk: ssd
  containers:
  - name: nginx
    image: nginx:1.17.4 

这个 Pod 通过 nodeSelector 指定了 {disk: ssd} 的标签选择器,意味着该 Pod 只能调度到标记了 disk=ssd 标签的 Node 上。

NodeSelector 的工作流程是:

  1. 管理员在一组 Node 上标记不同的标签,如 disk=ssd。
  2. 用户在 Pod 的 .spec.nodeSelector 字段指定标签选择器,如 {disk: ssd}。
  3. Scheduler 找出符合选择器的 Node,对其进行过滤。
  4. 从过滤后的 Node 中选取最优的 Candidate Node 进行 Pod 调度。
  5. Pod 最终运行在带有匹配标签的 Node 上。

例如,有 3 个 Node,标签如下:

  • node1: disk=ssd
  • node2: cpu=高配
  • node3: disk=sas

一个 Pod 定义了选择器 {disk: ssd},则:

  1. 由于只有 node1 带有 disk=ssd 标签,所以 node2 和 node3 被过滤。
  2. schedule 在 node1 和其他 Candidate Node 中选取最佳节点。
  3. Pod 被调度到 node1 上运行。

所以总结来说,NodeSelector的主要作用是实现基于节点标签的Pod调度,其主要特征是:

  1. 根据节点标签选择目标节点。
    2.通过 .spec.nodeSelector 字段指定标签选择器。
  2. 使得我们可以根据节点特征选择特定节点运行Pod。
  3. 是一种简单的节点选择方式。

它的工作流程是:

  1. 管理员标记节点标签。
  2. 用户在 Pod 中指定基于键值对的选择器。
  3. Scheduler 过滤出匹配的节点。
  4. 从中选取最佳节点调度Pod。
  5. Pod 最终运行在选择的节点上。