Pod调度策略,创建Pod的流程

29 篇文章 0 订阅
22 篇文章 0 订阅


查看pod的具体信息

kubectl get pods -o wide

创建Pod的流程

master节点

create pod --apiserver–etcd(存储相关信息)
sheduler–apiserver(查看是否有新的pod创建) --etcd(读取pod)-- 调度算法 ,把pod调度到某个节点上面去

node节点

kubelet–apiserver–读取etcd拿到分配给当前节点pod–dokcer创建容器

创建流程在这里插入图片描述

影响Pod调度(资源限制和节点选择器)

影响调度属性

pod资源限制对pod调度产生影响

resources:
  requests:
   memory: “64mi”
   cpu: “250m”

根据request找到足够node节点进行调度

yaml文件中的节点选择器标签影响到pod调度

apiVersion:v1
kind:Pod
metadata:
 name:pod-example
spec:
 nodeSelector:    //标签选择器
  env_role:dev
 containers:
 - name:nginx
   image:nginx:1.15

过程:
首先对节点创建标签kubectl label node 节点名称 env_role=prod/dev,可以使用nodeSelector进行选择。

kubectl get nodes //查看节点信息
kubectl label node k8s-node01 env_role=dev   //将第一个slave节点打上dev标签
kubectl get nodes k8s-node01 --show-labels  //查看节点的标签信息

在这里插入图片描述

过程

节点的亲和性

nodeAffinity(更强大),和nodeSelector基本一致,根据节点上标签约束来决定Pod调度到哪些节点上。
有两类:

  1. 硬亲和性
    约束条件必须满足(键值)
    在这里插入图片描述

  2. 软亲和性
    尝试满足,不保证
    在这里插入图片描述
    在这里插入图片描述
    支持常用操作符

In , NotIn, Exists, Gt, Lt, DoesNotExist

污点和污点容忍

基本介绍

nodeSelect和nodeAffinity:将pod调度到某些节点上,都是pod里面的属性,调度时实现

Taint污点:节点不做普通分配调度。不是pod的属性,是节点里的属性

场景

  • 专用节点
  • 配置特点:硬件节点(硬盘)
  • 基于Taint驱逐

具体演示

查看节点污点情况

kubectl describe node k8s-master |grep Taint

在这里插入图片描述
污点值有三个:
*** NoSchedule***:一定不会被调度
** PreferNoSchedule**:尽量不被调度
** NoExecte**:不会调度,并且驱逐Node已有的pod到其他节点中

为节点添加污点

kubectl taint node [node名称] key=value:污点三个值
kubectl get pods   //查看pods
kubectl create deployment [名字] --image=[镜像]
kubectl create deployment web --image=nginx   // 创建一个pod里面是一个nginx容器
kubectl get pods -o wide  //查看pod信息
kubectl get deployments    //以检查 Deployment 是否已创建,可以查看信息
kubectl scale deployment web[名称] --replicas=5  //多创建5个pods

在这里插入图片描述
在这里插入图片描述
可以创建到slave1和2中,因为其没有污点。

删掉deployment创建的pods

kubectl delete deployment ngix

打上污点

kubectl taint node k8s-node01 env_dev=yes:NoSchedule //给node1添加污点
kubectl describe node k8s-node01 |grep Taint //查看node1节点污点信息

在这里插入图片描述
尝试创建5个nginx

kubectl create deployment nginx --image=nginx //创建deployment的pod
kubectl get pods -o wide // 查看创建的pod信息
kubectl get deployments  //以检查 Deployment 是否已创建,可以查看信息
kubectl scale deployment nginx --replicas=5 //再创建5个副本

再次查看pods信息发现pod都分配到node2节点上,为不是node1节点,这就是污点的作用。
在这里插入图片描述

为节点删除污点

kubectl describe node k8s-node01 |grep Taint //查看节点污染信息
Taints:             env_dev=yes:NoSchedule
kubectl taint node k8s-node01 env_dev:NoSchedule-  //为节点删除污点
kubectl describe node k8s-node01 |grep Taint   // 再次查看节点污染信息

在这里插入图片描述

污点容忍

在yaml文件中加入
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值