Kubernetes 的 pod 调度
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 命令:
然后复制三次
查看 pod 在节点上的分配情况
影响 pod 调度的属性
pod 的 yaml 文件中对资源的限制影响 pod 的调度,节点选择器 nodeSelector 标签也会影响 pod 的调度
对于附带标签的资源对象,使用标签选择器挑选出符合条件的资源完成所需操作。创建资源的时候,可以直接在其 metadata 中的 labels 属性设置标签,标签以 key-value 形式设置,也可以使用下面的命令
对节点创建标签的命令:
scheduler 守护进程负责在各工作节点中基于系统资源的可用性挑选一个来运行待创建的 pod 对象,Kubernetes 将所有工作节点抽象成资源池的资源统一分配使用。
用户先为 node 资源对象设定标签,然后配置 pod 对象通过节点标签选择器进行匹配检测,完成节点的调度
节点亲和性 nodeAffinity 也是和调度有关,节点亲和性分为硬亲和性和软亲和性,硬亲和性表示条件必须满足,软亲和性条件尽量满足。
污点
污点 Taint 是节点的属性
查看污点信息:
值为 NoSchedule 表示不会被调用,PreferNoSchedule 表示尽量不调度,NoExecute 表示不会被调度的同时会把当前节点的 pod 删掉
添加污点信息:
删除污点信息:
有污点容忍属性,表示某个节点即使设置了污点也有可能被调度到
版权声明: 本文为 InfoQ 作者【周杰伦本人】的原创文章。
原文链接:【http://xie.infoq.cn/article/574ef15b6de0414b43d1c235b】。文章转载请联系作者。
评论