内核支持的QOS特性CPU资源争用和隔离GroupIdentity以cgroup组为单位,实现特殊的优先级调度离线应用混合时,离线业务导致的在线业务无计划调度在线业务调度在CPU上。延迟不受离线服务影响,让在线服务有足够的CPU时间片。 SMTexpeller 确保高优先级服务不会受到HT 低优先级任务的干扰。通过超线程调度GroupIdentity框架进一步实现的隔离非常好。防止高优先级业务受到相应HT上低优先级任务的干扰。 CPUBurst容器的弹性CPU控制技术满足平均CPU使用率小于1的条件。 CPUBurst 实现CPU 使用率的短期爆发来提供服务提高质量并加速容器加载内存资源的争用和隔离内存自身限制:容器自身内存(包括页缓存)接近容器的限制,触发内核的内存回收子系统。这个过程会影响容器内部应用程序的内存申请。它还释放了性能节点内存限制。如果一个容器的内存超卖(Memory Limits > Requests),整个机器内存不足,就会触发内核中的全局内存回收,这个过程对性能有很大的影响。
容器内存公平性:控制内存子系统(memcg) 的内存使用保证(锁定)和限制。社区版本的内核只有cgroup v2接口,Anolis增加了cgroup v1接口来支持相关功能。
koordinator:koordinator(https://koordinator.sh)基于QoS 调度系统,旨在在Kubernetes 上高效运行微服务、AI 和大数据负载。这是一个容器编排解决方案,可以提高部署密度并降低k8s 上的资源成本。协调器提供以下机制: 1. 主机托管场景的资源优先级和服务质量模型2. 稳定可靠的资源超卖机制3. 细粒度的容器资源编排和隔离机制4. 多种类型工作负载的调度能力增强5. 复杂类型的快速接入能力工作负载
Koordinator的整体架构优势集中在零侵入托管本身(调度系统、工作负载访问、配额管理、资源弹性、整体资源运营、成本管理),低成本访问不会侵入您的工作负载,k8s是零侵入您的托管能力:基于社区开源协调员并结合我们内部的实际情况,我们在内部实施了完整的托管解决方案。 Native Coordinator有一些功能不太适合我们内部的现状,但是我们在Coordinator的基础上开发了其他功能,并向社区反馈了一些功能,比如对节点资源预留的支持。
节点资源预留的混合部署场景不仅包括云原生容器,还包括许多作为主机上进程存在的非容器化应用程序。机器和K8s 容器一起运行。为了减少节点端K8s应用程序与其他类型应用程序之间的资源争用,保留部分资源,使其不参与调度器的资源调度或节点端资源分配,效果如下:资源隔离。我们主导开发了Koordiantor,支持CPU 和内存资源维度的预留,可以直接指定预留的CPU 数量,如下;节点资源预留语句数量或具体CPU 数量示例如下:
apiVersion: v1kind: Nodemetadata: name: fake-node comments: # 计算特定的5 个核心(例如0、1、2、3、4),并保留这些核心。 node.koordinator.sh/reservation: '{'resources':{'cpu':'5'}}'---apiVersion: v1kind: Nodemetadata: name: fake-node comments: # 保留核心0、1、2、3。 node.koordinator.sh/reservation: '{'reservedCPUs':'0- 3'}' 当独立组件Koordlet上报节点资源拓扑信息时,会在NodeResourceTopology对象的Annotation中更新具体的预留CPU编号。场景自适应调度和重新调度在分配资源的过程中,调度器会在各种情况下进行资源验证,包括配额管理、节点容量验证、CPU拓扑验证等。例如,当调度程序计算某个节点的CPU能力时,它必须减去该节点预留的资源。
cpus(alloc)=cpus(total) - cpus(allocated) - cpus(kubeletReserved) - cpus(nodeAnnoReserved) 另外,在计算批量混合部署的超额出售资源时,还必须减去这些资源,并且节点还具有:这包括:在计算某些系统进程的资源消耗时,Koord-Manager 采用节点预留和最大系统使用值。具体来说:
ReserveRatio=(100-thresholdPercent)/100.0node.reserved=node.alloc *reserveRatiosystem.used=max(node.used - pod.used, node.anno.reserved)Node(BE).Alloc=Node.Alloc - 节点。保留- System.used - Pod(LS).used 对于重新调度,每个插件策略必须感知节点上保留的资源量,以用于计算节点容量和利用率等场景。此外,如果容器已经占用了节点的预留资源,则需要重新调度以确保节点容量得到正确管理,并考虑删除这些资源以避免资源争用。独立资源管理对于LS类型Pod,独立Koordlet组件根据CPU分配动态计算共享CPU池,并排除为支持LS类型Pod和其他非容器Pod的节点保留的CPU核心进程,以确保资源隔离。同时,对于单机相关的QoS策略,例如CPUSuppress抑制策略,在计算节点利用率时会考虑预留资源量。
抑制(BE) :=node.Total * SLOPercent - pod(LS).used - max(system.used, node.anno.reserved) 和其他增强功能错误修复(https://github.com/koordinator-sh/koordinator/pulls/)冲压)
收入及未来规划公司内部主机托管相关技术的实施,在现有机器资源的基础上,额外提供了23000核离线CPU资源,供系统部门进行大数据相关的离线计算。继续推动主机托管规模。以我们的内部数据库服务器为例,我们发现启用了主机托管的计算机上的CPU 利用率有了显着提高。
事实上,混合组件还有很多东西需要添加。当谈到资源隔离时,目前大多数考虑因素都围绕CPU和内存。 blkio前段时间也提出了,但其实还有很多内容需要补充: 1. Net QOS是基于扩展网络带宽QOS 2. 节点资源预留3. 调度/重新调度调度增强,例如: load-感知调度和基于网络带宽的重新调度4. 我们还在更多QOS 指标上与社区保持同步,并与社区相关同事进一步进行功能开发。
我们是360智汇云团队。如果您想了解更多关于我们的信息,欢迎戳戳:电话:4000052360 邮箱:g-zyun@360.cn 智汇云官网:智汇云-企业数字智能核心引擎(请戳)硬【I.李】】 )
标题:如何部署混合云?,混合部署模式
链接:https://www.7kxz.com/news/gl/18108.html
版权:文章转载自网络,如有侵权,请联系删除!