弹性调度助力企业灵活应对业务变化,高效管理云上资源

news2025/1/12 6:53:25

作者:吴昆

什么是弹性调度

云计算时代,企业可以通过云平台获得大量计算资源,并根据业务发展和流量需求的实时变化,灵活调整使用的资源类型与资源量。阿里云提供了多种弹性资源,如云服务器 ECS 和弹性容器实例 ECI,并且提供不同的付费方式,如包年包月、按量付费和抢占实例等。不同类型和付费方式的实例,在给客户带来更高的灵活性的同时,也对客户的资源管理能力提出了更高的要求。

阿里云容器服务 ACK 通过节点池功能,简化了集群节点的管理与运维,支持自动弹性伸缩,根据业务负载和预设策略自动调整节点数量,可以弹出不同可用区、实例规格和付费方式的 ECS 实例,虚拟节点也可以按需创建 ECI 实例,以此满足多样化的需求场景并优化成本。然而,客户仍需面对如何高效利用和管理这些计算资源的挑战。

面临的挑战主要有以下几点:

1. 差异化控制业务资源使用量

在集群中,配置了包年包月实例和抢占实例,并在资源不足时将业务 Pod 运行在 ECI 实例上。为了确保高优先级的业务能够在稳定的包年包月实例上运行,我们需要限制不同业务在不同类型实例上的资源使用量。

2. 缩容时部分业务 Pod 未释放

默认的缩容策略难以保证优先缩容高峰期扩容出的业务 Pod,导致业务流量高峰过后,在自动伸缩节点池或 ECI 实例上,仍然存在部分业务 Pod 未释放,导致机器无法缩容并持续计费,需要人工进行业务 Pod 迁移。

弹性调度的目标,就是帮助客户解决在使用云上弹性资源时面对的挑战。包括按照多级资源的优先顺序进行调度,以及按照定义的优先顺序进行缩容的能力。

自定义弹性资源优先级调度

为了解决客户在多级资源管理中面临的难题,阿里云容器服务 ACK 在标准 K8s 调度框架的基础上扩展了弹性调度功能,推出了“自定义弹性资源优先级调度”功能。

该功能提供了差异化调度 ECS 和 ECI 资源的能力,包括:

  • 自定义弹性资源优先级调度策略:

    在应用发布或扩容过程中,客户可以按照自定义资源策略,设置应用实例 Pod 被调度到不同类型节点资源的顺序。

  • 逆序缩容:

    当客户通过 HPA 缩容业务 Pod 时,可以按照策略中资源优先级的逆序缩容业务,确保弹性资源优先缩容,减少计费。

  • 灵活修改策略:

    当策略发生变化时,同步调整已调度的业务 Pod 的优先级。而且,该功能通过自定义资源定义策略实现,无需改动业务 Deployment。

  • 控制业务资源使用量:

    通过限制不同业务在不同类型实例的资源使用量,确保高优资源优先供给高优业务使用。

  • 多种资源使用量统计策略:

    限制业务资源使用量时,支持多种不同的资源使用量统计策略,如忽略 Terminating 过程中的 Pod 或忽略提交 ResourcePolicy 策略前已调度的 Pod 等。

  • 优化 Deployment 滚动更新: 能够自动将滚动更新过程中新创建的 Pod 视为新的分组,无需在每次更新 Deployment 时同步手动更新 ResourcePolicy。

下面我们将通过两个场景示例介绍弹性调度功能是如何帮助企业优化资源配置,实现降本增效的。

场景一:常驻 ECS 实例+自动伸缩抢占式实例实现逆序缩容

抢占式实例(旧称竞价实例)是一种按需实例,性能与常规 ECS 实例无异,价格根据市场供需关系实时变化,相对于按量付费实例最高能节约 90% 的实例成本。通过合理使用抢占式实例,用户能够极大降低云资源成本。

抢占式实例具有可能被其他出价更高的用户抢占导致实例被回收的特点,不能保证业务的最低运行实例要求,所以用户通常会将抢占式实例和长期包年包月实例配合使用。

