基于DPU的云原生计算资源共池管理解决方案

news2024/12/29 11:05:04

1. 方案背景和挑战

在传统的云环境中,通常存在着不同的技术栈,支撑多样化的计算服务,具体如下:

① OpenStack环境与虚拟化云主机及裸金属服务

OpenStack是一个开源的云计算管理平台项目,它提供了部署和管理大规模计算、存储、网络等基础设施的一整套软件堆栈。在OpenStack技术栈中,Nova服务主要负责管理虚拟化云主机,而Ironic服务则专注于裸金属资源的管理。 

② Kubernetes环境与容器服务

Kubernetes(简称K8s)是广受欢迎的容器管理平台,是行业内的事实标准,主要用于自动化容器应用的部署、扩展和管理。Kubernetes技术栈围绕容器化应用构建,通过其核心组件如kubelet、kube-apiserver、scheduler等,实现了容器资源的高效调度与管理。

虚拟化云主机、裸金属、容器这三种计算服务及其对应的资源池通常独立运行和管理,各自遵循不同的管理和调度规则。

这种分池管理的方式虽然在一定程度上保证了资源的专属性和安全性,但也构成了一个明显的瓶颈,严重制约了资源的灵活性、扩展性和整体利用率,对运营效率和成本控制带来了多重挑战。以下是对这一问题的深入剖析:

1.1. 扩展性受限

在分池管理的框架下,业务的可扩展性受到了严重制约。首先,由于资源池的容量是固定的,当某一资源池的资源即将耗尽时,即便其他类型的资源池中尚有大量闲置资源,也无法实现快速调配。其次,资源池的扩容往往需要人工介入,包括资源的重新规划、配置、测试等一系列繁琐流程,不仅耗时费力,还可能因为预判失误导致资源闲置或供给不足,从而影响业务的连续性和服务质量。这种扩展性差的问题,使得企业在面对市场变化和业务增长时,难以做到敏捷响应和快速扩张,进而错失商机。

1.2. 资源分配僵化与切换困难

资源池之间的独立管理进一步加剧了资源分配的僵化,使得在不同资源池之间进行资源切换或重新分配变得异常困难。例如,在虚拟机资源池接近满负荷运行的同时,裸金属资源池可能仍存在大量未充分利用的节点,但由于缺乏有效的资源池间通信和资源共享机制,这些裸金属节点无法被快速转换为虚拟机资源,以缓解虚拟机资源池的压力。这种资源分配的不灵活性不仅限制了系统的弹性伸缩能力,还导致了资源的冗余和浪费。

1.3. 整体资源利用率低下

资源池的独立管理导致了资源利用率的显著下降。由于各资源池之间的资源无法实现共享,即便某些资源池存在资源过剩的情况,也无法有效支援资源紧张的池子,从而造成了资源分配的不平衡。例如,容器资源池中创建的节点可能只承载了少量的容器应用,而与此同时,虚拟机资源池却可能面临严重的资源挤兑现象,导致新虚拟机的创建受阻。这种资源孤岛现象不仅降低了整体资源的使用效率,还可能引发一系列连锁反应,如服务延迟、性能下降和客户满意度降低等问题。

综上所述,传统云环境中资源池的独立管理方式暴露出了一系列问题,包括扩展性差、资源分配不灵活和资源利用率低等,这些问题共同构成了云计算资源管理的一大难题。为了解决这一挑战,业界正在积极探索和实践资源池融合、自动化资源调度和智能资源配置等创新技术,以期实现资源的高效利用和灵活调度,推动云计算基础设施向着更加智能、弹性和经济的方向发展。

2. 方案介绍

2.1. 整体方案架构

为了解决上述问题,我们提出了基于DPU的云原生计算资源共池管理解决方案,结合了DPU的硬件优势与Kubernetes的能力和插件生态,在Kubernetes架构下实现了虚拟机、裸金属和容器资源的无缝整合与统一管理,可以实现当某一类资源池(如虚拟机资源池)面临资源紧张时,系统能够自动从共享资源池中调用资源,实现Worker节点的快速扩容,而当资源需求下降时,又能够智能缩容,将多余Worker节点回收至共享池中,确保资源的按需分配与适时释放。

本方案中包括了BareMetalManager,这是基于DPU的裸金属管理软件包,由bm-controller、bm-api、bm-handler三个组件组成。它负责管理裸金属机器的生命周期,实现裸金属服务器的无盘启动、云盘的动态热插拔以及网卡动态热插拔。BareMetalManager 将裸金属服务器作为 k8s资源进行统一管理,从而提升裸金属服务器的管理效率,并为虚拟机、容器资源池Worker节点的快速部署提供基础保障。

