Kubernetes的pod调度

Posted 周杰伦本人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kubernetes的pod调度相关的知识,希望对你有一定的参考价值。

@[TOC]

Kubernetes的pod调度

创建pod流程

用户通过kubectl进入apiserver中,把相关信息存储到etcd中,scheduler进入apiserver中看有没有pod的创建,如果有,通过etcd读取到对应的pod,然后通过调度算法,把pod调度到某个node节点中,结果信息更新到API Server中,API Server更新到etcd存储系统。pod被调度到的node节点通过kubelet访问apiserver,从而在etcd中读取到pod信息,然后通过docker创建容器

创建pod命令:

kubectl create deployment web --image=nginx

然后复制三次

kubectl scale deployment web --replicas=3

查看pod在节点上的分配情况

kubectl get pods -o wide

影响pod调度的属性

pod的yaml文件中对资源的限制影响pod的调度,节点选择器nodeSelector标签也会影响pod的调度

对于附带标签的资源对象,使用标签选择器挑选出符合条件的资源完成所需操作。创建资源的时候,可以直接在其metadata中的labels属性设置标签,标签以key-value形式设置,也可以使用下面的命令

对节点创建标签的命令:

kubectl label node node1 env_role=dev

scheduler守护进程负责在各工作节点中基于系统资源的可用性挑选一个来运行待创建的pod对象,Kubernetes将所有工作节点抽象成资源池的资源统一分配使用。

用户先为node资源对象设定标签,然后配置pod对象通过节点标签选择器进行匹配检测,完成节点的调度

节点亲和性nodeAffinity也是和调度有关,节点亲和性分为硬亲和性和软亲和性,硬亲和性表示条件必须满足,软亲和性条件尽量满足。

污点

污点Taint是节点的属性

查看污点信息:

kubectl describe node node1 | grep Taint

值为NoSchedule表示不会被调用,PreferNoSchedule表示尽量不调度,NoExecute表示不会被调度的同时会把当前节点的pod删掉

添加污点信息:

kubectl taint node node1 env_role=yes:NoSchedule

删除污点信息:

kubectl taint node node1 env_role:NoSchedule-

有污点容忍属性,表示某个节点即使设置了污点也有可能被调度到

总结

这篇文章主要对创建pod的过程,调度过程以及影响调度的因素和污点进行了简单介绍,希望对你有帮助

以上是关于Kubernetes的pod调度的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes 调度使用介绍(亲和反亲和污点容忍)

kubernetes调度之污点(taint)和容忍(toleration)

Kubernetes污点(taints)与容忍(tolerations)

运维实操——kubernetes调度nodeNamenodeSelector亲和性污点容忍删除节点

13-Kubernetes-Pod详解-调度

Kubernetes 的亲和性污点与容忍