企业级运维之云原生与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来回扩缩造成的抖动?
相关文章
|
7月前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
264 12
|
7月前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
本教程演示如何在ACK中使用vLLM框架快速部署DeepSeek R1模型推理服务。
|
7月前
|
Kubernetes 持续交付 数据库
阿里云ACK+GitLab企业级部署实战教程
GitLab 是一个功能强大的基于 Web 的 DevOps 生命周期平台,整合了源代码管理、持续集成/持续部署(CI/CD)、项目管理等多种工具。其一体化设计使得开发团队能够在同一平台上进行代码协作、自动化构建与部署及全面的项目监控,极大提升了开发效率和项目透明度。 GitLab 的优势在于其作为一体化平台减少了工具切换,高度可定制以满足不同项目需求,并拥有活跃的开源社区和企业级功能,如高级权限管理和专业的技术支持。借助这些优势,GitLab 成为许多开发团队首选的 DevOps 工具,实现从代码编写到生产部署的全流程自动化和优化。
|
8月前
|
SQL 弹性计算 分布式计算
阿里云 EMR 发布托管弹性伸缩功能,支持自动调整集群大小,最高降本60%
阿里云开源大数据平台 E-MapReduce 重磅推出托管弹性伸缩功能,基于 EMR 托管弹性伸缩功能,您可以指定集群的最小和最大计算限制,EMR 会持续对与集群上运行的工作负载相关的关键指标进行采样,自动调整集群大小,以获得最佳性能和资源利用率。
327 15
|
Kubernetes 监控 容灾
ACK One舰队管理:企业级多集群管理解决方案
ACK One舰队管理是阿里云为您提供的强大的多集群管理方案,功能众多:GitOps应用分发、多集群网关、多集群Service、全局可观测、服务网格、统一权限管理等,方便您轻松应对混合云、多集群、容灾等场景的问题,简化多集群管理。
|
运维 Kubernetes 监控
云原生时代的运维革新:Kubernetes的自动化之旅
在云原生技术不断演进的今天,Kubernetes已成为容器编排的事实标准。本文将深入探讨Kubernetes如何通过自动化工具和实践,为运维团队提供高效率、高可用性的解决方案,从而推动运维工作向更高效、智能化的方向转型。
169 6
|
运维 Kubernetes Cloud Native
Kubernetes云原生问题之在托管Kubernetes服务中云服务商和用户的运维责任划分如何解决
Kubernetes云原生问题之在托管Kubernetes服务中云服务商和用户的运维责任划分如何解决
79 3
|
运维 Kubernetes Go
"解锁K8s二开新姿势!client-go:你不可不知的Go语言神器,让Kubernetes集群管理如虎添翼,秒变运维大神!"
【8月更文挑战第14天】随着云原生技术的发展,Kubernetes (K8s) 成为容器编排的首选。client-go作为K8s的官方Go语言客户端库,通过封装RESTful API,使开发者能便捷地管理集群资源,如Pods和服务。本文介绍client-go基本概念、使用方法及自定义操作。涵盖ClientSet、DynamicClient等客户端实现,以及lister、informer等组件,通过示例展示如何列出集群中的所有Pods。client-go的强大功能助力高效开发和运维。
884 1
|
人工智能 运维 Kubernetes
智能化运维:KoPylot为k8S带来AI监控诊断
智能化运维:KoPylot为k8S带来AI监控诊断
|
Kubernetes 网络协议 Python
运维开发.Kubernetes探针与应用
运维开发.Kubernetes探针与应用
438 2

热门文章

最新文章