企业级运维之云原生与Kubernetes实战课程 - 第四章第4讲 ACK集群弹性伸缩

简介: 弹性伸缩是根据业务需求和策略,经济地自动调整弹性计算资源的管理服务。

企业级运维之云原生与Kubernetes实战课程

第四章第4 ACK集群弹性伸缩

 

 

视频地址:

https://developer.aliyun.com/learning/course/913/detail/14608

 

 

一、 弹性伸缩概述

 

1.  集群弹性伸缩

 

弹性伸缩是根据业务需求和策略,经济地自动调整弹性计算资源的管理服务。

 

弹性伸缩的本质是解决容量和成本之间的博弈。当出现资源不足、资源浪费或激增峰值容量的场景下,就需要运用弹性伸缩,如下图。

 image.png

 

2.  弹性伸缩的优势

 

针对三类人群,弹性伸缩的优势分别是:

 

  • 开发人员:应用获得高可用的保障;
  • 运维人员:降低基础设施的管理成本;
  • 架构师:架构灵活应对突发的激增峰值。

 

3.  弹性伸缩的分类

 

弹性伸缩分为两个维度:调度层弹性和资源层弹性。

 

a.  调度层弹性:

 

  • 所有弹性都与Pod相关,而无需关心资源情况;
  • 主要负责修改负载的调度容量变化;
  • 组件包括:
  • HPAPod水平伸缩组件,调整应用的副本数;
  • VPAPod纵向伸缩组件,面向有状态服务的扩容和升级场景;
  • CronHPA:定时伸缩组件,面向周期性负载场景

 

b.  资源层弹性:

 

  • 所有弹性都与Pod和资源情况相关;
  • 主要是集群的容量规划不能满足集群调度容量时,会通过弹出ECSECI等资源的方式进行调度容量的补充;
  • 组件包括:
  • cluster-autoscaler:当Pod资源不足时,主动进行节点伸缩;
  • virtual-kubelet-autoscaler:当没有足够资源给Pod调度时,弹出虚拟节点,并将Pod调度到虚拟节点。

 

二、HPA

 

Pod水平伸缩(HPA)可以基于CPU/Memory等指标对Pod副本数进行扩缩。

 

1.  HPA原理

 

a.  HPA自动伸缩的三步骤:

 

  • 获取被伸缩资源对象管理的所有Pod度量;
  • 计算使度量数值到达或接近所指定目标数值所需的Pod数量;
  • 更新被伸缩资源的replicas字段;

image.png

 

b.  适用对象

 

  • Deployment
  • StatefulSet
  • ReplicaSet
  • ReplicationController

 

c.  不适用对象

 

  • DaemonSet

 

2.  计算所需的Pod数量

 image.png

 

如上图所示,假设有3PodCPU使用率分别是60%90%50%QPS分别为153012

 

场景一:单个Pod指标的自动伸缩

 

