k8s-pod 调度详解

         在默认情况下,一个pod在那个node节点与逆行,是由scheduler组件采用相应的 算法计算出来的,这个工程不受人工孔子,但是在实际使用中,这并不满足需求,因为很多情况下,我们想控制某些pod到某些节点上

  • 自动调度:运行在那个节点上完全由schedluer算法计算得出
  • 定向调度:nodename 、nodeselector
  • 亲和性调度:nodeaffinity、 podaffinity、 podantiaffininty
  • 容忍调度: taints 、tolertion

一  定向调度

利用pod声明nodename或nodeselector形式,实现定向,这调度方式是强制性的

[root@master ~]# cat pod.base.yaml 
apiVersion: v1
kind: Pod
metadata: 
     name: test-v1
     namespace: dev
     labels:
        version: "1"
        env: "test"
spec:       
 containers: 
   - name: busybox
     image: busybox
     command: ["/bin/sh","-c","touch /tmp/1.txt;while true;do /bin/echo $(date + %T)>> /tmp/1.txt; sleep 3; done;"]
     env: 
       - name: "HOSTNAME"
         value: "slurmmaster"
 nodeName: server1 ##二级目录

查看pod信息

[root@master ~]# kubectl get pod -n dev -o wide
NAME      READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
test-v1   2/2     Running   0          77s   10.244.2.16   server1   <none>           <none>

标签调度

nodeselector用于将pod添加到指定标签的node节点上,他也是强制约束

//首先分别创建node节点添加标签
##为server1 添加 host为server1的标签
[root@master ~]# kubectl label nodes server1 host=server1
node/server1 labeled
[root@master ~]# kubectl label nodes server2 host=server2
node/server2 labeled

 将pod放到server1

[root@master ~]# cat pod.base.yaml 
apiVersion: v1
kind: Pod
metadata: 
     name: test-v1
     namespace: dev
     labels:
        version: "1"
        env: "test"
spec:       
 containers:
   - name: nginx1
     image: nginx:1
     ports:
       - name: nginx-port 
         containerPort: 80 
     resources: 
         limits: 
            cpu: "0.1"
            memory: "1G"  
     livenessProbe:
         exec:
            command: ["/bin/ls","/tmp/"] #执行查看一个文件   
 nodeSelector: 
    host:server1    
//查看发现是在server1上面的
[root@master ~]# kubectl get pod -n dev  -o wide
NAME      READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
test-v1   2/2     Running   0          14s   10.244.2.17   server1   <none>           <none>

三 亲和性调度

        优选选择满足条件的node进行调度,也可以调度到不满足调节的节点上,使调度更加灵活

affinity主要分三类:

  • nodeaffinity:以node为目标,解决pod可以调度到那些node问题
  • podaffinity:pod为目标,解决pod可以和那些存在pod部署同一个拓步中的问题
  • podantiaffinity: 以pod为目标,解决pod不饿能和那些已存在pid部署在同一个拓步中的问题

 关系符说明

        

- matchExpressions
    - key:env
      operator:Exists ##匹配存在标签key为env的节点
    - key:env
      operator:In
      values: ["xxx","yyy"] ##匹配key为env且值为xx或yyy 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值