Kubernetes(k8s):Pod 的 Node Selector详解

Kubernetes(k8s):Pod 的 Node Selector详解

  • [1、什么是Node Selector?](#1、什么是Node Selector?)
  • [2、Node Selector的工作原理](#2、Node Selector的工作原理)
  • [3、Node Selector的用法](#3、Node Selector的用法)

|-----------------------------|
| 💖The Begin💖点点关注,收藏不迷路💖 |

1、什么是Node Selector?

Node Selector是Kubernetes中一个用于指定Pod部署位置的重要概念。通过Node Selector,用户可以将Pod调度到具有特定标签的节点上。

这种标签通常用于区分节点的硬件配置、地理位置、网络特性等。通过合理地设置Node Selector,用户可以优化应用程序的性能、稳定性和可用性。

2、Node Selector的工作原理

Node Selector的工作原理相对简单,主要包括以下几个步骤:

1、用户为集群中的节点打上标签(Label):用户需要在Kubernetes集群中为节点打上相应的标签,以便后续将Pod调度到合适的节点上。标签可以是任意的键值对,例如zone: east、gpu: true等。

2、用户在Pod的定义中指定Node Selector:在创建Pod的时候,用户可以通过Pod的Spec部分,使用nodeSelector字段来指定Node Selector。Node Selector是一个键值对,Pod将被调度到具有匹配标签的节点上。

3、调度器进行节点选择:Kubernetes的调度器会根据Pod的Node Selector,选择具有匹配标签的节点来部署Pod。如果没有匹配的节点,则Pod将处于Pending状态,直到有合适的节点可用。

3、Node Selector的用法

1、例如:给node01 、node02 分别打上标签

给node01打上标签 zone=east 和 node02 打上标签zone=west。

sql 复制代码
# 给节点打上标签(为了演示先不给k8s-node01打标签,验证后面如果没有任何节点具有该标签,则pod会一直处于Pending状态)
kubectl label nodes k8s-node01 zone=east
kubectl label nodes k8s-node02 zone=west


## 验证标签是否已添加
kubectl get nodes --show-labels

2、使用标签调度Pod

在给节点添加了标签后,可以在Pod配置中使用nodeSelector来指定Pod应该被调度到哪些节点上。

1、例如,如果希望Pod只在zone=east的节点上运行,可以在Pod的配置文件中添加nodeSelector字段,如下所示:

clike 复制代码
vim mypod.yaml, 添加下面内容,指定  nodeSelector: zone: east
sql 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mycontainer
    image: nginx
  nodeSelector:
    zone: east

在上面的示例中,我们创建了一个名为nginx的Pod,并指定了Node Selector为zone: east。

2、使用 kubectl apply 命令将 mypod 应用到集群。

clike 复制代码
 kubectl apply -f mypod.yaml

3、查看所有pod

clike 复制代码
kubectl get pods


4、给k8s-node01节点打上zone: east标签

clike 复制代码
kubectl label nodes k8s-node01 zone=east

5、再次查看所有pod

clike 复制代码
kubectl get pods

这意味着该Pod将被调度到具有zone: east标签的节点上,如果没有任何节点具有该标签,则pod会一直处于Pending状态,直到符合要求的节点出现为止。

3、删除节点的标签

可以使用 kubectl label 命令并将要删除的标签键的值设置为空字符串。以下是如何删除节点 k8s-node01 上的 zone 标签的示例:

clike 复制代码
kubectl label nodes k8s-node01 zone-

同样地,你也可以通过相同的方式删除 k8s-node02 上的标签:

clike 复制代码
kubectl label nodes k8s-node02 zone-

通过将标签的值设置为空字符串来实现标签的删除。

|---------------------------|
| 💖The End💖点点关注,收藏不迷路💖 |

相关推荐
java干货3 分钟前
<span class=“js_title_inner“>微服务:把一个简单的问题,拆成 100 个网络问题</span>
微服务·云原生·架构
心理之旅3 小时前
高校文献检索系统
运维·服务器·容器
大佐不会说日语~4 小时前
使用Docker Compose 部署时网络冲突问题排查与解决
运维·网络·spring boot·docker·容器
Spring_java_gg5 小时前
<span class=“js_title_inner“>面向云原生时代的 LLM 推理|Kthena入局了!!!</span>
云原生
曾几何时`7 小时前
Docker容器化部署编译运行模块
运维·docker·容器
直饮水观察哨9 小时前
商用净水器亲测对比,哪个更专业?
容器
塔克拉玛攻城狮9 小时前
最新!银河麒麟v11 kubeadm部署k8s v1.35.0高可用集群
kubernetes·银河麒麟
eso19839 小时前
如何确保程序化广告系统中微服务架构的高可用性和可扩展性?
微服务·云原生·架构
Suchadar10 小时前
Docker基础命令(二)——数据卷管理端口映射与容器互联
运维·docker·容器
firstacui10 小时前
Docker容器网络管理与容器数据卷管理
运维·docker·容器