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调度之污点(taint)和容忍(toleration)
Kubernetes污点(taints)与容忍(tolerations)