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

相关文章
|
13小时前
|
存储 运维 Kubernetes
Kubernetes 集群的持续性能优化策略
【5月更文挑战第14天】 在动态且不断扩展的云计算环境中,保持 Kubernetes 集群的高性能运行是一个挑战。本文将探讨一系列实用的性能优化措施,旨在帮助运维专家确保其容器化应用能在资源受限的情况下仍保持高效与稳定。通过分析 Kubernetes 的资源调度机制、存储和网络配置,我们提出了一套综合的性能调优框架,并结合实际案例,展示如何实施这些策略以提升集群的整体性能。
|
13小时前
|
运维 Prometheus 监控
Kubernetes 集群监控与性能优化实践
【5月更文挑战第14天】 在微服务架构日益普及的当下,Kubernetes 已成为容器编排的事实标准。然而,随着集群规模的扩大和业务复杂度的增加,监控系统的性能及稳定性变得至关重要。本文将深入探讨 Kubernetes 集群监控的重要性,介绍常用监控工具,并分享一系列针对集群性能优化的实践策略,帮助运维工程师确保服务的高可用性和优越性能。
|
13小时前
|
Kubernetes 安全 API
Kubernetes学习-集群搭建篇(三) Node配置完善和API概述
Kubernetes学习-集群搭建篇(三) Node配置完善和API概述
Kubernetes学习-集群搭建篇(三) Node配置完善和API概述
|
13小时前
|
Kubernetes 应用服务中间件 Docker
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
|
13小时前
|
存储 运维 Kubernetes
Kubernetes学习-集群搭建篇(一) 搭建Master结点
Kubernetes学习-集群搭建篇(一) 搭建Master结点
|
13小时前
|
Kubernetes API 调度
Kubernetes学习-核心概念篇(二) 集群架构与组件
Kubernetes学习-核心概念篇(二) 集群架构与组件
|
13小时前
|
存储 运维 监控
Kubernetes 集群的持续监控与性能优化策略
【5月更文挑战第11天】在微服务架构日益普及的当下,Kubernetes 已成为容器编排的事实标准。随着其在不同规模企业的广泛采用,如何确保 Kubernetes 集群的高效稳定运行变得至关重要。本文将探讨一套系统的 Kubernetes 集群监控方法,并结合实践经验分享针对性能瓶颈的优化策略。通过实时监控、日志分析与定期审计的结合,旨在帮助运维人员快速定位问题并提出解决方案,从而提升系统的整体表现。
|
13小时前
|
Kubernetes Java API
Kubernetes详解(三)——Kubernetes集群组件
Kubernetes详解(三)——Kubernetes集群组件
16 1
|
13小时前
|
运维 监控 Kubernetes
Kubernetes 集群的监控与维护策略
【5月更文挑战第4天】 在当今微服务架构盛行的时代,容器化技术已成为软件开发和部署的标准实践。Kubernetes 作为一个开源的容器编排平台,因其强大的功能和灵活性而广受欢迎。然而,随着 Kubernetes 集群规模的扩大,集群的监控和维护变得日益复杂。本文将探讨 Kubernetes 集群监控的重要性,分析常见的监控工具,并提出一套有效的集群维护策略,以帮助运维人员确保集群的健康运行和高可用性。
41 10
|
13小时前
|
存储 运维 监控
Kubernetes 集群的持续监控与优化策略
【5月更文挑战第3天】在微服务架构和容器化部署日益普及的背景下,Kubernetes 已成为众多企业的首选容器编排平台。然而,随着集群规模的增长和业务复杂度的提升,有效的集群监控和性能优化成为确保系统稳定性和提升资源利用率的关键。本文将深入探讨针对 Kubernetes 集群的监控工具选择、监控指标的重要性解读以及基于数据驱动的性能优化实践,为运维人员提供一套系统的持续监控与优化策略。

热门文章

最新文章