本方案的核心部分包括资源池状态感知、评估和调度,基于Kubernetes Cluster AutoScaler进行设计,其整体架构如下:

该架构主要是由以下几个核心组件完成:

  • AutoScaler:核心模块,负责集群节点及Pod信息检查,调用扩缩容功能。
  • Estimator:负责评估worker节点扩容需求,进行Pod预调度。
  • Simulator:负责评估worker节点缩容需求,模拟节点缩容。
  • Yusur Cloud Provider:负责将裸金属资源注册到为供Cluster AutoScaler扩缩容使用的NodeGroup。管理裸金属实例的创建和删除,并将裸金属实例加入或移出 Kubernetes 集群。

2.2. 方案详细描述

本节主要对云原生计算资源共池管理方案的核心部分,即Cluster AutoScaler模块、扩缩容逻辑以及cloud provider进行介绍。

2.2.1. AutoScaler

AutoScaler启动后触发循环控制逻辑。每10s执行一次,检测集群状态,决定是否执行扩容或缩容操作。整体流程图如下:

从流程图中可以看到,AutoScaler关键逻辑为发现node,pod以及cloud provider信息。经过几个模块处理,将因资源不足导致未调度的pod缓存起来。然后进行下一步判断,是否需要调用ScaleUp或者ScaleDown进行扩缩容控制。

2.2.2. ScaleUp

ScaleUp是AutoScaler评估后需要执行扩容操作后调用的模块,其流程图如下:

从流程图中可以看到,当AutoScaler检测到需要进行扩容操作后,ScaleUp还是会进行一些基础检查,如当前计算节点数量是否达到最大限制、扩容后资源是否超限等前置检查。然后通过调用Estimator,进行Pod预调度,进行扩容决策,最终选出一个NodeGroup,从该NodeGroup中申请节点对k8s集群进行扩容。

当集群中有多个 Node Group 可供选择时,可以通过expander选项配置选择 Node Group 的策略,支持如下三种方式:

  • random:随机选择;
  • most-pods:选择容量最大(可以创建最多 Pod)的 Node Group;
  • least-waste:以最小浪费原则选择,即选择有最少可用资源的 Node Group。
2.2.3. ScaleDown

ScaleDown是AutoScaler评估后需要执行缩容操作后调用的模块,其流程图如下:       

