1分钟搞懂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)是更高级的调度规则,它们不仅支持基于标签的选择,还支持更复杂的逻辑表达,比如集合操作、硬软限制等,提供了更细粒度的控制。

结语

  • 今天就写到这里啦~
  • 小伙伴们,( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ我们明天再见啦~~
  • 大家要天天开心哦

欢迎大家指出文章需要改正之处~
学无止境,合作共赢

在这里插入图片描述

欢迎路过的小哥哥小姐姐们提出更好的意见哇~~
KubernetesSelector是一种用于筛选和匹配资源对象的机制。它可以用于选择特定的Pod、Service或其他Kubernetes对象。Selector通常与Label一起使用,Label是用于标识和分类资源对象的键值对。 使用Selector时,可以使用不同的操作符来指定匹配的要求。常见的操作符有等于(=)、不等于(!=)、存在(in)、不存在(not in)等。通过使用这些操作符,可以根据资源对象上的标签来进行精确的筛选和匹配。 例如,可以使用以下命令来筛选具有特定标签的节点: kubectl get nodes -l gpu=true 这将返回具有标签gpu=true的节点列表。同样,可以在其他资源对象上使用Selector来进行筛选和匹配。 SelectorKubernetes非常有用的一个概念,它允许根据特定的标签来选择和操作资源对象,从而提供更灵活和精细的控制能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [node-policy-webhook:K8s webhook处理公差,nodeSelectornodeAffinity的配置文件](https://download.csdn.net/download/weixin_42162171/18952135)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [k8s Labels 和 Selectors](https://blog.csdn.net/qq_39122387/article/details/128141059)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [k8s概念之Namespace和Lable和Selector](https://blog.csdn.net/m0_37779570/article/details/90714845)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值