在 TKE 上利用 HPA 实现业务的弹性伸缩

概述

Kubernetes Pod 水平自动扩缩(Horizontal Pod Autoscaler,以下简称 HPA)可以基于 CPU 利用率、内存利用率和其他自定义的度量指标自动扩缩 Pod 的副本数量,以使得工作负载服务的整体度量水平与用户所设定的目标值匹配。本文将介绍和使用腾讯云容器服务 TKE 的 HPA 功能实现 Pod 自动水平扩缩容。

使用场景

HPA 自动伸缩特性使容器服务具有非常灵活的自适应能力,能够在用户设定内快速扩容多个 Pod 副本来应对业务负载的急剧飙升,也可以在业务负载变小的情况下根据实际情况适当缩容来节省计算资源给其他的服务,整个过程自动化无须人为干预,非常适合服务波动较大,服务数量多且需要频繁扩缩容的业务场景,如:电商服务、线上教育、金融服务等。

原理概述

Pod 水平自动扩缩特性由 Kubernetes API 资源和控制器实现。资源利用指标决定控制器的行为, 控制器会周期性的根据 Pod 资源利用情况调整服务 Pod 的副本数量,以使得工作负载的度量水平与用户所设定的目标值匹配。其扩缩容流程和说明如下:

提示:目前这一功能处于 beta 版本,且 Pod 自动水平扩缩不适用于无法扩缩的对象,比如 DaemonSet 资源。

HPA Controller:控制 HPA 扩缩逻辑的控制组件。

Metrics Aggregator:度量指标聚合器。通常情况下,控制器将从一系列的聚合 API(metrics.k8s.iocustom.metrics.k8s.ioexternal.metrics.k8s.io)中获取度量值。 metrics.k8s.io API 通常由 Metrics 服务器提供,社区版可提供基本的 CPU、内存度量类型,相比于社区版,TKE 使用自定义 Metrics Server 采集可支持更广泛的的 HPA 的度量指标触发类型,提供包括 CPU 、内存、硬盘、网络和 GPU 相关指标,了解更多详细内容参阅 TKE 自动伸缩指标说明

提示:控制器也可以直接从 Heapster 获取指标。但自 Kubernetes 1.11 起,从 Heapster 获取指标特性的方式已废弃。

HPA 计算目标副本数算法:TKE HPA 扩缩容算法请参考 工作原理,更多详细算法请参阅 算法细节

前提条件

操作步骤

第 1 步:部署测试工作负载

以 Deployment 资源类型的工作负载为例,创建一个单副本数,服务类型为 WEB 服务的 "hpa-test" 工作负载,在 TKE 控制台创建Deployment 类型工作负载方法请参阅 Deployment 管理。本示例创建结果如下图所示:

第 2 步:配置 HPA

在 TKE 控制台为测试工作负载绑定一个 HPA 配置,关于如何绑定配置 HPA 请参阅 HPA 操作步骤 ,本示例配置当网络出带宽达到0.15Mbps(150Kbps) 时触发扩容的策略。

第 3 步:功能验证

在集群中启动一个临时 Pod 对配置的 HPA 功能进行测试(模拟客户端):

kubectl run -it --image alpine hpa-test --restart=Never --rm /bin/sh

在临时 Pod 中运行下面命令短时间内模拟大量请求访问 "hpa-test" 服务使出口流量带宽增大:

# hpa-test.default.svc.cluster.local 为服务在集群中的域名,当需要停止脚本时按 Ctrl+C 即可
while true; do wget -q -O - hpa-test.default.svc.cluster.local; done

在测试 Pod 中执行模拟请求命令后,通过观察下图中工作负载的 Pod 数量监控可以看到,在 16:21 分时工作负载扩容副本数量至 2 个,由此可推断出已经触发了 HPA 的扩容事件。

再通过下图的工作负载的网络出口带宽监控可以看出在 16:21 右左时网络出口带宽增至大概 199 Kbps,已经超过 HPA 设定的网络出口带宽目标值,进一步证明此时触发 HPA 扩缩容算法 扩容了一个副本数来满足设定的目标值,故工作负载的副本数量变成了 2 个。