在业务流量的高峰期,由 Pod 水平扩缩(HPA)自动扩容出业务 Pod,再由自动伸缩节点池根据处于 Pending 状态的 Pod 实例数扩容出抢占式实例。

图片

在业务流量减少后,抢占式实例中的 Pod 应当被优先回收,使得抢占式实例能够被自动伸缩节点池回收以减少资源开销。目前默认的缩容策略可能会将运行在常驻 ECS 上的 Pod 回收,导致额外开销。

如下图所示,其中 cn-hongkong.192.168.7.147 和 cn-hongkong.192.168.7.148 分别带有 unit=first 和 unit=second 标签,代表优先希望调度到 cn-hongkong.192.168.7.147 上:

图片

图片

缩容到三个 Pod 后:

图片

可以看到 Pod 依然保留在 cn-hongkong.192.168.7.148 上。

为了实现优先回收抢占式实例的效果,可以向集群中提交以下的 ResourcePolicy,以下实例的含义是在调度业务 Pod 时仅在靠前的带有 alibabacloud.com/nodepool-id: example-ecs-nodepool-id 的节点均无法调度 Pod 时,才将 Pod 调度到带有 alibabacloud.com/nodepool-id: example-spot-instance-nodepool-id 的节点上。

策略中假设 ECS 实例和抢占式实例是通过节点池 ID 进行区分的,您也可以通过机型或其他自定义标签进行区分,实际使用时请将变量按需替换:

apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
  name: $example-name
  namespace: $example-namespace
spec:
  selector:
    $example-label-key: $example-label-value
  strategy: prefer
  units:
  - nodeSelector:
      alibabacloud.com/nodepool-id: $example-ecs-nodepool-id
    resource: ecs
  - nodeSelector:
      alibabacloud.com/nodepool-id: $example-spot-instance-nodepool-id
    resource: ecs

配置后的效果如下:

图片

图片

这个示例中我们提交了一个优先调度到带有 unit=first 标签的节点,之后调度到带有 unit=second 标签的节点的策略。

图片

在扩容时,Pod 在完全使用节点 cn-hongkong.192.168.7.147 上的资源后,将后续业务 Pod 调度到节点 cn-hongkong.192.168.7.148 上。

图片

最后我们将业务 Deployment 缩容为三副本,此时节点 cn-hongkong.192.168.7.148 上的业务 Pod 被优先移除,达到了逆序缩容的效果。在实际使用场景中,在 cn-hongkong.192.168.7.148 上的业务 Pod 被移除后,自动伸缩节点池会自动进行相应节点的回收,从而达到节约成本的效果。

场景二:通过 Max 选项控制业务资源使用量

滚动更新是业务上线过程中一项非常重要的流程,为了保障业务在滚动更新过程中不受影响,业务通常会采用“创建后删除”的策略,即等到业务的新副本正常运行了再逐渐清理旧副本,这就使得滚动更新中业务实际消耗的资源量高于运行过程中的资源量,超出使用的资源量可能会影响到集群中其他业务的运行或扩容。

为了限制业务在部分类型资源上的资源使用量,您可以使用 Max 选项,该选项允许限制业务 Pod 在每种资源类型上的数量,从而限制资源使用。启用该功能只需要在 ResourcePolicy 的 Unit 中新增一个 Max 字段:

apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
  name: $example-name
  namespace: $example-namespace
spec:
  selector:
    $example-label-key: $example-label-value
  strategy: prefer
  units:
  - nodeSelector:
      alibabacloud.com/nodepool-id: $example-ecs-nodepool-id
    resource: ecs
    max: $example-max
  - nodeSelector:
      alibabacloud.com/nodepool-id: $example-spot-instance-nodepool-id
    resource: ecs

当设置了 Max 之后,如果业务 Pod 在该 Unit 上运行的 Pod 数量已经达到了 Max,则下一个 Pod 将会被调度到后续的 Unit 上,若已经是最后一个 Unit,则 Pod 会调度失败。

以下是一个使用 Max 限制资源使用的例子,依然给 cn-hongkong.192.168.7.147 和 cn-hongkong.192.168.7.148 分别设置 unit=first 和 unit=second 标签。

