作者:韩柔刚 - 阿里云,张康 - Intel
随着云基础业务类型和硬件资源的日益丰富,数据中心的资源利用率得到了显著提高,但也带来了资源争用的风险。在提高节点资源利用率的同时,确保应用程序的 QoS(Quality of Service),并避免 Noisy Neighbor 问题是一个关键挑战。
Koordinator 和 containerd 作为云原生领域的开源项目,近期针对容器 QoS 的优化进行了深度合作,通过引入 NRI (Node Resource Interface,节点资源接口) 的方式来优化容器的资源管理和 QoS,解决先前资源管理模式中遇到的问题,大大提升了 Koordinator 部署的灵活性和处理的时效性,提供了一种优雅的云原生系统的资源管理标准化模式。
KubeCon China 2023
在即将召开的 KubeCon + CloudNativeCon China 2023 会议上,将由 Intel 和阿里云的工程师在现场为大家带来关于 Koordinator 和 containerd NRI 的深度解读,欢迎大家关注。该主题会介绍和演示如何通过在 Kubernetes 上集成最新的 CRI 运行时(例如 containerd、cri-o)中的 NRI(节点资源接口),在 Koordinator 中确保工作负载的 QoS。与传统方法(如独立模式和运行时代理拦截 CRI 请求的模式)相比,NRI 的插件化设计避免了对 Kubelet 的侵入性修改,极大增强了 Koordinator 部署的灵活性,实时处理 Pod 生命周期事件,并为云原生系统提供了一种优雅且标准化的资源管理解决方案。
Koordinator 的前世今生
Koordinator 是一个开源项目,旨在基于阿里巴巴在容器调度领域的多年经验,提供一个完整的混部解决方案,包含混部工作负载编排、资源调度、资源隔离及性能调优等多方面能力,来帮助用户优化容器性能,充分发掘空闲物理资源,提升资源效率,增强延迟敏感型工作负载和批处理作业的运行效率和可靠性。
业界很多互联网公司或多或少都有布局将不同特征类型工作负载协同调度的技术方向,充分利用负载之间的消峰填谷效应,让工作负载以更稳定、更高效、更低成本的方式去使用资源。这样的一套系统或机制,也就是业界时常提及的 “混部”概念。阿里巴巴在 2011 年开始探索容器技术,并在 2016 年启动混部技术研发,至今经过了多轮技术架构升级,最终演进到今天的云原生混部系统架构,实现了全业务规模超千万核的云原生混部,混部天级平均 CPU 利用率超 50%,帮助阿里巴巴节省了大量的资源成本。
基于在混部技术领域多年的实践经验,阿里巴巴正式开源了 Koordinator 项目,帮助企业快速收获云原生混部带来的技术红利,提高全局的资源利用效率。Koordinator 旨在为广大企业解决在应用混部的过程中面临的两大挑战:如何将应用接入到混部平台以及如何让应用在平台上能够稳定、高效的运行。
Koordinator 开源社区自 2022 年 4 月正式启动以来,阿里巴巴会同业界多个伙伴一起参与共建,贡献了众多的想法、代码和场景,推动了 Koordinator 项目的成熟发展。迄今为止,吸纳了包括阿里巴巴、蚂蚁科技、Intel、小米、小红书、爱奇艺、360、有赞、趣玩等公司在内的大量优秀工程师,贡献了众多的想法、代码和场景,一起推动 Koordinator 项目的成熟。
NRI 的发展历程
NRI (Node Resource Interface)[1] 是用于控制节点资源的公共接口,是 CRI 兼容的容器运行时插件扩展的通用框架。它为扩展插件提供了跟踪容器状态,并对其配置进行有限修改的基本机制。
NRI 是 Containerd 的一个子项目, NRI 允许将自定义的业务逻辑插入到 CRI 兼容的运行时中,例如 Containerd,CRI-O。在容器的生命周期中,这些逻辑可以对容器的 Spec 进行修改,或者在确定的 hook 点做一些 OCI (Open Container Initiative) 范围之外的操作。NRI 可以用于进一步完善设备或者其他资源的分配和管理。NRI 本身对任何容器运行时 (CRI Runtime) 的内部实现细节是不感知的。它为 CRI 运行时提供了一个适配库,用于集成 NRI 和扩展插件进行交互。
NRI 提供了接口定义和基础组件,可以实现可插拔的 CRI 运行时插件,这些插件就是 NRI 插件 (NRI Plugin)。这些 NRI 插件是与运行时类型无关的,插件既可以应用于 Containerd,也可以应用 CRI-O。原则上,任何 NRI 插件 (NRI Plugin) 都应该能够和启用 NRI 的运行时 (NRI-enabled CRI Runtimes) 正常协作。
NRI 插件是一个类似守护进程的实例。插件的单个实例会处理 NRI 所有的事件和请求,使用 Unix-domain socket 来进行数据传输和通信,NRI 定义了一套基于 protobuf 的协议并通过 ttrpc 进行实现。这样可以通过降低每条信息的开销提高通信效率,并且可以实现有状态的 NRI 插件。
上图展示了一个 NRI 以及 NRI 插件在处理 CRI 请求的位置和流程。关于 NRI 的更多信息,请参见 containerd/nri。
结语
最后,Koordinator 是一个开放的社区,欢迎广大云原生爱好者们随时通过各种方式参与共建,无论您在云原生领域是初学乍到还是驾轻就熟,我们都非常期待听到您的声音!欢迎通过搜索钉钉群号加入 Koordinator 社区用户交流群。(群号:33383887)
9 月 28 日,KubeCon China 2023,Koordinator 社区在上海期待与您不见不散!
相关链接:
[1] NRI (Node Resource Interface)
https://github.com/containerd/nri
点击此处,立即体验 Koordinator 项目!