注意:HPA 扩缩容算法 不只以公式计算维度去控制扩缩容逻辑,而会多维度去衡量是否需要扩容或缩容,详情可以参阅 算法细节,所以在实际情况中可能和预期会稍有偏差。

接下来模拟缩容过程,在 16:24 左右手动停止执行模拟请求的命令, 从下图监控看到此时网络出口带宽值下降到扩容前位置,按照 HPA 的逻辑,此时已经满足工作负载缩容的条件。

但从下图工作负载的 Pod 数量监控可以看出,工作负载在 16:30 分时才触发了 HPA 的缩容,这是因为触发了 HPA 缩容有默认 5 分钟的容忍时间的算法,以防止度量指标短时间波动导致的频繁的扩缩容,详情请参阅 冷却/延迟支持。从下图可以看出工作负载副本数在停止命令 5 分钟后按照 HPA 扩缩容算法 缩容到了最初设定的 1 个副本数。

当 TKE 发生 HPA 扩缩容事件时,会在对应的 HPA 实例的事件列表展示,如下图所示。需要注意的是事件通知列表的时间分为 “首次出现时间” 和 “最后出现时间”,“首次出现时间” 表示相同事件第一次出现的时间,”最后出现时间” 为相同事件出现的最新时间,所以从下图事件列表 “最后出现时间” 字段可以看到本示例扩容事件时间点是16:21:03,缩容事件时间是16.29:42,时间点与工作负载监控看到的时间点相吻合。

此外,工作负载事件列表也会记录 HPA 发生时工作负载的增删副本数事件,从下图可以看出工作负载扩缩容时间点与 HPA 事件列表的时间点也是吻合的,增加副本数时间点是 16:21:03,减少副本数时间点是 16: 29:42。

总结

在本示例中主要演示了 TKE 的 HPA 功能, 使用 TKE 自定义的网络出口带宽度量类型作为工作负载 HPA 的扩缩容度量指标,当工作负载实际度量值超过 HPA 配置的度量目标值时, HPA 根据扩容算法计算出合适的副本数实现水平扩容,保证工作负载的度量指标满足预期,保障工作负载健康稳定运行;当实际度量值远低于 HPA 配置的度量目标值时,HPA 会在容忍时间后计算合适的副本数实现水平缩容,适当释放闲置资源,达到提升资源利用率的目的,并且整个过程在 HPA 和工作负载事件列表都会有相应的事件记录,使整个工作负载水平扩缩容全程可追溯。

【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!