图片

图片

不加资源限制时,业务会将高优资源用完再使用下一级,若此时有其他高优应用则无法使用该高优资源。

图片

图片

在该例子中我们提交了一个优先调度到带有 unit=first 标签的节点,之后调度到带有 unit=second 标签的节点的策略,并在一级策略上添加了最多调度一个业务 Pod 的限制,这会将 app=nginx 业务在一级资源上的业务使用限制在 1 个 Pod 的级别。

图片

配置了 ResourcePolicy 之后,可以发现业务在 unit=first 的机器上的资源使用被限制,超出限制的部分被调度在了 unit=second 的机器上,从而实现了业务的资源合理分配。

What’s Next

弹性调度功能通过多级优先级调度、多级资源限制、逆序缩容等能力,帮助企业高效利用云上资源。除了本文介绍的两种基本用法外,阿里云容器服务 ACK 自定义弹性资源优先级调度还支持多种资源统计策略、根据 Label 智能分组等高级特性。通过灵活设置弹性调度,企业可以实现高效的资源配置与成本管理,更好的应对业务增长带来的资源管理挑战。

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

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

相关文章

MySQL的一些综合运用

一些基本的语句: USE dept_emp; CREATE TABLE dept ( deptno INT(2) NOT NULL COMMENT 部门编号, dname VARCHAR (15) COMMENT 部门名称, loc VARCHAR (20) COMMENT 地理位置 ); -- 添加主键 ALTER TABLE dept ADD PRIMARY KEY (deptno); -- 添加数据 INSE…

[学习笔记]刘知远团队大模型技术与交叉应用L4-Prompt-learning Delta-learning

Prompt-Learning and Delta-Tunning 背景和概览 但是从T5开始,大模型越来越大了。 微调很难了。 模型的趋势 Model Scaling:模型越来越大 Difficult Tuning:微调越来越难 Prompt-Learning 基本组成与流程介绍 预训练和fine-tuning有一…

终极解决Flutter项目运行ios项目报错Without CocoaPods, plugins will not work on iOS or macOS.

前言 最近在开发Flutter项目,运行ios环境的时候报错没有CocoaPods,安卓环境可以正常运行,当时一脸懵逼,网上搜索了一下,有给我讲原理的,还有让我安装这插件那插件的,最终把电脑搞得卡死&#x…

【机器学习300问】15、什么是逻辑回归模型?

一、逻辑回归模型是为了解决什么问题? 逻辑回归(Logistic Regression)是一种广义线性回归分析模型,尤其适用于解决二分类问题(输出为两个类别)。 (1)二分类举例 邮件过滤&#xff…

HarmonyOS鸿蒙应用开发(三、轻量级配置存储dataPreferences)

在应用开发中存储一些配置是很常见的需求。在android中有SharedPreferences,一个轻量级的存储类,用来保存应用的一些常用配置。在HarmonyOS鸿蒙应用开发中,实现类似功能的也叫首选项,dataPreferences。 相关概念 ohos.data.prefe…

zabbix监控扩展

目录 一、zabbix自动发现与自动注册 (一)理论定义 1.自动发现 2.自动注册 (二)实操部署 1.自动发现 (1)新增一台客户端命名为zbx-agent02 ① 配置时间同步 ② 在服务端和客户端上配置 hosts 解析 …

自定义注解与拦截器实现不规范sql拦截(拦截器实现篇)

最近考虑myBatis中sql语句使用规范的问题,如果漏下条件或者写一些不规范语句会对程序性能造成很大影响。最好的方法就是利用代码进行限制,通过拦截器进行sql格式的判断在自测环节就能找到问题。写了个简单情景下的demo,并通过idea插件来将myB…

JavaScript进阶:WebAPIs重点知识整理1

目录 1 DOM修改元素内容 2 DOM修改元素常见属性 3 修改元素样式属性 3.1 通过style修改元素样式 3.2 通过类名className修改元素样式 3.3 通过classList修改元素样式 4 操作表单元素属性 5 自定义属性 6 定时器 7 事件监听 7.1 点击事件 click 7.2 鼠mouseenter和移…

