生也有涯,知也无涯。这篇文章主要讲述Kubernetes的pod调度相关的知识,希望能为你提供帮助。
@[TOC]
Kubernetes的pod调度
创建pod流程
【Kubernetes的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的过程,调度过程以及影响调度的因素和污点进行了简单介绍,希望对你有帮助
推荐阅读
- 二进制部署etcd高可用集群
- Es数据采集工具之filebeat安装和使用
- OpenStack Train(基础环境安装)
- 微信小游戏开发实战12:随机生成形状功能的实现
- 服务器数据恢复哪些故障会导致服务器数据丢失(多块硬盘离线导致服务器崩溃的数据恢复案例)
- 源码解析Synchronous Queue 这种特立独行的队列
- MySQL增删查改 练习(基础)
- EasyCV开源|开箱即用的视觉自监督+Transformer算法库
- centos7 3.x内核升级4.x并将4.x制作成rpm包