Kubernetes4--动态调度

Kubernetes4--动态调度
基于Kubernetes的容器云平台资源调度策略
调度,给定的N种系统资源,给定⼀系列任务列表,如何分配各种资源,使得系统的总资源利⽤达到某种⽬标,或者资源利⽤率最⾼,资源利⽤率最⾼等。容器与物理机的调度,主要是物理机有⼀定的各种资源限额,容器服务有各种不同的资源需求,如何分配这些容器服务分配到指定的物理机节点实现系统功能,以达到系统的资源利⽤等⽬标。肽链合成过程
调度思想⼤致分为两种  扩散以及贪⼼。
扩散:尽量将服务调度到不同的集节点上以此来保证资源的均衡利⽤率,避免单机故障的风险
贪⼼:尽量将所有服务调度到同⼀节点上,提⾼资源的利⽤率
集资源调度系统分类
集中式调度系统
Swarm Borg 集使⽤同⼀的调度算法进⾏调度,调度任务不可以并⾏执⾏,调度信息需要存储在存储
器,任务较重延时较⾼。Scheduler ⽀持 Random、Spread 和 Binpack 三种调度策略,其中 Random 策略随机选择⽬标节点进⾏ Docker 调度;Spread 和 Binpack 则根据节点可⽤的 CPU、存资源量和节点上当前运⾏的 Docker 数量做出调度决策,Spread 将 Docker 分散调度到各个节点上,以提⾼系统的整体负载均衡;Binpack 与 Spread 相反,将 Docker调度到负载最⾼的节点上,提⾼集中节点承载容器的密度。
两层式调度系统
Memos  YARN 资源管理系统负责资源的统⼀分配和利⽤,任务调度系统可以执⾏不同的调度策略来并⾏调度任务
Mesos Master实现资源的统⼀分配和管理,调度框架可以并⾏调度任务。其使⽤DRF算法来实现对不同类型作业的不同资源需求公平分配。该算法的核⼼思想是在资源类型多样的环境下,⼀个作业的资源分配量由作业的主导份额资源决定,主导份额资源是作业请求的各类型资源中占据资源量最⼤的⼀种资源。
共享式调度系统
Kubernetes ⽀持使⽤不同的调度框架执⾏不同类型的任务,它的核⼼是共享状态。为了提⾼调度系统的并发性和可扩展性,共享式调度系统使⽤乐观锁进⾏并发控制,集的相关信息都增加了版本号,
在提交的时候与当前数据的版本号进⾏对照,若提交的状态信息版本号⽐当前信息的版本号⾼,则允许此次提交,否则决绝提交请求,这样虽然会增加资源请求的冲突⼏率,但是实际应⽤证明,系统的整体性能并不会因为这些冲突⽽整体下降。
k8s的Scheduler调度思想:
通过调度策略(算法)依次为待调度 Pod 队列的每⼀个 Pod 从可⽤ Node 队列中选择⼀个最合适的作为宿主机。⽬标节点上的 Kublet 进程通过 API  Server 监听到 Kubernetes 调度器发出的 Pod 绑定事件,然后从 etcd 中获取对应的 Pod 资源描述⽂件,下载 Image 镜像,启动容器,挂载持久化存储系统。
kubernetes主要使⽤Pod来作为实际的服务对象,其Pod调度流程如下:
k8s的默认调度策略分析:
默认调度过程如下:
1. ⾸先,客户端通过API Server的REST API/kubectl/helm创建pod/service/deployment/job等,⽀持类型主要为
JSON/YAML/helm tgz。
2. 接下来,API Server收到⽤户请求,存储到相关数据到etcd。
3. 调度器通过API Server查看未调度(bind)的Pod列表,循环遍历地为每个Pod分配节点,尝试为Pod分配节点。调度过程分为2个
阶段:
1. 第⼀阶段:预选过程,过滤节点,调度器⽤⼀组规则过滤掉不符合要求的主机。⽐如Pod指定了所需要的资源量,那么可⽤资源
⽐Pod需要的资源量少的主机会被过滤掉。
2. 第⼆阶段:优选过程,节点优先级打分,对第⼀步筛选出的符合要求的主机进⾏打分,在主机打分阶段,调度器会考虑⼀些整体
优化策略,⽐如把容⼀个Replication Controller的副本分布到不同的主机上,使⽤最低负载的主机等。
4. 选择主机:选择打分最⾼的节点,进⾏binding操作,结果存储到etcd中。
5. 所选节点对于的kubelet根据调度结果执⾏Pod创建操作。
k8s的调度优化
k8s的默认指标使⽤物理机的CPU以及内存等指标来计算物理节点的虚拟性能状态,将Pod对象调度到某个最合适的Node物理节点
物理节点性能指标优化:
可以考虑物理机的cpu,内存,IO,⽹络,响应时间,链接数等系统资源
论⽂中主要使⽤CPU,内存,镜像下载速度,数据传输速度四个指标
镜像下载速度:宿主机需要到 Pod 资源描述⽂件指定的⽹络地址下载 Pod 中所有容器的镜像⽂件,宿主机与镜像存储系统之间的⽹络传输速度直接关系到 Pod 的启动速度的快慢;这个问题可以通过搭建私有镜像仓库来解决,但是集规模过⼤还是会存在的。
数据传输速度:Pod 中数据是临时的,当 Pod 销毁时,其中的数据会丢失,所以 Pod 需要通过数据卷的⽅式将数据持久化。因
此 Pod 在启动运⾏后,Pod 还需要挂载持久化存储系统进⾏数据的存取,宿主机与持久化存储之间的数据传输速度会直接影响 Pod中运⾏的应⽤的 IO 速度。
⽤户绑定策略:
论⽂中提出了各种绑定策略,即指定Pod到某个确定的Node,现在版本应该已经⽀持很好,可以使⽤Label标签实现
紫外线吸收剂329抢占式调度策略:
现在版本⽀持Pod优先级抢占,通过PriorityClass来实现同⼀个Node节点内部的Pod对象抢占。根据 Pod 中运⾏的作业类型判定各
个 Pod 的优先级,对于⾼优先级的 Pod 可以抢占低优先级 Pod 的资源。Pod priority指的是Pod的优先级,⾼优先级的Pod会优先被调度,或者在资源不⾜低情况牺牲低优先级的Pod,以便于重要的Pod能够得到资源部署.
定义PriorityClass对象:现金管理终端
apiVersion: scheduling.k8s.io/v1alpha1
kind: PriorityClass
metadata:
name: high-priority
value: 1000000
globalDefault: false
description: "This priority class should be used for XYZ service pods only."
在Pod的spec. priorityClassName中指定已定义的PriorityClass名称
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
priorityClassName: high-priority
当节点没有⾜够的资源供调度器调度Pod、导致Pod处于pending时,抢占(preemption)逻辑会被触发。Preemption会尝试从⼀个节点删除低优先级的Pod,从⽽释放资源使⾼优先级的Pod得到节点资源进⾏部署。
论⽂中按照Pod的重启策略来定义pod优先级,Always>OnFailure>Never
利⽤容器资源请求量使⽤优先级队列来进⾏排序  OnFailure队列  Never队列
克氏锥虫Always可以抢占Never,OnFailure资源,依次回收低优先级的Pod对象资源直到宿主机资源满⾜Always的资源请求
OnFailure可以抢占Never资源
动态负载均衡策略
依据Node节点的衡量指标,定量度量Node节点性能情况,建⽴⾼负载队列以及低负载队列,根据系统的实施运⾏情况来不断调整不同Node节点之间的容器对象,实现资源的均衡利⽤,主要是扩散思想。
优选策略的设计
假定服务器集N台,其物理集定义如下:
各物理节点的资源规格,定义各物理节点的性能度量指标:
机器人定位技术其中          ci, mi分别为cpu以及内存的资源配额。
各物理节点的规格系数向量:
其中        分别为cpu以及内存的规格系数  例cpu2核,内存4G  其表⽰规格系数  2  4
大豆糖蜜

本文发布于:2024-09-22 09:37:20,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/178792.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:调度   资源   节点
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议