在 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 的工作流程是:
- 管理员在一组 Node 上标记不同的标签,如 disk=ssd。
- 用户在 Pod 的 .spec.nodeSelector 字段指定标签选择器,如 {disk: ssd}。
- Scheduler 找出符合选择器的 Node,对其进行过滤。
- 从过滤后的 Node 中选取最优的 Candidate Node 进行 Pod 调度。
- Pod 最终运行在带有匹配标签的 Node 上。
例如,有 3 个 Node,标签如下:
- node1: disk=ssd
- node2: cpu=高配
- node3: disk=sas
一个 Pod 定义了选择器 {disk: ssd},则:
- 由于只有 node1 带有 disk=ssd 标签,所以 node2 和 node3 被过滤。
- schedule 在 node1 和其他 Candidate Node 中选取最佳节点。
- Pod 被调度到 node1 上运行。
所以总结来说,NodeSelector的主要作用是实现基于节点标签的Pod调度,其主要特征是:
- 根据节点标签选择目标节点。
2.通过 .spec.nodeSelector 字段指定标签选择器。 - 使得我们可以根据节点特征选择特定节点运行Pod。
- 是一种简单的节点选择方式。
它的工作流程是:
- 管理员标记节点标签。
- 用户在 Pod 中指定基于键值对的选择器。
- Scheduler 过滤出匹配的节点。
- 从中选取最佳节点调度Pod。
- Pod 最终运行在选择的节点上。