如果目标CPU使用率为50%,计算需要多少副本数:(60+90+50/50=4,因此,需要扩容1Pod

 

场景2:多个Pod指标的自动伸缩

 

除了目标CPU使用率指标,又增加了目标QPS指标,这时HPA会单独计算每个指标的副本数,然后取最大值;

 

当目标QPS20,副本数=15+30+12/20=3,因此两个指标的副本数取最大值就是4

 

计算公式:

 image.png

 

公式解读:所有的Pod监控数值求和后除以HPA资源上配置的目标值。

 

3.  HPA特性

 

a.  统计周期

 

  • --horizontal-Pod -autoscaler-sync-period参数控制统计指标的周期,默认15s

 

b.  忽略Pod 度量

 

  • Pod被标记为删除;
  • Pod缺失度量值,它将会被搁置,只在最终确定扩缩数量时再考虑;
  • 当使用CPU指标来扩缩时,任何还未就绪(例如还在初始化)状态的Pod,该Pod会被搁置;

 

c.  冷却、延迟支持

 

  • 场景:指标动态变化较频繁,会造成副本数量频繁变化,称之为“抖动”;
  • --horizontal-Pod -autoscaler-downscale-stabilization可以控制冷却时间,即自从上次缩容执行结束后,多久可以再次执行缩容,默认时间是5分钟;

 

d.  边界值计算

 

  • 在计算边界条件时,会自动加入10%的缓冲负载缓解整体的负载情况;

 

e.  支持的指标

 

  • 除了自带的CPUMemory指标外,还支持用户自定义指标以及外部指标。

 

4.  HPA示例

 

apiVersion: autoscaling/v1

 kind: HorizontalPodAutoscaler

 metadata:

   name:test

 spec:

   maxReplicas:3

   minReplicas:2

   scaleTargetRef:

     apiVersion:apps/v1

     kind:Deployment

     name: test1

   targetCPUUtilizationPercentage: 80

 

参数说明:

 

  • max/minReplicas:最大/最小副本数;
  • scaleTargetRef:设置当前HPA绑定的对象,在本例中绑定名为test1Deployment
  • targetCPUUntilizationPercentage:目标CPU使用率。

 

5.  创建HPA应用

 

HPA应用有两种创建方式,一种是通过容器服务器控制台创建,另一种是通过Kuberletctl命令创建。

 

a.  通过容器服务器控制台创建

 

示例:为已有应用开启HPA

 

  • 在集群管理页左侧导航栏中,选择工作负载 > 无状态;
  • 在无状态页面中,单击目标应用名称进入详情页;
  • 单击容器伸缩页签,然后单击“创建”;
  • 在创建对话框中设置伸缩配置,单击“确定”;

 image.png

 

b.  通过Kubectl命令创建

 

通过编排模板来手动创建HPA,并将其绑定到要伸缩的Deployment对象上,通过kubectl命令实现容器自动伸缩配置。

 

注意:HPA需要给Pod设置request资源,如果没有request资源,HPA不会运行。

 

三、节点自动伸缩

 

1.  节点扩容

 

节点是否扩容是根据集群中是否有pending状态的Pod来决策的。

 image.png

 

扩容原理:

 

cluster-autoscaler是通过对处在PendingPod进行监听而触发的。当Pod处在Pending的原因是调度资源不足的时候,会触发cluster-autoscaler的模拟调度,模拟调度器会计算在配置的伸缩组中,哪个伸缩组弹出节点后可以调度这些PendingPod

 

2.  节点缩容

 

节点是否缩容是根据集群中是否有节点调度利用率低于阈值来决策的。

 image.png

 

缩容原理:

 

  • 首先只有弹性伸缩弹出的节点会被缩容,静态的节点是无法被cluster-autoscaler接管的。缩容的判断是通过每个节点单独判断的,当任意一个节点的调度利用率低于所设置的调度阈值时,会触发节点的缩容判断。
  • 同时还要计算哪个伸缩组弹出节点后可以调度这些pending,此时cluster-autoscaler会尝试模拟驱逐节点上面的负载,判断当前节点是否可以排水彻底。有些特殊的Podkube-system命名空间的非DaemonSet PodPDB控制的Pod等),则会跳过该节点而选择其他的候选节点。
  • 当节点发生驱逐时,会先进行排水,将节点上的Pod驱逐到其他的节点,然后再下线该节点。

 

3.  操作演示

 

步骤一:执行自动伸缩

 

在集群列表页面,在目标集群右侧的操作列下,选择更多> 自动伸缩,进入集群自动弹性伸缩配置页面。

 

步骤二:授权

 

授权RAM角色AliyunCSManagedAutoScalerRole

 image.png

在云资源访问授权页面,单击同意授权;

 image.png

步骤三:配置自动伸缩

 

a.  在集群自动弹性伸缩配置页面,填写以下信息并提交:

 

  • 允许缩容;
  • 缩容阈值:cluster-autoscaler管理的伸缩组中,每一个节点的资源申请值(Request)与每一个节点的资源容量的比值,当低于配置的阈值时,节点会进行缩容;
  • GPU缩容阈值;
  • 缩容触发时延:集群满足配置的缩容阈值时,在配置的缩容触发时延到达后,集群开始缩容。单位:分钟,默认情况下是10分钟;
  • 静默时间:扩容出的节点,在静默时间过后,方可进入缩容判断;
  • 弹性灵敏度;
  • 节点池扩容顺序策略。

 image.png

 

