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

作者:吴昆

什么是弹性调度

云计算时代,企业可以通过云平台获得大量计算资源,并根据业务发展和流量需求的实时变化,灵活调整使用的资源类型与资源量。阿里云提供了多种弹性资源,如云服务器 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-namenamespace: $example-namespace
spec:selector:$example-label-key: $example-label-valuestrategy: preferunits:- nodeSelector:alibabacloud.com/nodepool-id: $example-ecs-nodepool-idresource: ecs- nodeSelector:alibabacloud.com/nodepool-id: $example-spot-instance-nodepool-idresource: 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-namenamespace: $example-namespace
spec:selector:$example-label-key: $example-label-valuestrategy: preferunits:- nodeSelector:alibabacloud.com/nodepool-id: $example-ecs-nodepool-idresource: ecsmax: $example-max- nodeSelector:alibabacloud.com/nodepool-id: $example-spot-instance-nodepool-idresource: 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.mzph.cn/news/638733.shtml

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

相关文章

基于 Spring Boot+MySQL实现的在线考试系统源码+数据库,基于不同类型的客观题,进行自动组卷、批卷等功能的考试系统

1. 部署相关 1.1. 介绍 一个 JAVA 实现的在线考试系统,主要实现一套基于不同类型的客观题,进行自动组卷、批卷等功能的考试系统(没有主观题) 1.2. 系统架构 后端技术栈基于 Spring Boot数据库MySQLORMMyBatis & MyBatis-plus缓存Redis、guava的L…

【Java网络编程02】套接字编程

【Java网络编程02】套接字编程 1. Socket套接字 概念:Socket套接字,就是系统提供用于实现网络通信的技术,是基于TCP/IP协议的网络通信基本操作单元。基于Socket套接字的网络程序开发就是网络编程。 分类: 我们可以把Socket套接字…

docker 部署 sentinel

docker 部署 sentinel 环境安装 拉取镜像 目前稳定的版本是1.8.0 docker pull bladex/sentinel-dashboard:1.8.0启动服务 docker run --name sentinel -p 8858:8858 -td bladex/sentinel-dashboard:1.8.0登录 登录的时候账号和密码都是sentinel

算法训练营Day45

#Java #动态规划 Feeling and experiences: 最长公共子序列:力扣题目链接 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新…

泛型..

1.泛型 所谓泛型 其实就是一种类型参数(我们平常所见到的参数指的就是方法中的参数 他接收有外界传递来的值 然后在方法中进行使用) 并且还提高了代码的复用率 何以见得提高了代码的复用率 其实就是通过对比使用了泛型技术和没有使用泛型技术之间的区别: 以下是没有…

windows如何切换访问NAS共享文件夹用户

从资源管理器对NAS共享文件夹输入用户名与密码进行访问后,想切换访问用户,搜索了一圈,网上介绍的方法都无效,最后只能注销windows7登陆,然后重新登陆,再访问NAS共享时才能切换用户,各位观众如有…

深度学习记录--Momentum gradient descent

Momentum gradient descent 正常的梯度下降无法使用更大的学习率,因为学习率过大可能导致偏离函数范围,这种上下波动导致学习率无法得到提高,速度因此减慢(下图蓝色曲线) 为了减小波动,同时加快速率,可以使用momentum…

【软件测试】学习笔记-制定性能测试的目标

之前有同学交流过,在测试执行过程中他并不清楚测试得到的结果到底能不能满足这次活动的需求。经过追问,发现他连本次活动规则涉及的模块和接口都不是十分清楚,像这样的测试就是没有做性能测试目标的分析。虽然说做了性能测试,但几…

学习CANopen --- [12] Abort报文

当我们使用SDO进行读写操作时,有时device会返回abort报文,意味着本次SDO读写失败。本文使用例子来讲解Abort报文,以及如何解读失败原因。 一 Device例子 下面是device的python代码,文件名叫device.py,device的CANopen…

Linux配置主机名-使用主机名访问服务器

主要需要对Hosts文件进行操作, Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”, 先将自己的主机名设置成有意义,别人好记的样子&a…

上位机图像处理和嵌入式模块部署(开篇)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 图像处理是现实生活当中很实用的一门技术。工业上一般采用的是机器视觉,以传统算法和光源控制为主,部分采用了深度学习技术…

【51单片机】外部中断

0、前言 参考&#xff1a;普中 51 单片机开发攻略 第16章 及17章 1、硬件 2、软件 #include <reg52.h> #include <intrins.h> #include "delayms.h"typedef unsigned char u8; typedef unsigned int u16;sbit led P2^0; sbit key3 P3^2;//外部中断…

【深度学习:数据增强 】提高标记数据质量的 5 种方法

【深度学习&#xff1a;数据增强 】提高标记数据质量的 5 种方法 计算机视觉中常见的数据错误和质量问题&#xff1f;为什么需要提高数据集的质量&#xff1f;提高标记数据质量的五种方法使用复杂的本体结构作为标签人工智能辅助标签识别标签错误的数据改进注释者管理 计算机视…

spark 入门教程

一、安装scala环境 官网下载地址 Download | The Scala Programming Language,本次使用版本为sacla2.11.12,将压缩包解压至指定目录&#xff0c;配置好环境变量&#xff0c;控制台验证是否安环境是否可用&#xff1a; 二、添加pom依赖 创建一个maven项目 1、添加scala的sdk依…

github 推送报错 ssh: connect to host github.com port 22: Connection timed out 解决

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

[pytorch] 2. tensorboard

tensorboard简介 TensorBoard 是一组用于数据可视化的工具。它包含在流行的开源机器学习库 Tensorflow 中.但是也可以独立安装&#xff0c;服务Pytorch等其他的框架 可以常常用来观察训练过程中每一阶段如何输出的 安装pip install tensorboard启动tensorboard --logdir<d…

会声会影2024专业旗舰版新功能介绍

随着科技的不断发展&#xff0c;视频制作已经不再是专业人士的专属领域&#xff0c;越来越多的人开始使用各种视频制作软件来记录生活、创作内容。其中&#xff0c;会声会影是被广泛使用的一款视频制作软件&#xff0c;其旗舰版更是备受关注。 据悉&#xff0c;会声会影2024旗舰…

E/E架构升级是汽车智能化发展关键

E/E架构升级是汽车智能化发展的关键。传统汽车采用的分布式E/E架构因计算能力不足、通讯带宽不足、不便于软件升级等瓶颈&#xff0c;无法满足现阶段汽车发展的需求&#xff0c;E/E架构升级将助力智能汽车实现跨越式革新。汽车E/E架构升级主要体现在硬件架构升级、软件架构升级…

基于SpringBoot的校园求职招聘系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

[小程序]基于token的权鉴测试

一、服务器配置 服务器基于flask&#xff0c;需要额外安装flask_jwt_extended包 from flask import Flask #导入Flask包 from flask import request from flask import jsonify #用来返回json消息 from flask_jwt_extended import create_access_token, jwt_requi…