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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 弹性伸缩是根据业务需求和策略,经济地自动调整弹性计算资源的管理服务。

企业级运维之云原生与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来回扩缩造成的抖动?
相关文章
|
4天前
|
存储 Kubernetes C++
Kubernetes VS Docker Swarm:哪个容器编排工具更适合你?
随着容器技术的快速发展,容器编排工具成为了现代软件开发和运维的重要环节。在众多容器编排工具中,Kubernetes和Docker Swarm无疑是最受欢迎的两个。本文将从技术特性、易用性和社区支持三个方面,对Kubernetes和Docker Swarm进行比较,以帮助您选择更适合您需求的容器编排工具。
19 3
|
22天前
|
Kubernetes API 调度
中间层 k8s(Kubernetes) 到底是什么,架构是怎么样的?
中间层 k8s(Kubernetes) 到底是什么,架构是怎么样的?
34 3
|
22天前
|
运维 Kubernetes Cloud Native
云原生时代的容器编排:Kubernetes入门与实践
【10月更文挑战第4天】在云计算的浪潮中,云原生技术以其敏捷、可扩展和高效的特点引领着软件开发的新趋势。作为云原生生态中的关键组件,Kubernetes(通常被称为K8s)已成为容器编排的事实标准。本文将深入浅出地介绍Kubernetes的基本概念,并通过实际案例引导读者理解如何利用Kubernetes进行高效的容器管理和服务部署。无论你是初学者还是有一定经验的开发者,本文都将为你打开云原生世界的大门,并助你一臂之力在云原生时代乘风破浪。
|
23天前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
61 0
|
24天前
|
Kubernetes 网络协议 安全
[kubernetes]二进制方式部署单机k8s-v1.30.5
[kubernetes]二进制方式部署单机k8s-v1.30.5
|
6月前
|
人工智能 运维 Kubernetes
阿里云容器服务ACK AI助手正式上线带来的便利性
作为开发者想必大家都知道,云原生容器技术的优势,尤其是近两年的随着容器技术的迅猛发展,Kubernetes(K8s)已成为广泛应用于容器编排和管理的领先解决方案,但是K8s的运维复杂度一直是挑战之一。为了应对这一问题,就在最近,阿里云容器服务团队正式发布了ACK AI助手,这是一款旨在通过大模型增强智能诊断的产品,旨在帮助企业和开发者降低Kubernetes(K8s)的运维复杂度。那么本文就来详细讲讲关于这款产品,让我们结合实际案例分享一下K8s的运维经验,探讨ACK AI助手能否有效降低K8s的运维复杂度,并展望ACK AI助手正式版上线后的新功能。
338 2
阿里云容器服务ACK AI助手正式上线带来的便利性
|
6月前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
6月前
|
人工智能 弹性计算 调度
阿里云容器服务 ACK 产品技术动态(202312)
容器服务 Kubernetes 版 ACK 【新功能】 Feature:支持基于机密虚拟机的 AI 模型推理保护 ACK 现已支持将基于 Intel® Trusted Domain Extension(Intel® TDX)技术的 ECS 实例加入 TDX 机密虚拟机计算节点池,使集群具备 TDX 机密计算能力,实现 AI 模型的可信推理和微调,保障模型数据的机密性与完整性。结合 PyTorch 与 Intel® AMX指令集,您可以在 32 核实例上实现秒级出图的推理能力。
495 1
|
2月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
3年前的云栖大会,我们发布分布式云容器平台ACK One,随着3年的发展,很高兴看到ACK One在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报下ACK One 3年来的发展演进,以及如何帮助客户解决分布式领域多云多集群管理的挑战。
阿里云容器服务 ACK One 分布式云容器企业落地实践
|
2月前
|
人工智能 Prometheus 监控
使用 NVIDIA NIM 在阿里云容器服务(ACK)中加速 LLM 推理
本文介绍了在阿里云容器服务 ACK 上部署 NVIDIA NIM,结合云原生 AI 套件和 KServe 快速构建高性能模型推理服务的方法。通过阿里云 Prometheus 和 Grafana 实现实时监控,并基于排队请求数配置弹性扩缩容策略,提升服务稳定性和效率。文章提供了详细的部署步骤和示例,帮助读者快速搭建和优化模型推理服务。
144 7
使用 NVIDIA NIM 在阿里云容器服务(ACK)中加速 LLM 推理

热门文章

最新文章

推荐镜像

更多