关于Kubernetes中kube-scheduler的一些笔记
- 学习K8s,整理这部分知识
- 博文内容主要涉及
- K8s中调度组件kube Scheduler的一些总结
- 主要参考《K8s权威指南》一书
- 食用方式:
- 需要k8s基础知识
- 需要了解pod基本调度行为
写在前面
- 学习K8s,整理这部分知识
- 博文内容主要涉及
- K8s中调度组件kube Scheduler的一些总结
- 主要参考《K8s权威指南》一书
- 食用方式:
- 需要k8s基础知识
- 需要了解pod基本调度行为
张牙舞爪的人,往往是脆弱的。因为真正强大的人,是自信的,自信就会温和,温和就会坚定——–《明朝那些事》
Scheduler原理解析
众多周知,Kubernetes Scheduler
是 Kubernetes
中负责Pod调度
的重要功能模块,运行在k8s 集群中的master节点。
作用 : Kubernetes Scheduler
的作用是将待调度的Pod (API新创建
的Pod, Controller Manager为补足副本而创建
的Pod等)按照特定的调度算法
和调度策略
绑定(Binding)到集群中某个合适的Node上,并将绑定信息写入etcd中。
在整个调度过程中涉及三个对象,分别是
待调度Pod列表
可用Node列表
以及调度算法和策略
整体流程 :通过调度算法调度,为待调度Pod列表
中的每个Pod从Node列表
中选择一个最适合的Node
随后, 目标node节点上的kubelet
通过APIServer监听到Kubernetes Scheduler
产生的Pod绑定事件
,然后获取对应的Pod清单
,下载Image镜像并启动容器
。
kubelet
进程通过与API Server
的交互,每隔一个时间周期,就会调用一次API Server的REST接口报告自身状态, API Server接收到这些信息后,将节点状态信息更新到etcd中。 同时kubelet也通过API Server的Watch接口监听Pod信息
,如果监听到新的Pod副本被调度绑定到本节点,则执行Pod对应的容器的创建和启动逻辑;如果监听到Pod对象被删除,则删除本节点上的相应的Pod容器;如果监听到修改Pod信息,则kubelet监听到变化后,会相应地修改本节点的Pod容器。
所以说,kubernetes Schedule
在整个系统中承担了承上启下的
重要功能,对上负责接收声明式API或者控制器创建新pod的消息,并且为其安排一个合适的Node,对下,选择好node之后,把工作交接给node上的kubelet,由kubectl负责pod的剩余生命周期。
Kubernetes Scheduler
当前提供的默认调度流程分为以下两步。
流程 | 描述 |
---|---|
预选调度过程 | 即遍历所有目标Node,筛选出符合要求的候选节点。为此, Kubernetes内置了多种预选策略(xxx Predicates)供用户选择 |
确定最优节点 | 在第1步的基础上,采用优选策略(xxxPriority)计算出每个候选节点的积分,积分最高者胜出 |
Kubernetes Scheduler的调度流程是通过插件方式加载的"调度算法提供者” (AlgorithmProvider)
具体实现的。一个AlgorithmProvider
其实就是包括了一组预选策略
与一组优先选择策略
的结构体.
Scheduler中可用的预选策略包含:NoDiskConflict、PodFitsResources、PodSelectorMatches、PodFitsHost、CheckNodeLabelPresence、CheckServiceAffinity 和PodFitsPorts
策略等。
其默认的AlgorithmProvider
加载的预选策略返回布尔值包括:
- PodFitsPorts(PodFitsPorts):判断端口是否冲突
- PodFitsResources(PodFitsResources):判断备选节点的资源是否满足备选Pod的需求
- NoDiskConflict(NoDiskConflict):判断备选节点和已有节点是否磁盘冲突
- MatchNodeSelector(PodSelectorMatches):判断备选节点是否包含备选Pod的标签选择器指定的标签。
- HostName(PodFitsHost):判断备选Pod的spec.nodeName域所指定的节点名称和备选节点的名称是否一致
即每个节点只有通过前面提及的5个默认预选策略后
,才能初步被选中,进入到确认最优节点(优选策略)流程。
Scheduler中的优选策略包含(不限于下面3个):
LeastRequestedPriority
:从备选节点列表中选出资源消耗最小的节点,对各个节点公式打分CalculateNodeLabelPriority
:判断策略列出的标签在备选节点中存在时,是否选择该备选节,这不太懂,打分BalancedResourceAllocation
:从备选节点列表中选出各项资源使用率最均衡的节点。对各个节点公式打分
每个节点通过优先选择策略时都会算出一个得分,计算各项得分,最终选出得分值最大的节点作为优选的结果
(也是调度算法的结果)。
关于Kubernetes中kube-scheduler的一些笔记
https://liruilongs.github.io/2022/01/09/K8s/API 学习/关于 Kubernetes中kube-scheduler的一些笔记/
1.K8s 集群高可用master节点ETCD全部挂掉如何恢复?
2.K8s 集群高可用master节点故障如何恢复?
3.K8s 镜像缓存管理 kube-fledged 认知
4.K8s集群故障(The connection to the server <host>:<port> was refused - did you specify the right host or port)解决
5.关于 Kubernetes中Admission Controllers(准入控制器) 认知的一些笔记
6.K8s Pod 创建埋点处理(Mutating Admission Webhook)
7.关于AI(深度学习)相关项目 K8s 部署的一些思考
8.K8s Pod 安全认知:从openshift SCC 到 PSP 弃用以及现在的 PSA