b.  创建节点池,设置伸缩组的配置项;

 image.png

 

c.  单击确认配置,创建伸缩组。

 

 

本讲小结

 

1.  ACK集群伸缩的几种类型,包括HPAVPACronHPA、节点自动伸缩、虚拟节点自动伸缩;

2.  HPA水平伸缩的机制节点自动伸缩的机制。

 

思考:

  • HPA和节点自动伸缩,有什么区别?
  • 如何延缓hpa来回扩缩造成的抖动?
相关文章
|
人工智能 关系型数据库 OLAP
光云科技 X AnalyticDB:构建 AI 时代下的云原生企业级数仓
AnalyticDB承载了光云海量数据的实时在线分析,为各个业务线的商家提供了丝滑的数据服务,实时物化视图、租户资源隔离、冷热分离等企业级特性,很好的解决了SaaS场景下的业务痛点,也平衡了成本。同时也基于通义+AnalyticDB研发了企业级智能客服、智能导购等行业解决方案,借助大模型和云计算为商家赋能。
946 17
|
9月前
|
运维 Dubbo Cloud Native
Dubbo 云原生重构出击:更快部署、更强控制台、更智能运维
Apache Dubbo 最新升级支持云原生,提供一键部署微服务集群与全新可视化控制台,提升全生命周期管理体验,助力企业高效构建云原生应用。
1018 25
|
9月前
|
运维 Kubernetes Cloud Native
云原生运维也能很稳:Kubernetes 运维避坑指南
云原生运维也能很稳:Kubernetes 运维避坑指南
301 1
|
10月前
|
运维 监控 Cloud Native
从“守机器”到“写策略”——云原生架构把运维逼成了架构师
从“守机器”到“写策略”——云原生架构把运维逼成了架构师
244 1
|
存储 运维 关系型数据库
开源新发布|PolarDB-X v2.4.1 增强企业级运维能力
PolarDB-X 是阿里云推出的云原生分布式数据库,自2021年10月开源以来,持续迭代升级,至2024年4月发布的v2.4.1版本,重点增强了企业级运维能力,如无锁变更、物理扩缩容、数据TTL等,提供金融级高可用、透明分布式、HTAP一体化等特性。PolarDB-X 支持集中式和分布式一体化形态,兼容MySQL生态,适用于金融、通信、政务等行业。
2189 101
|
人工智能 运维 监控
阿里云携手神州灵云打造云内网络性能监测标杆 斩获中国信通院高质量数字化转型十大案例——金保信“云内网络可观测”方案树立云原生运维新范式
2025年,金保信社保卡有限公司联合阿里云与神州灵云申报的《云内网络性能可观测解决方案》入选高质量数字化转型典型案例。该方案基于阿里云飞天企业版,融合云原生引流技术和流量“染色”专利,解决云内运维难题,实现主动预警和精准观测,将故障排查时间从数小时缩短至15分钟,助力企业降本增效,形成可跨行业复制的数字化转型方法论。
660 6
|
运维 Cloud Native 开发工具
智能运维:云原生大规模集群GitOps实践
智能运维:云原生大规模集群GitOps实践,由阿里云运维专家钟炯恩分享。内容涵盖云原生运维挑战、管理实践、GitOps实践及智能运维体系。通过OAM模型和GitOps优化方案,解决大规模集群的发布效率与稳定性问题,推动智能运维工程演进。适用于云原生环境下的高效运维管理。
584 8
|
边缘计算 运维 Cloud Native
云原生技术的崛起:重新定义软件开发与运维
云原生技术的崛起:重新定义软件开发与运维
|
存储 Cloud Native 块存储
EBS深度解析:云原生时代企业级块存储
企业上云的策略,从 Cloud-Hosting 转向 Serverless 架构。块存储作为企业应用上云的核心存储产品,将通过 Serverless 化来加速新的计算范式全面落地。在本话题中,我们将会介绍阿里云块存储企业级能力的创新,深入解析背后的技术细节,分享对未来趋势的判断。
1086 3