计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
弹性伸缩 AS
镜像服务 IMS
专属主机 DeH
函数工作流 FunctionGraph
云手机服务器 CPH
Huawei Cloud EulerOS
网络
虚拟私有云 VPC
弹性公网IP EIP
虚拟专用网络 VPN
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
VPC终端节点 VPCEP
云连接 CC
企业路由器 ER
企业交换机 ESW
全球加速 GA
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
边缘安全 EdgeSec
威胁检测服务 MTD
CDN与智能边缘
内容分发网络 CDN
CloudPond云服务
智能边缘云 IEC
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
云搜索服务 CSS
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
数据可视化 DLV
数据湖工厂 DLF
湖仓构建 LakeFormation
企业应用
云桌面 Workspace
应用与数据集成平台 ROMA Connect
云解析服务 DNS
专属云
专属计算集群 DCC
IoT物联网
IoT物联网
设备接入 IoTDA
智能边缘平台 IEF
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
国际站常见问题
ICP备案
我的凭证
支持计划
客户运营能力
合作伙伴支持计划
专业服务
区块链
区块链服务 BCS
Web3节点引擎服务 NES
解决方案
SAP
高性能计算 HPC
视频
视频直播 Live
视频点播 VOD
媒体处理 MPC
实时音视频 SparkRTC
数字内容生产线 MetaStudio
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
存储容灾服务 SDRS
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
专属分布式存储服务 DSS
容器
云容器引擎 CCE
容器镜像服务 SWR
应用服务网格 ASM
华为云UCS
云容器实例 CCI
管理与监管
云监控服务 CES
统一身份认证服务 IAM
资源编排服务 RFS
云审计服务 CTS
标签管理服务 TMS
云日志服务 LTS
配置审计 Config
资源访问管理 RAM
消息通知服务 SMN
应用运维管理 AOM
应用性能管理 APM
组织 Organizations
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
应用身份管理服务 OneAccess
数据库
云数据库 RDS
文档数据库服务 DDS
数据管理服务 DAS
数据复制服务 DRS
云数据库 GeminiDB
云数据库 GaussDB
分布式数据库中间件 DDM
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
人脸识别服务 FRS
图引擎服务 GES
图像识别 Image
内容审核 Moderation
文字识别 OCR
AI开发平台ModelArts
图像搜索 ImageSearch
对话机器人服务 CBS
华为HiLens
视频智能分析服务 VIAS
语音交互服务 SIS
应用中间件
分布式缓存服务 DCS
API网关 APIG
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
多活高可用服务 MAS
事件网格 EG
企业协同
华为云会议 Meeting
云通信
消息&短信 MSGSMS
云生态
合作伙伴中心
云商店
开发者工具
SDK开发指南
API签名指南
Terraform
华为云命令行工具服务 KooCLI
其他
产品价格详情
系统权限
管理控制台
客户关联华为云合作伙伴须知
消息中心
公共问题
开发与运维
应用管理与运维平台 ServiceStage
软件开发生产线 CodeArts
需求管理 CodeArts Req
部署 CodeArts Deploy
性能测试 CodeArts PerfTest
编译构建 CodeArts Build
流水线 CodeArts Pipeline
制品仓库 CodeArts Artifact
测试计划 CodeArts TestPlan
代码检查 CodeArts Check
代码托管 CodeArts Repo
云应用引擎 CAE
开天aPaaS
云消息服务 KooMessage
云手机服务 KooPhone
云空间服务 KooDrive
本文导读

展开导读

工作负载伸缩原理

更新时间:2024-10-14 GMT+08:00
CCE支持多种工作负载伸缩方式,策略对比如下:
表1 弹性伸缩策略对比

伸缩策略

HPA策略

CronHPA策略

CustomedHPA策略

策略介绍

Kubernetes中实现POD水平自动伸缩的功能,即Horizontal Pod Autoscaling

基于HPA策略的增强能力,主要面向应用资源使用率存在周期性变化的场景。

CCE自研的弹性伸缩增强能力,可实现基于指标触发或定时触发弹性伸缩。

策略规则

基于指标(CPU利用率、内存利用率),对无状态工作负载进行弹性扩缩容。

基于周期(每天、每周、每月或每年的具体时间点),对无状态工作负载进行弹性扩缩容。

基于指标(CPU利用率、内存利用率)或周期(每天、每周、每月或每年的具体时间点),对无状态工作负载进行弹性扩缩容。

主要功能

在Kubernetes社区HPA功能的基础上,增加了应用级别的冷却时间窗和扩缩容阈值等功能。

