当前位置: 代码网 > it编程>编程语言>Java > 11.2.k8s中pod的调度-nodeSelector节点选择器

11.2.k8s中pod的调度-nodeSelector节点选择器

2024年08月06日 Java 我要评论
NodeSelector是Kubernetes调度器的一部分,是节点选择约束的最简单推荐形式。它允许开发者根据节点的标签,精确地控制Pod在集群中的调度位置。通过在Pod的定义中设置NodeSelector,可以确保Pod只会被调度到具有特定标签的节点上。我们先创建一个普通的deploy资源,设置为10个副本,查看创建的pod;那么我们有没有方法,让pod根据我们自己的想法,创建在我们想要的节点上呐?接下来,我们就学习,关于pod调度的节点选择器,nodeSelector。

目录

一、nodeselector节点选择器

二、nodeselector的使用


一、nodeselector节点选择器

 我们先创建一个普通的deploy资源,设置为10个副本,查看创建的pod;

# 如果集群只有2个节点,可以将master节点也作为work节点
[root@k8s1 deploy]# kubectl taint nodes --all node-role.kubernetes.io/master:noschedule-

# 创建deploy资源
[root@k8s1 deploy]# cat deploy.yaml 
apiversion: apps/v1
kind: deployment
metadata:
  name: dm01
spec:
  #声明设置升级策略
  strategy:
    #设置升级的策略类型,类型有两种;
    #第一种:recreate:先停止所有pod,再批量创建新的pod;生产环境不建议使用,因为用户在此时会访问不到服务;
    #第二种:rollingupdate:滚动更新,即实现部分更新,逐渐替换掉原有的pod,也就是默认的策略;
    type: rollingupdate
    #如果设置了滚动更新rollingupdate类型,还需要设置更新的策略;
    rollingupdate:
      #在原有pod副本数量的基础上,多启动pod的数量(也就是说,更新过程中同时可以存在2+副本数个pod,新旧版本一起)
      maxsurge: 2
      #在升级的过程中最大不可访问的pod的数量(也就是说,pod副本数-1的数量可以被访问)
      maxunavailable: 1
  replicas: 10
  selector:
    matchlabels:
      k8s: oslee
  template:
    metadata:
      name: pod01
      labels:
        k8s: oslee
    spec:
      containers:
      - name: c1
        image: registry.cn-hangzhou.aliyuncs.com/oslee-dockerhub/nginx:1.27-alpine3.19
        ports:
        - containerport: 80

[root@k8s1 deploy]# kubectl apply -f deploy.yaml 
deployment.apps/dm01 created

我们发现,其是随机创建在,k8s1和k8s2节点上的;

那么我们有没有方法,让pod根据我们自己的想法,创建在我们想要的节点上呐?

接下来,我们就学习,关于pod调度的节点选择器,nodeselector

二、nodeselector的使用

通过标签让pod创建在我们想要的节点上;

# 查看节点标签
[root@k8s1 deploy]# kubectl get nodes --show-labels
name   status   roles                  age   version    labels
k8s1   ready    control-plane,master   4d    v1.23.17   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s1,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
k8s2   ready    <none>                 4d    v1.23.17   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s2,kubernetes.io/os=linux

# 给节点打标签
[root@k8s1 deploy]# kubectl label node k8s1 node=k8s1 os=lee
node/k8s1 labeled
[root@k8s1 deploy]# kubectl label node k8s2 node=k8s2 os=lee
node/k8s2 labeled
# 编辑deploy资源
[root@k8s1 deploy]# cat deploy.yaml 
apiversion: apps/v1
kind: deployment
metadata:
  name: dm01
spec:
  #声明设置升级策略
  strategy:
    #设置升级的策略类型,类型有两种;
    #第一种:recreate:先停止所有pod,再批量创建新的pod;生产环境不建议使用,因为用户在此时会访问不到服务;
    #第二种:rollingupdate:滚动更新,即实现部分更新,逐渐替换掉原有的pod,也就是默认的策略;
    type: rollingupdate
    #如果设置了滚动更新rollingupdate类型,还需要设置更新的策略;
    rollingupdate:
      #在原有pod副本数量的基础上,多启动pod的数量(也就是说,更新过程中同时可以存在2+副本数个pod,新旧版本一起)
      maxsurge: 2
      #在升级的过程中最大不可访问的pod的数量(也就是说,pod副本数-1的数量可以被访问)
      maxunavailable: 1
  replicas: 10
  selector:
    matchlabels:
      k8s: oslee
  template:
    metadata:
      name: pod01
      labels:
        k8s: oslee
    spec:
      nodeselector:
        # 根据标签调度到节点k8s1上,如果使用os=lee两个节点都有,就是两个节点都调度
        node: k8s1
      containers:
      - name: c1
        image: harbor.oslee.com/oslee-private/my-nginx:v2
        ports:
        - containerport: 80

[root@k8s1 deploy]# kubectl apply -f deploy.yaml 
deployment.apps/dm01 created

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com