京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

一文搞懂K8S中的NodeSelector

2024-11-2 23:05| 发布者: 76a9| 查看: 74| 评论: 0

摘要: 目次NodeSelector是什么?为什么使用NodeSelector?怎么用NodeSelector?POD配置示例yaml配置示例怎样知道K8S上面有哪些节点,每个节点都有什么信息呢?1. 使用kubectl下令行工具检察所有节点及其标签2. 使用kubectl
目次

NodeSelector是什么?

NodeSelector 是 Kubernetes 中的一个概念,它答应用户通过标签选择器(label selectors)来指定 Pod 应该被调度到哪些节点上运行。这一机制为Pod的调度提供了机动性,使得用户可以根据节点的标签属性来控制Pod的分布。

为什么使用NodeSelector?

  • 通过NodeSelector,我们可以指定固定节点运行服务
  • 解决PV ReadWriteOnce情况下,不影响项目运行情况下,实现节点调度

怎么用NodeSelector?

  • 在使用NodeSelector之前,起首需要在目标节点上设置标签。标签是键值对,用于描述节点的特征
  • 在Pod的定义文件(YAML或JSON)中,可以通过.spec.nodeSelector字段来设置NodeSelector。
  • Pod将会被调度到至少有一个标签满足NodeSelector中所有指定条件的节点上。

POD配置示例

[code] apiVersion: v1 kind: Pod metadata: name: my-pod spec: nodeSelector: kubernetes.io/hostname: uat-xxxxx # 关键代码 containers: - name: my-container image: my-image[/code]

yaml配置示例

[code]yaml apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: replicas: 3 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: nodeSelector: # 节点选择器 kubernetes.io/hostname: uat-xxxxx # 关键代码 containers: - name: my-container image: my-image[/code]

怎样知道K8S上面有哪些节点,每个节点都有什么信息呢?

1. 使用kubectl下令行工具检察所有节点及其标签

使用以下下令可以列出集群中所有节点的信息,并显示它们的标签:

[code]kubectl get nodes --show-labels[/code]

这条下令会返回一个表格,列出每个节点的名称、状态以及它们所携带的所有标签。

2. 使用kubectl下令行工具检察特定节点的标签

[code]kubectl describe node NODE_NAME[/code]

代码举例

假设你想要检察名为k8s-node-1的节点标签,可以实验:

[code]kubectl describe node k8s-node-1[/code]

常见的NodeSelector节点标签有哪些?

地区和可用区标签:

  • failure-domain.beta.kubernetes.io/zone: 表示节点地点的可用区(AZ),用于实现高可用性和容灾策略。
  • topology.kubernetes.io/zone: (推荐的新标签,渐渐替换上面的beta标签)同样表示节点的可用区信息。

地区标签:

  • failure-domain.beta.kubernetes.io/region: 表示节点所属的地理地区,用于跨地区的高可用摆设。
  • topology.kubernetes.io/region: (推荐的新标签)表示节点的地理地区信息。

硬件和本领标签:

  • beta.kubernetes.io/instance-type: 指示节点上实例的类型,如云提供商的实例规格。
  • kubernetes.io/hostname: 节点的主机名,每个节点都会主动添加此标签。
  • node-role.kubernetes.io/: 表示节点的角色,如控制平面节点(control-plane)、worker节点等,此中 可以是详细角色名称。

硬件类型:

  • beta.kubernetes.io/instance-type: 实例类型,如m5.large,适用于云提供商。

特性标签:

  • kubernetes.io/os: 表示节点的操作系统类型,如 linux。
  • kubernetes.io/arch: 表示节点的CPU架构,如 amd64、arm64。
  • node.kubernetes.io/lifecycle: 表示节点的生命周期状态,如 shutdown,但这个标签并不常用。

自定义标签:

  • 用户可以根据需要自定义标签,如 disktype: ssd 或 gpu: true,来标识节点是否具备SSD硬盘或GPU等特定硬件。

其他常见题目

与亲和性与反亲和性区别是什么呢?

  • NodeSelector 提供了基本的调度控制
  • 节点亲和性(nodeAffinity)和反亲和性(nodeAntiAffinity)是更高级的调度规则,它们不仅支持基于标签的选择,还支持更复杂的逻辑表达,好比聚集操作、硬软限定等,提供了更细粒度的控制。

到此这篇关于一文搞懂K8S中的NodeSelector的文章就先容到这了,更多相干K8S NodeSelector内容请搜索脚本之家从前的文章或继续欣赏下面的相干文章希望各人以后多多支持脚本之家!


来源:https://www.jb51.net/server/328342gh4.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2025-7-1 17:57 , Processed in 0.036928 second(s), 19 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

返回顶部