【数据结构】 双链表的基本操作 (C语言版)

目录 一、双链表 1、双链表的定义: 2、双链表表的优缺点: 二、双链表的基本操作算法(C语言) 1、宏定义 2、创建结构体 3、双链表的初始化 4、双链表表插入 5、双链表的查找 6、双链表的取值 7、求双链表长度 8、双链表…

华南理工大学数字信号处理实验实验一(薛y老师版本)matlab源码

一、实验目的 1、加深对离散信号频谱分析的理解; 2、分析不同加窗长度对信号频谱的影响; 3、理解频率分辨率的概念,并分析其对频谱的 影响; 4、窗长和补零对DFT的影响 实验源码: 第一题: % 定义离散信…

C++函数对象-函数包装器-调用空的 std::function 时抛出的异常(std::bad_function_call)

任何定义了函数调用操作符的对象都是函数对象。C 支持创建、操作新的函数对象,同时也提供了许多内置的函数对象。 函数包装器 std::function 提供存储任意类型函数对象的支持。 用空的 std::function 时抛出的异常 std::bad_function_call class bad_function_cal…

【C++】命名空间(namespace)

文章目录 1. 为什么要有命名空间?2. 命名空间介绍3.命名空间三种使用方式4. 注意 1. 为什么要有命名空间? 在C语言中,局部变量和全局变量如果同名,在使用时可能会造成冲突。这并不是想避免就能避免的,在程序中,不仅仅是变量&…

《WebKit 技术内幕》之八(2):硬件加速机制

2 Chromium的硬件加速机制 2.1 GraphicsLayer的支持 GraphicsLayer对象是对一个渲染后端存储中某一层的抽象,同众多其他WebKit所定义的抽象类一样,在WebKit移植中,它还需要具体的实现类来支持该类所要提供的功能。为了完成这一功能&#x…

系统架构设计师教程(十三)层次式架构设计理论与实践

层次式架构设计理论与实践 13.1 层次式体系结构概述13.2 表现层框架设计13.2.1 表现层设计模式13.2.2 使用XML设计表现层,统一Web Form与Windows Form的外观13.2.3表现层中UIP设计思想13.2.4 表现层动态生成设计思想 13.3 中间层架构设计13.3.1 业务逻辑层组件设计1…

【Elasticsearch】索引恢复(recovery)流程梳理之副本分片数据恢复

replica shard重启具体流程 replica shard node (generic threadpool) 也是因为应用新的集群状态触发recovery,进入index阶段进入translog 阶段。先尝试重放本地的translog到global checkpoint向primary shard发起start recovery的请求&…

JVM对象创建与内存回收机制

对象的创建过程有如下步骤: 1.类加载检查: 虚拟机遇到一个new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过,如果没…

【golang】Context超时控制与原理

Context 在Go语言圈子中流行着一句话: Never start a goroutine without knowing how it will stop。 翻译:如果你不知道协程如何退出,就不要使用它。 在创建协程时,我们可能还会再创建一些别的子协程,那么这些协程的…

【书籍】强化学习第二版(英文版电子版下载、github源码)-附copilot翻译的中英文目录...

Python代码:https://github.com/ShangtongZhang/reinforcement-learning-an-introduction 英文原版书籍下载:http://incompleteideas.net/book/the-book-2nd.html 作者: 理查德S萨顿是阿尔伯塔大学计算机科学教授和强化学习与人工智能 AITF 主…

1.6万字全面掌握 BERT:自然语言处理(NLP)从初学到高级的全面指南

BERT(双向编码器表示来自Transformer的模型)是由Google开发的一种革命性的自然语言处理(NLP)模型。它改变了语言理解任务的格局,使机器能够理解语言中的上下文和细微差异。 在本博客中,我们将带您从 BERT …

信息安全概述

信息安全:防止任何对数据进行未授权访问的措施,或者防止造成信息有意无意泄漏、破坏、丢失等问题的发生,让数据处于远离危险、免于威胁的状态或特性。 网络安全:计算机网络环境下的信息安全。 信息安全现状及挑战 数字化时代威…