CronHPA提供HPA对象的兼容能力,您可以同时使用CronHPA与HPA。

  • CronHPA与HPA策略共同使用:CronHPA作用于HPA策略之上,用于定时调整HPA策略的实例数范围。
  • CronHPA策略单独使用:CronHPA 直接定时调整工作负载的Pod实例数。

指标触发

  • 支持按照当前实例数的百分比进行扩缩容。
  • 支持设置一次扩缩容的最小步长,可分步分级扩缩容。
  • 支持按照实际指标值执行不同的扩缩容动作。

周期触发

支持选择天、周、月或年的具体时间点或周期作为触发时间

HPA工作原理

HPA(Horizontal Pod Autoscaler)是用来控制Pod水平伸缩的控制器,HPA周期性检查Pod的度量数据,计算满足HPA资源所配置的目标数值所需的副本数量,进而调整目标资源(如Deployment)的replicas字段。

想要做到自动弹性伸缩,先决条件就是能感知到各种运行数据,例如集群节点、Pod、容器的CPU、内存使用率等等。而这些数据的监控能力Kubernetes也没有自己实现,而是通过其他项目来扩展Kubernetes的能力,Kubernetes提供PrometheusMetrics Server插件来实现该能力:

  • Prometheus是一套开源的系统监控报警框架,能够采集丰富的Metrics(度量数据),目前已经基本是Kubernetes的标准监控方案。
  • Metrics Server是Kubernetes集群范围资源使用数据的聚合器。Metrics Server从kubelet公开的Summary API中采集度量数据,能够收集包括了Pod、Node、容器、Service等主要Kubernetes核心资源的度量数据,且对外提供一套标准的API。

使用HPA(Horizontal Pod Autoscaler)配合Metrics Server可以实现基于CPU和内存的自动弹性伸缩,再配合Prometheus还可以实现自定义监控指标的自动弹性伸缩。

HPA主要流程如图1所示。

图1 HPA流程图

HPA的核心有如下2个部分:

  • 监控数据来源

    最早社区只提供基于CPU和Mem的HPA,随着应用越来越多搬迁到K8s上以及Prometheus的发展,开发者已经不满足于CPU和Memory,开发者需要应用自身的业务指标,或者是一些接入层的监控信息,例如:Load Balancer的QPS、网站的实时在线人数等。社区经过思考之后,定义了一套标准的Metrics API,通过聚合API对外提供服务。

    • metrics.k8s.io: 主要提供Pod和Node的CPU和Memory相关的监控指标。
    • custom.metrics.k8s.io: 主要提供Kubernetes Object相关的自定义监控指标。
    • external.metrics.k8s.io:指标来源外部,与任何的Kubernetes资源的指标无关。
  • 扩缩容决策算法

    HPA controller根据当前指标和期望指标来计算缩放比例,计算公式如下:

    desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]

    例如当前的指标值是200m,目标值是100m,那么按照公式计算期望的实例数就会翻倍。那么在实际过程中,可能会遇到实例数值反复伸缩,导致集群震荡。为了保证稳定性,HPA controller从以下几个方面进行优化:

    • 冷却时间:在1.11版本以及之前的版本,社区引入了horizontal-pod-autoscaler-downscale-stabilization-window和horizontal-pod-autoScaler-upscale-stabilization-window这两个启动参数代表缩容冷却时间和扩容冷却时间,这样保证在冷却时间内,跳过扩缩容。1.14版本之后引入延迟队列,保存一段时间内每一次检测的决策建议,然后根据当前所有有效的决策建议来进行决策,从而保证期望的副本数尽量小的发生变更,保证稳定性。
    • 忍受度:可以看成一个缓冲区,当实例变化范围在忍受范围之内的话,保持原有的实例数不变。

      首先定义ratio = currentMetricValue / desiredMetricValue

      当|ratio – 1.0| <= tolerance时,则会忽略,跳过scale。

      当|ratio – 1.0| > tolerance时, 就会根据之前的公式计算期望值。

      当前社区版本中默认值为0.1。

HPA是基于指标阈值进行伸缩的,常见的指标主要是 CPU、内存,也可以通过自定义指标,例如QPS、连接数等进行伸缩。但是存在一个问题:基于指标的伸缩存在一定的时延,这个时延主要包含:采集时延(分钟级) + 判断时延(分钟级) + 伸缩时延(分钟级)。这个分钟级的时延,可能会导致应用CPU飚高,响应时间变慢。为了解决这个问题,CCE提供了定时策略,对于一些有周期性变化的应用,提前扩容资源,而业务低谷时,定时回收资源。

我们使用cookie来确保您的高速浏览体验。继续浏览本站,即表示您同意我们使用cookie。 详情

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容