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

Pod调度策略

  • 创建Pod的流程
    • master节点
    • node节点
  • 影响Pod调度(资源限制和节点选择器)
    • 影响调度属性
      • pod资源限制对pod调度产生影响
      • yaml文件中的节点选择器标签影响到pod调度
      • 节点的亲和性
  • 污点和污点容忍
    • 基本介绍
    • 场景
    • 具体演示
      • 查看节点污点情况
      • 为节点添加污点
      • 为节点删除污点
    • 污点容忍

查看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的流程_第1张图片

影响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  //查看节点的标签信息

在这里插入图片描述

Pod调度策略,创建Pod的流程_第2张图片

节点的亲和性

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

  1. 硬亲和性
    约束条件必须满足(键值)
    Pod调度策略,创建Pod的流程_第3张图片

  2. 软亲和性
    尝试满足,不保证
    Pod调度策略,创建Pod的流程_第4张图片
    Pod调度策略,创建Pod的流程_第5张图片
    支持常用操作符

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节点,这就是污点的作用。
Pod调度策略,创建Pod的流程_第6张图片

为节点删除污点

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文件中加入
Pod调度策略,创建Pod的流程_第7张图片

你可能感兴趣的:(k8s,Docker,云计算,k8s,docker,linux)