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 来回扩缩造成的抖动?

相关文章
|
1月前
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
11天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
1月前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
71 1
|
2月前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
2月前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
2月前
|
Kubernetes Ubuntu Linux
Centos7 搭建 kubernetes集群
本文介绍了如何搭建一个三节点的Kubernetes集群,包括一个主节点和两个工作节点。各节点运行CentOS 7系统,最低配置为2核CPU、2GB内存和15GB硬盘。详细步骤包括环境配置、安装Docker、关闭防火墙和SELinux、禁用交换分区、安装kubeadm、kubelet、kubectl,以及初始化Kubernetes集群和安装网络插件Calico或Flannel。
203 4
|
2月前
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
932 1
|
2月前
|
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容器编排
93 3
|
弹性计算 缓存 运维
【运维知识进阶篇】用阿里云部署kod可道云网盘(DNS解析+CDN缓存+Web应用防火墙+弹性伸缩)(三)
【运维知识进阶篇】用阿里云部署kod可道云网盘(DNS解析+CDN缓存+Web应用防火墙+弹性伸缩)(三)
230 0
|
7月前
|
弹性计算 监控 开发工具
【阿里云弹性计算】实战教程:如何高效利用阿里云ECS弹性伸缩应对业务高峰
【5月更文挑战第20天】本文介绍了如何使用阿里云ECS弹性伸缩服务应对业务高峰。通过自动调整云资源规模,弹性伸缩在流量增加时扩展实例,流量减少时收缩实例,实现成本与性能的优化。步骤包括开通服务、创建伸缩组、设定规则和监控指标。文中还提供了一个Python脚本示例,并强调了优化策略,如应用无状态设计、考虑冷却时间和结合云监控。通过实践和调整,企业可以有效应对业务波动。
168 5

热门文章

最新文章