一文搞懂K8S中的NodeSelector

 更新时间:2024年10月06日 09:11:47   作者:糖~豆豆  
NodeSelector是Kubernetes用于指定Pod运行节点的机制,通过节点上的标签(label)来选择性地调度Pod,增加调度的灵活性和精确性,首先需要给节点打上标签,本文给大家介绍K8S中的NodeSelector,感兴趣的朋友一起看看吧

NodeSelector是什么?

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

为什么使用NodeSelector?

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

怎么用NodeSelector?

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

POD配置示例

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

yaml配置示例

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

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

1. 使用kubectl命令行工具查看所有节点及其标签

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

kubectl get nodes --show-labels

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

2. 使用kubectl命令行工具查看特定节点的标签

kubectl describe node NODE_NAME

代码举例

假设你想要查看名为k8s-node-1的节点标签,可以执行:

kubectl describe node k8s-node-1

常见的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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • kubernetes k8s CRD自定义资源学习笔记

    kubernetes k8s CRD自定义资源学习笔记

    这篇文章主要介绍了kubernetes k8s CRD自定义资源学习笔记,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • k8s series初级calico使用介绍

    k8s series初级calico使用介绍

    这篇文章主要为大家介绍了k8s series初级calico使用介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • K8s-helm简介及基本概念详解

    K8s-helm简介及基本概念详解

    ​Helm 使用的包格式称为 chart,它是一个描述 Kubernetes 相关资源对象的文件集合,这篇文章主要介绍了K8s-helm简介及基本概念,需要的朋友可以参考下
    2022-07-07
  • K8S中Pod重启策略及重启可能原因详细讲解

    K8S中Pod重启策略及重启可能原因详细讲解

    在k8s集群中当某个pod资源需要重启时,我们只会对其进行删除,由其pod控制器进行重新构建,下面这篇文章主要给大家介绍了关于K8S中Pod重启策略及重启可能原因的相关资料,需要的朋友可以参考下
    2023-05-05
  • 详解Kubernetes 中容器跨主机网络

    详解Kubernetes 中容器跨主机网络

    这篇文章主要为大家介绍了Kubernetes中容器跨主机网络是怎么样的,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 普通人如何在区块链行业赚钱

    普通人如何在区块链行业赚钱

    区块链是一项新技术。之所以快速吸引人们的关注,是因为比特币在2017年的暴涨,迅速吸引了大众的视线。而比特币的底层技术,主要是区块链技术
    2018-03-03
  • 玩客云内置EMMC存储刷入Armbian系统(图文详解)

    玩客云内置EMMC存储刷入Armbian系统(图文详解)

    Armbian是其他项目可以信赖的单板计算机(SBC)的基本操作系统平台,接下来通过本文给大家介绍玩客云内置EMMC存储刷入Armbian系统,需要的朋友可以参考下
    2022-05-05
  • k8s dashboard安装过程记录

    k8s dashboard安装过程记录

    这篇文章主要介绍了k8s dashboard安装过程记录,本案例k8s版本为v1.22.17,所以安装v2.7.0版本的dashboard,需要的朋友可以参考下
    2024-05-05
  • kubernetes k8s常用问题排查方法

    kubernetes k8s常用问题排查方法

    新手学习K8s最大的难度感觉是在起步动手实践的时候,Pod没有正常启动起来,或者运行了一段时间Pod自己崩溃了。是什么问题导致了它没运行起来,或是什么因素导致了它的崩溃,本文来学习总结几个使用 K8s时常见的错误现象以及排查这些现象背后问题的方法
    2022-06-06
  • k8s查看pod日志的几种实用方法汇总

    k8s查看pod日志的几种实用方法汇总

    Pod是Kubernetes中能够创建和部署的最小单元,是Kubernetes集群中的一个应用实例,总是部署在同一个节点Node上,下面这篇文章主要给大家介绍了k8s查看pod日志的几种实用方法,需要的朋友可以参考下
    2022-07-07

最新评论