企业级运维之云原生与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来回扩缩造成的抖动?
相关文章
|
3月前
|
人工智能 运维 监控
运维也能“先演练后实战”?聊聊数字孪生的那些神操作
运维也能“先演练后实战”?聊聊数字孪生的那些神操作
105 0
|
5月前
|
人工智能 运维 安全
基于合合信息开源智能终端工具—Chaterm的实战指南【当运维遇上AI,一场效率革命正在发生】
在云计算和多平台运维日益复杂的今天,传统命令行工具正面临前所未有的挑战。工程师不仅要记忆成百上千条操作命令,还需在不同平台之间切换终端、脚本、权限和语法,操作效率与安全性常常难以兼顾。尤其在多云环境、远程办公、跨部门协作频繁的背景下,这些“低效、碎片化、易出错”的传统运维方式,已经严重阻碍了 IT 团队的创新能力和响应速度。 而就在这时,一款由合合信息推出的新型智能终端工具——Chaterm,正在悄然颠覆这一现状。它不仅是一款跨平台终端工具,更是业内率先引入 AI Agent 能力 的“会思考”的云资源管理助手。
|
4月前
|
缓存 运维 安全
7天精通电商API:从接入到运维的完整实战手册
本文全面解析电商API接口技术,从基础概念到高阶应用,涵盖商品、订单、支付与营销等核心模块,并深入探讨性能优化、安全防护与智能化发展方向,助你掌握驱动数字商业的核心技术。
|
1月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
1月前
|
数据采集 运维 监控
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
本文系统解析爬虫与自动化核心技术,涵盖HTTP请求、数据解析、分布式架构及反爬策略,结合Scrapy、Selenium等框架实战,助力构建高效、稳定、合规的数据采集系统。
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
|
7月前
|
消息中间件 存储 NoSQL
RocketMQ实战—6.生产优化及运维方案
本文围绕RocketMQ集群的使用与优化,详细探讨了六个关键问题。首先,介绍了如何通过ACL配置实现RocketMQ集群的权限控制,防止不同团队间误用Topic。其次,讲解了消息轨迹功能的开启与追踪流程,帮助定位和排查问题。接着,分析了百万消息积压的处理方法,包括直接丢弃、扩容消费者或通过新Topic间接扩容等策略。此外,提出了针对RocketMQ集群崩溃的金融级高可用方案,确保消息不丢失。同时,讨论了为RocketMQ增加限流功能的重要性及实现方式,以提升系统稳定性。最后,分享了从Kafka迁移到RocketMQ的双写双读方案,确保数据一致性与平稳过渡。
|
8月前
|
运维 安全 网络安全
【运维实战分享】轻松搞定 SSL 证书管理,告别证书繁琐操作
Spug证书平台的最大亮点之一就是其极为简化的证书申请流程,无论是新手还是经验丰富的运维专家,都可以在几分钟内轻松完成证书的申请,通过微信扫码直接登录申请,无需复杂注册,整个过程既方便又快捷。
215 17
|
9月前
|
Cloud Native 安全 Serverless
云原生应用实战:基于阿里云Serverless的API服务开发与部署
随着云计算的发展,Serverless架构日益流行。阿里云函数计算(Function Compute)作为Serverless服务,让开发者无需管理服务器即可运行代码,按需付费,简化开发运维流程。本文从零开始,介绍如何使用阿里云函数计算开发简单的API服务,并探讨其核心优势与最佳实践。通过Python示例,演示创建、部署及优化API的过程,涵盖环境准备、代码实现、性能优化和安全管理等内容,帮助读者快速上手Serverless开发。
|
8月前
|
Prometheus 运维 监控
运维实战来了!如何构建适用于YashanDB的Prometheus Exporter
今天分享的是构建YashanDB Exporter的核心设计理念和关键方法,希望也能为你的运维实战加分!