从流程图中可以看出,缩容也会进行前置检查。缩容过程中最重要的是检查需要驱逐pod再移除相应节点的流程。当节点上需要驱逐Pod才能回收时,会调用Simulator模拟Pod驱逐,为被需要驱逐的Pod寻找可调度节点。由于在删除worker节点时会发生Pod重新调度的情况,所以应用必须可以容忍重新调度和短时的中断(比如使用多副本的 Deployment),当满足以下条件时,worker节点不会删除:

  • 节点上有pod被PodDisruptionBudget(PDB)控制器限制,PDB是k8s中的一种资源,它为 Pod 提供了一种保护机制;
  • 节点上有命名空间是kube-system的pods;
  • 节点上的pod不是被控制器创建,例如不是被deployment, replicaset, job, statefulset创建;
  • Pod 使用了本地存储;
  • 节点上pod驱逐后无处可去,即没有其他worker节点能调度这个pod;
  • 节点有注解:”cluster-autoscaler.kubernetes.io/scale-down-disabled“:“true”,可以通过给节点打上特定注解保证节点不被Cluster AutoScaler删除;
  • 配置 `cluster-autoscaler.kubernetes.io/safe-to-evict=false 注解,可以确保 pod不被驱逐,pod所在 worker节点不被缩减。
2.2.4 Yusur Cloud Provider

yusurCloudProvider会在Cluster AutoScaler初始化的过程中进行注册NodeGroup信息,在执行ScaleUp和ScaleDown后得到实际的调用。其具体流程如下:

其中将裸金属资源添加到集群共享资源池(NodeGroup),可以根据指定规则(如机型、CPU 等)将其划分为多个组。每个 NodeGroup 需要包含当前组中机器的详细配置,用于扩容过程中的模拟调度。

扩容与缩容操作中,裸金属实例的生命周期由BareMetalManager控制。

3. 方案优势

本解决方案针对传统云环境中资源池独立管理的挑战,提出了创新的资源共池管理机制,旨在大幅提升资源的灵活性、效率和利用率,以下是该方案的三大核心优势:

3.1. 增强业务可扩展性与弹性

该方案通过构建统一的资源池,打破了不同资源类型之间的界限,实现了资源的动态调配与共享。当某一资源类型(如虚拟机)面临资源瓶颈时,系统能够自动从共享资源池中申请额外资源,快速扩容以满足业务需求。反之,在资源空闲时,又能自动缩容,将多余的资源节点归还至共享池,避免了资源浪费。这种机制显著增强了业务的可扩展性和弹性,使得企业能够更加从容地应对业务波动和突发流量,提高服务的连续性和用户满意度。

3.2. 提升资源分配的灵活性与效率

通过资源共池管理,实现了资源的自动化和智能化分配,显著提升了资源分配的灵活性与效率。不再局限于固定资源池的限制,系统能够根据实时的资源需求和业务负载,自动在共享资源池中寻找最优的资源匹配,进行即时的资源调度。这种动态分配机制不仅简化了资源管理的复杂度,还极大地提高了资源分配的精准度和响应速度,使得资源能够更加高效地服务于业务需求,减少人为干预,提升整体运维效率。

3.3. 最大化资源利用率,降低成本

云原生计算资源共池管理解决方案通过打破资源池之间的壁垒,实现了资源的全局优化与共享,有效解决了资源孤岛问题,大幅提高了资源的整体利用率。在传统模式下,由于资源池的独立管理,资源分配往往呈现出不均衡状态,导致部分资源长期闲置。而共池管理方案能够根据实际需求动态调整资源分配,避免了资源的冗余和浪费,从而显著降低了企业的运营成本。此外,通过智能的资源调度算法,该方案还能进一步挖掘资源潜力,提升资源使用效率,为企业带来更大的经济效益。

基于DPU的云原生计算资源共池管理解决方案通过实现资源的统一管理、动态调配与智能优化,有效解决了传统云环境中资源管理的痛点,为构建更加灵活、高效和经济的云基础设施提供了有力支撑。

本方案来自于中科驭数软件研发团队,团队核心由一群在云计算、数据中心架构、高性能计算领域深耕多年的业界资深架构师和技术专家组成,不仅拥有丰富的实战经验,还对行业趋势具备敏锐的洞察力,该团队致力于探索、设计、开发、推广可落地的高性能云计算解决方案,帮助最终客户加速数字化转型,提升业务效能,同时降低运营成本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1907489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA 代码块介绍

一、基本介绍 代码化块又称为初始化块,属于类中的成员[即 是类的一部分],类似于方法,将逻辑语句封装在方法体中,通过包围起来。 但和方法不同,没有方法名,没有返回,没有参数,只有方…

人工智能的新时代:从模型到应用的转变

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

NLP 面试八股:“Transformers / LLM 的词表应该选多大?“ 学姐这么告诉我答案

NLP 面试八股:“Transformers / LLM 的词表应该选多大?" 学姐这么告诉我答案 原创 看图学 看图学 2024年07月03日 07:55 北京 题目: Transformers/大模型的 token vocabulary 应该选多大? 答案 先说一下结论: 数据量够大…

南航秋招指南,线上测评和线下考试

南航秋招简介 南航作为国内一流的航空公司,对人才的需求量非常旺盛,每年也有很多专业对口的工作提供给应届毕业生,对于应届毕业生而言,一定要抓住任何一个应聘机会,并且在规定的范围内进行简历的提交,以便…

为什么需要重写equals和如何重写equals

首先先看Java中的 ,比较的两个对象的地址值。 如果是基本数据类型,那么就是比较的是值。 如果是引用数据类型,比较的就是地址. object类中的equals方法也是用的; 所以要比较两个对象的大小,去调用默认的equals方法…

鼠标宏怎么设置?6款鼠标自动点击器强推,游戏玩家专用!(2024全)

随着电子游戏和日常应用的不断发展,我们经常会遇到一些重复性的任务或操作。而在这种情况下,鼠标宏以其自动化的特点成为了许多玩家和使用者的利器之一。如果你正在寻找如何设置鼠标宏来简化操作并提高效率,那么你来对地方了。在本文中&#…

2024最新版若依-RuoYi-Vue3-PostgreSQL前后端分离项目部署手册教程

项目简介: RuoYi-Vue3-PostgreSQL 是一个基于 RuoYi-Vue3 框架并集成 PostgreSQL 数据库的项目。该项目提供了一套高效的前后端分离的开发解决方案,适用于中小型企业快速构建现代化的企业级应用。此项目结合了 RuoYi-Vue-Postgresql 和 RuoYi-Vue3 的优点&#xff0…

WEB06JavaScriptAjax

基础语法 引入方式 引入方式 内部脚本&#xff1a;将JS代码定义在HTML页面中 JavaScript代码必须位于<script></script>标签之间 在HTML文档中&#xff0c;可以在任意地方&#xff0c;放置任意数量的<script> 一般会把脚本置于<body>元素的底部&a…

matlab:对带参数a关于x的方程求解

题目 讲解 简洁对各个式子的内部含义用浅显易懂的话语总结出来了&#xff0c;耐心体会 f(a) (x)exp(x)x^ax^(sqrt(x))-100;%因为下面的fzero的第一个数需要一个fun&#xff0c;所以这里有两个句柄&#xff0c;第一个a是输入的&#xff0c;第二个x是需要被解出的 A0:0.1:2;%创…

提高生产效率和质量的六西格玛方法(优思学院)

想象一下&#xff0c;你被公司指派了一个重要项目&#xff0c;这家公司生产豪华汽车。当前&#xff0c;公司的生产数量正在下降&#xff0c;每天生产的汽车数量明显减少。此外&#xff0c;还存在安装在这些汽车上的雨刮器质量问题。你面临的挑战是找到解决方案&#xff0c;将生…

【CW32F030CxTx StartKit开发板】利用超声波传感器实现智能灯控

目录 1、超声波传感器 2、硬件连线 3. 程序开发 3.1 超声波测距 3.2 LED控制 4. 演示视频 本文首发于21ic。 感谢21ic和武汉芯源提供的测试机会。 在上一篇帖子中介绍了CW32F030CxTxStartKit 评估板的环境构建。本次介绍如何利用超声波传感器实现人来灯亮&#xff0c;人…

前端开发过程中经常遇到的问题以及对应解决方法 (持续更新)

我的朋友已经工作了 3 年&#xff0c;他过去一直担任前端工程师。 不幸的是&#xff0c;他被老板批评了&#xff0c;因为他在工作中犯了一个错误&#xff0c;这是一个非常简单但容易忽视的问题&#xff0c;我想也是很多朋友容易忽视的一个问题。 今天我把它分享出来&#xff…

【PCIe】P2P DMA

PCIe P2P (peer-to-peer communication)是PCIe的一种特性&#xff0c;它使两个PCIe设备之间可以直接传输数据&#xff0c;而不需要使用主机RAM作为临时存储。如下图3的走向 比如EP1要发送和数据给EP2,操作流程如下&#xff1a; 1. 打开EP1的dma控制器&#xff1b;--client侧 …

微调LLMs : 介绍,方法和最佳实践

来自Turing的LLMs的Fine-Tuning的最佳实践。 大型语言模型&#xff08;LLMs&#xff09;凭借其先进的功能和高度精密的解决方案&#xff0c;已经彻底改变了自然语言处理领域。这些模型在海量文本数据集上接受训练&#xff0c;执行诸如文本生成、翻译、摘要和问题回答等多种任务…

Linux安装Jmeter及简单使用教程

Linux安装Jmeter 首先需要java环境 java --version官网 下载二进制包 #创建文件夹 sudo mkdir /usr/local/jmeter #解压 sudo tar zxvf apache-jmeter-5.6.3.tgz -C /usr/local/jmeter编辑配置文件 sudo vim /etc/profile&#xff0c;添加以下内容 export JMETER_HOME/usr/l…

【Python_GUI】tkinter常用组件——文本类组件

文本时窗口中必不可少的一部分&#xff0c;tkinter模块中&#xff0c;有3种常用的文本类组件&#xff0c;通过这3种组件&#xff0c;可以在窗口中显示以及输入单行文本、多行文本、图片等。 Label标签组件 Label组件的基本使用 Label组件是窗口中比较常用的组件&#xff0c;…

spring mvc学习

第四章 Spring MVC 第一节 Spring MVC 简介 1. Spring MVC SpringMVC是一个Java 开源框架&#xff0c; 是Spring Framework生态中的一个独立模块&#xff0c;它基于 Spring 实现了Web MVC&#xff08;数据、业务与展现&#xff09;设计模式的请求驱动类型的轻量级Web框架&am…

Java面试八股之MySQL和postgresql的区别有哪些

MySQL和postgresql的区别有哪些 MySQL和PostgreSQL是两种非常流行的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它们各自拥有独特的特性和优势&#xff0c;适用于不同的场景。以下是它们之间的一些主要区别&#xff1a; SQL标准遵守程度 PostgreSQL 更严…

IDEA启动tomcat之后控制台出现中文乱码问题

方法1&#xff1a; 第一步&#xff1a;file--setting--Editor--File Encodings 注意页面中全部改为UTF-8&#xff0c;然后apply再ok 第二步&#xff1a;Run--Edit Configuration&#xff0c;将VM options输入以下值&#xff1a; -Dfile.encodingUTF-8 还是一样先apply再ok …

Linux走进网络

走进网络之网络解析 目录 走进网络之网络解析 一、认识计算机 1.计算机的发展 2.传输介质 3.客户端与服务器端的概念 交换机 路由器 二、计算机通信与协议 1. 协议的标准化 2. 数据包的传输过程 OSI 协议 ARP协议 3. TCP/IP:四层模型 4. TCP三次握手和四次挥手…