ACK 集群弹性伸缩 | 学习笔记

简介: 快速学习 ACK 集群弹性伸缩

开发者学堂课程【企业级运维之云原生与 Kubernets 实战课程: ACK 集群弹性伸缩】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/913/detail/14608


ACK 集群弹性伸缩

一、 弹性伸缩概述

1. 集群弹性伸缩

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

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

image.png

2. 弹性伸缩的优势

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

Ÿ 开发人员:应用获得高可用的保障;

Ÿ 运维人员:降低基础设施的管理成本;

Ÿ 架构师:架构灵活应对突发的激增峰值。

3. 弹性伸缩的分类

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

a. 调度层弹性:

Ÿ 所有弹性都与 Pod 相关,而无需关心资源情况;

Ÿ 主要负责修改负载的调度容量变化;

Ÿ 组件包括:

ž HPA:Pod 水平伸缩组件,调整应用的副本数;

ž VPA:Pod 纵向伸缩组件,面向有状态服务的扩容和升级场景;

ž CronHPA:定时伸缩组件,面向周期性负载场景

b. 资源层弹性:

Ÿ 所有弹性都与 Pod 和资源情况相关;

Ÿ 主要是集群的容量规划不能满足集群调度容量时,会通过弹出 ECS 或 ECI 等资源的方式进行调度容量的补充;

Ÿ 组件包括:

ž 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

如上图所示,假设有 3 个 Pod,CPU 使用率分别是 60%、90%、50%,QPS 分别为 15、30、12;

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

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

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

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

当目标 QPS 为 20,副本数=(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. 支持的指标

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

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绑定的对象,在本例中绑定名为 test1 的Deployment;

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

2. 节点缩容

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

image.png

缩容原理:

Ÿ 首先只有弹性伸缩弹出的节点会被缩容,静态的节点是无法被 cluster-autoscaler 接管的。缩容的判断是通过每个节点单独判断的,当任意一个节点的调度利用率低于所设置的调度阈值时,会触发节点的缩容判断。

Ÿ 同时还要计算哪个伸缩组弹出节点后可以调度这些 pending,此时 cluster-autoscaler 会尝试模拟驱逐节点上面的负载,判断当前节点是否可以排水彻底。有些特殊的 Pod(kube-system 命名空间的非 DaemonSet Pod、PDB 控制的 Pod等),则会跳过该节点而选择其他的候选节点。

Ÿ 当节点发生驱逐时,会先进行排水,将节点上的 Pod 驱逐到其他的节点,然后再下线该节点。

3. 操作演示

步骤一:执行自动伸缩

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

步骤二:授权

授权 RAM 角色 AliyunCSManagedAutoScalerRole

image.png

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

image.png

步骤三:配置自动伸缩

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

允许缩容;

缩容阈值:cluster-autoscaler 管理的伸缩组中,每一个节点的资源申请值(Request)与每一个节点的资源容量的比值,当低于配置的阈值时,节点会进行缩容;

GPU 缩容阈值;

缩容触发时延:集群满足配置的缩容阈值时,在配置的缩容触发时延到达后,集群开始缩容。单位:分钟,默认情况下是 10 分钟;

静默时间:扩容出的节点,在静默时间过后,方可进入缩容判断;

弹性灵敏度;

节点池扩容顺序策略。

image.png

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

image.png

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

 

本讲小结

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

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

思考:

Ÿ HPA 和节点自动伸缩,有什么区别?

Ÿ 如何延缓 hpa 来回扩缩造成的抖动?

相关文章
|
9月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
721 1
|
9月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
518 89
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
1083 9
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
1287 33
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
850 19
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
|
人工智能 运维 Kubernetes
阿里云容器服务ACK AI助手正式上线带来的便利性
作为开发者想必大家都知道,云原生容器技术的优势,尤其是近两年的随着容器技术的迅猛发展,Kubernetes(K8s)已成为广泛应用于容器编排和管理的领先解决方案,但是K8s的运维复杂度一直是挑战之一。为了应对这一问题,就在最近,阿里云容器服务团队正式发布了ACK AI助手,这是一款旨在通过大模型增强智能诊断的产品,旨在帮助企业和开发者降低Kubernetes(K8s)的运维复杂度。那么本文就来详细讲讲关于这款产品,让我们结合实际案例分享一下K8s的运维经验,探讨ACK AI助手能否有效降低K8s的运维复杂度,并展望ACK AI助手正式版上线后的新功能。
1044 2
阿里云容器服务ACK AI助手正式上线带来的便利性
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
Kubernetes 监控 调度
阿里云容器服务ACK
阿里云容器服务ACK(Alibaba Cloud Container Service for Kubernetes)提供高性能、可伸缩的容器应用管理服务,支持企业级Kubernetes容器化应用的生命周期管理。在ACK中,利用cGPU(Containerized GPU)技术可以实现GPU资源的共享,提高GPU利用率,降低整体成本。
521 6

推荐镜像

更多