在腾讯云容器服务 TKE 中利用 HPA 实现业务的弹性伸缩的更多相关文章

  1. 腾讯云容器服务 TKE 推出新一代零损耗容器网络

    随着容器技术的发展成熟,越来越多的组件迁移到容器,在技术迁移过程中,数据库,游戏,AI 这些组件对容器网络性能(时延,吞吐,稳定性)提出了更高的要求.为了得到更优的时延和吞吐表现,各大云厂商都在致力于 ...

  2. 腾讯云容器服务 TKE 拿下新加坡 MTCS 最高级别安全认证

    近日,腾讯云容器服务 TKE 荣获新加坡 MTCS 最高级安全认证,标志着腾讯云 TKE 在为用户提供可靠.易部署.灵活扩展等基础服务上,已经全面满足了新加坡监管机构以及多个行业客户对服务安全的要求. ...

  3. 手把手教你在容器服务 TKE 中使用动态准入控制器

    在 TKE 中使用动态准入控制器 原理概述 动态准入控制器 Webhook 在访问鉴权过程中可以更改请求对象或完全拒绝该请求,其调用 Webhook 服务的方式使其独立于集群组件,具有非常大的灵活性, ...

  4. 容器服务 TKE 存储插件与云硬盘 CBS 最佳实践应用

    引言 随着自研上云的深入,越来越多的有状态服务对于在 TKE 集群中使用云上存储能力的需求也越来越强烈. 目前腾讯云容器服务 TKE(Tencent Kubernetes Engine已支持在 TKE ...

  5. 容器服务 TKE 上服务暴露的几种方式

    预备知识 1. K8S 上 Service 类型 ClusterIP 通过集群的内部 IP 暴露服务,选择该值,服务只能够在集群内部可以访问,这也是默认的 ServiceType. NodePort ...

  6. asp.net core使用serilog将日志推送到腾讯云日志服务

    为什么是serilog? Serilog是 .NET 中最著名的结构化日志类库. 基于日志事件log events,而不是日志消息log message. 你可以将日志事件格式化为控制台的可读文本或者 ...

  7. 基于阿里云容器服务用docker容器运行ASP.NET 5示例程序

    小试阿里云容器服务 之后,接下来有一个挡不住的小试冲动--用docker容器运行程序.首先想到的程序是 ASP.NET 5示例程序,于是参考msdn博客中的这篇博文 Running ASP.NET 5 ...

  8. 阿里云容器服务--配置自定义路由服务应对DDOS攻击

    阿里云容器服务--配置自定义路由服务应对DDOS攻击 摘要: 容器服务中,除了slb之外,自定义路由服务(基于HAProxy)也可以作为DDOS攻击的一道防线,本文阐述了几种方法来应对普通规模的DDO ...

  9. 阿里云容器服务与ASP.NET Core部署:用 docker secrets 保存 appsettings.Production.json

    这是我们使用阿里云容器服务基于 docker 容器部署 asp.net core 应用遇到的另一个问题 —— 如果将包含敏感信息的应用配置文件 appsettings.Production.json ...

随机推荐

  1. 【洛谷】P1009 阶乘之和——高精度算法

    题目描述 用高精度计算出S = 1! + 2! + 3! + - + n!  ( n ≤  50 ) S = 1! + 2! + 3! + - + n! ( n ≤ 50 ) 其中"!&qu ...

  2. php 实现签名验签

    本人php菜鸟,主要使用php实现简单的签名验签功能 以下php代码使用的密钥格式为pem格式,其他证书格式可以使用openssl进行转换(未安装请实现安装): 以下是.p12文件导出pem格式公私钥 ...

  3. 从直播商城系统的KOL效应分析,直播带货井喷的必然性

    网红营销.直播带货作为近年来的热点发展迅猛,同时也捧红了一个概念:KOL.随着直播商城系统的不断完善发展,让KOL成为近年来营销最热门的香饽饽.随着原创直播平台低门槛化.模板化内容创作和大数据智能分发 ...

  4. ci之 core下CodeIgniter源码分析(1)

    ci 执行流程 index.php 文件 加载codeigniter文件 codeigniter部分里面加载的: 加载配置文件constants 加载全局公共函数core/Common.php 文件 ...

  5. php抽奖程序

    //php概率抽奖算法 1.获取总的概率数 2.随机从1到总概率数 3.判断获取的随机数是否在小于等于(就是你随机的数是否在数组值得范围中比如数组为array(1,2,3,4,5,6)则随机出了一个数 ...

  6. 等效介质理论模型---利用S参数反演法提取超材料结构的等效参数

    等效介质理论模型---利用S参数反演法提取超材料结构的等效参数 S参数反演法,即利用等效模型的传输矩阵和S参数求解超材料结构的等效折射率n和等效阻抗Z的过程.本文对等效介质理论模型进行了详细介绍,并提 ...

  7. Spring源码之IOC容器创建、BeanDefinition加载和注册和IOC容器依赖注入

    总结 在SpringApplication#createApplicationContext()执行时创建IOC容器,默认DefaultListableBeanFactory 在AbstractApp ...

  8. 预估ceph的迁移数据量

    引言 我们在进行 ceph 的 osd 的增加和减少的维护的时候,会碰到迁移数据,但是我们平时会怎么去回答关于迁移数据量的问题,一般来说,都是说很多,或者说根据环境来看,有没有精确的一个说法,到底要迁 ...

  9. SQL SERVER 数据库自动备份及定期删除设置步骤

    现在任何的软件都离不了一个数据库,数据的利用价值越来越大,为了避免数据宕机造成的数据丢失情况的产生,定期对数据库进行备份是必须要做的工作,下面将介绍SQL Server自带的数据库备份方法,希望可以帮 ...

  10. 链表(LinkedList)解题总结

    链表基础知识 定义 链表(Linked List)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer). 链表的操作 操作 ...