弹性伸缩落地实践

这篇具有很好参考价值的文章主要介绍了弹性伸缩落地实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

弹性伸缩落地实践

1. 什么是 HPA ?

HPA(Horizontal Pod Autoscaler)是 Kubernetes 中的一种资源自动伸缩机制,用于根据某些指标动态调整 Pod 的副本数量。

2. 什么时候需要 HPA ?

  • 负载波动:当您的应用程序的负载经常发生波动时,HPA 可以自动调整 Pod 的副本数量,以适应负载的变化。例如,对于 Web 应用程序,在高峰期需要更多的副本以处理更多的请求,而在低谷期可以减少副本数量以节省资源。

  • 活动推广:当您的应用程序需要扩展以满足推广活动、新产品发布或突发事件带来的流量增加时,HPA 可以自动增加 Pod 的副本数量,以提供更高的容量和性能。这有助于保持应用程序的可用性和用户体验。

  • 定时弹性:大促期间,设置开始和结束时间,自动弹性扩缩容,不用人工干预,提高效率。

  • 节约成本:通过使用 HPA,您可以根据应用程序的负载需求自动调整 Pod 的副本数量。这可以帮助您避免过度分配资源,节省资源和成本。当负载较低时,HPA 可以减少副本数量,释放不必要的资源。

3. 原生 HPA 的不足

  • 使用率计算基于 resources.requests

  • 不支持定时扩缩容

4. KEDA

采用 KEDA 作为弹性伸缩系统的基座,主要考虑到如下优势点:

  • 功能丰富:内嵌 CPU/Cron/Prom 多种伸缩策略,原生支持缩容至零。

  • 扩展性好:解耦被伸缩对象(支持/scale 子资源即可)和伸缩指标,提供强大的插件机制和抽象接口(scaler + metrics adapter),增加伸缩指标非常便利。

  • 社区强大:CNCF 官方毕业项目,微软和 RedHat 强力支持。

4.1 工作原理

KEDA 监控来自外部指标提供程序系统(例如 Azure Monitor)的指标,然后根据基于指标值的缩放规则进行缩放。它直接与度量提供者系统通信。它作为 Kubernetes Operator 运行,它只是一个 pod 并持续监控。

KEDA 将 K8s Core Metrics Pipeline 和 Monitoring Pipeline 处理流程统一化,并内置多种 scaler ( link ),提供开箱即用的弹性策略支持,如常见的基于 CPU/Memory 的弹性策略、定时弹性等:

4. 最佳实践

说明:

原生Deployment对象不支持灰度发布策略,所以改用 Argo-Rollout 资源对象,下面示例均采用 Argo-Rollout 演示

4.1 定时弹性

4.1.1 后端模版

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: <appid>-cron
namespace: <env>
spec:
minReplicaCount: <origin-replicas>
scaleTargetRef:
  apiVersion: argoproj.io/v1alpha1
  kind: Rollout
  name: <appid>-default
triggers:
- type: cron
  metadata:
    timezone: Asia/Shanghai
    start: 30 * * * *
    end: 45 * * * *
    desiredReplicas: "10"

4.1.2 前端设计

支持三个周期

  • 按天

  • 按星期

  • 自定义 Cron 表达式

4.1.3 消息通知模版

定时HPA动态扩缩容提醒:

AppID:<appid>
归属环境:<env>
容器集群:<cluster>
开始扩容时间:30 11 * * 1
结束扩容时间:30 12 * * 1
容器数量变化:1 --> 2
触发时间:2023-11-13 12:35:16
如有疑问可参考:HPA使用文档,或咨询@SRE客服

4.2 基于资源的弹性

根据 cpu、mem 等资源使用率,自动扩缩容,低负载缩容,减小不必要资源占用,高负载自动扩容,保证应用有足够的资源使用。

4.2.1 后端模版(数据降噪)

说明:

基于 Prometheus 拉取真实资源使用情况,并屏蔽刚启动的 Pod

-default 为基线应用,cluster、zone 是 Prometheus remote_write 到 VictoriaMetrics 新增便签,便于区分集群和区域

VictoriaMetrics 是统一汇总、查询层,方便不同集群使用一套数据源

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
labels:
  scaledobject.keda.sh/name: <appid>
name: <appid>
namespace:<env>
spec:
maxReplicaCount: <max-replicas>
minReplicaCount: <origin-replicas>
scaleTargetRef:
  apiVersion: argoproj.io/v1alpha1
  kind: Rollout
  name: <appid>-default
triggers:
- metadata:
    metricName: cpu_utilization
    query: sum((sum (rate(container_cpu_usage_seconds_total{zone="<zone>",namespace="<env>",pod=~"<appid>-default.*",container!=""}[1m]))
      by(pod) and on(pod) time() - kube_pod_start_time{zone="<zone>",namespace="<env>",pod=~"<appid>-default.*"}
      > 150 )/( sum (container_spec_cpu_quota{zone="<zone>",namespace="<env>",pod=~"<appid>-default.*",container!=""})
      by(pod) /100000) * 100)
    serverAddress: http://<victoria-select>/select/1/prometheus
    threshold: "80"
  type: prometheus
- metadata:
    metricName: mem_utilization
    query: sum((sum by(pod) (container_memory_working_set_bytes{zone="<zone>",namespace="<env>",pod=~"<appid>-default.*",container!="",container!="POD"})
      and on(pod) time() -kube_pod_start_time{zone="<zone>",namespace="<env>",pod=~"<appid>-default.*"}>
      150) / sum by(pod) (container_spec_memory_limit_bytes{zone="<zone>",namespace="<env>",pod=~"<appid>-default.*",container!="",container!="POD"})*100)
    serverAddress: http://<victoria-select>/select/1/prometheus
    threshold: "80"
  type: prometheus

4.2.2 前端设计

4.2.3 消息通知模版

指标HPA动态扩缩容提醒:

AppID:<appid>
归属环境:<env>
容器集群:<cluster>
触发指标:cpu使用率(设定阈值为: 40.0%)
触发指标当前值:77.0%
容器数量变化:1 --> 2
触发时间:2023-11-16 10:38:40
如有疑问可参考:HPA使用文档,或咨询@SRE客服

4.3 基于业务指标的弹性

上生产前,在 UT 环境压测,确定 最大 QPS、最高接受的 RT、最大接受 消息积压数等,监控平台提供接口,根据阀值,自动扩容,自动应对突然流量或压力,保障应用稳定性。

4.3.1 后端模版

说明:

QPS 取自 CAT 数据,SRE这边将 CAT 数据使用工具写入到 VictoriaMetrics 中

前端设计、消息通知 和 基于资源的弹性使用的一套模版,都属于基于指标触发的 HPA,这里不再赘述

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
labels:
  scaledobject.keda.sh/name: <appid>
name: <appid>
namespace: <env>
spec:
maxReplicaCount: <max-replicas>
minReplicaCount: <origin-replicas>
scaleTargetRef:
  apiVersion: argoproj.io/v1alpha1
  kind: Rollout
  name: <appid>-default
triggers:
- metadata:
    metricName: http_requests_total
    query: sum(cat_url_info{appid="<appid>",type="count",env="<env>",assettype="docker",zone="<zone>",host=~"<appid>-default.*"})/60
    serverAddress: http://<victoria-select>/select/1/prometheus
    threshold: "1000"
  type: prometheus

4.4 补充说明

4.4.1 计算公式

  计算公式 检查触发器间隔 指标最新数据间隔 备注
CPU 使用率 所有容器CPU使用率之和/ 容器数量 30s 30s 排除了刚启动的 Pod
MEM 使用率 所有容器MEM使用率之和 / 容器数量 30s 30s 排除了刚启动的 Pod
QPS 所有容器每秒的请求量 / 容器数量 30s 60s 最新数据为 上一分钟 QPS 的平均值

4.4.2 扩缩容默认触发时间

扩容时间

当检测结果大于设置的阈值时,立刻触发扩容,没有稳定窗口。

期望副本数 = ceil[当前副本数 * (当前指标 / 期望指标)]

⚠️ HPA 在计算目标副本数时会有一个10%的波动因子。如果在波动范围内,HPA 并不会调整副本数目。

缩容时间

稳定窗口的时间为 300 秒,满足缩容条件后,连续5分钟持续满足缩容条件,触发缩容

4.5 建立可观测性大盘

后续补充

4.6 注意事项(优雅上下线)

自动扩容大多数是在高并发大流量情况触发,此时如果没有对应的解决方案,就会产生短时间流量有损问题。

这里先说下问题,下篇文章会详细介绍具体场景及解决方案文章来源地址https://www.toymoban.com/news/detail-746688.html

到了这里,关于弹性伸缩落地实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一文理解云计算中的弹性伸缩

    作者:禅与计算机程序设计艺术 “云计算”已经成为热门话题。从最早的小型机到现在的大型集群服务器、分布式系统,云计算越来越受到青睐,对企业业务快速响应和创新发展,带动着新一代信息化服务的革命。但同时,云计算也面临着新的挑战。在面对海量数据时如何处

    2024年02月09日
    浏览(44)
  • 如何实现云计算中的弹性伸缩?

    云计算时代,我们所说的弹性伸缩,弹的到底是什么? 随着云计算技术的不断发展,弹性伸缩作为云计算的一个重要特性,已经成为了人们广泛关注的焦点。那么,什么是弹性伸缩呢?它又能够为我们的生活带来哪些好处呢? 首先,让我们来了解一下弹性伸缩的定义。在云计

    2024年02月06日
    浏览(42)
  • 弹性伸缩:云计算中的自动资源调度

    弹性伸缩是什么?它又在云计算中是如何工作的? 随着云计算技术的不断发展,弹性伸缩作为其核心特性之一,越来越受到人们的关注。那么,弹性伸缩到底是什么呢?它又是如何工作的呢? 首先,让我们来了解一下弹性伸缩的定义。在云计算中,弹性伸缩是指一种可根据

    2024年02月06日
    浏览(38)
  • (5) 可伸缩性和弹性:云计算的可伸缩性和弹性是指系统随着用户的需求增加或减少计算容量和存储容量的能力。

    作者:禅与计算机程序设计艺术 云计算(Cloud Computing)是一种通过网络连接到Internet提供计算、网络和存储服务的一种新型IT技术。云计算能够按需获取计算机算力、网络带宽及数据存储资源,使客户能够更快更便捷地享受互联网信息技术服务。云计算在提升用户能力方面具

    2024年02月08日
    浏览(49)
  • 如何有效地使用弹性伸缩,让云计算更高效

    随着云计算的迅速发展,弹性伸缩作为一项重要的云服务功能,逐渐被越来越多的企业和开发者所关注。那么,什么是弹性伸缩,为什么它会成为标配云服务呢?下面将从三个方面来探讨这个问题。 一、首先,什么是弹性伸缩? 弹性伸缩是云计算中的一项重要功能,是指根

    2024年02月07日
    浏览(35)
  • 阿里云云计算负载均衡SLB和弹性伸缩AS

    SLB实现原理:①访问流量路径  采用集群部署,当前提供四层(TCP UDP)和七层(HTTP HTTPS)的负载均衡服务。系统由三部分构成:四层负载均衡,七层负载均衡控制系统;四层:LVS+Keepalived  七层:tengine;②控制系统:用于监控和配置整个负载均衡系统 Master+Agent:Master 接受用

    2024年02月01日
    浏览(51)
  • 探究弹性伸缩技术在云计算中的应用及其挑战

    随着云计算技术的不断发展,人们对于云计算的认识和理解也在不断深入。作为云计算核心技术之一,弹性伸缩是云计算中一个重要的概念。它是指根据需求对云计算资源进行自动化的增加或减少,以实现资源的最佳利用和效率。弹性伸缩是云计算中实现高度可用性、可扩展

    2024年02月08日
    浏览(47)
  • Docker进阶:Docker Swarm —弹性伸缩调整服务的副本数量

    💖The Begin💖点点关注,收藏不迷路💖 🍀🍀🍀 续上一篇: Docker进阶:Docker Swarm —实现容器编排的利器 在 Swarm Manager节点中创建一个名为 my-nginx 的服务,并将容器的 80 端口映射到主机的 80 端口上,运行 Nginx 镜像。 查看服务列表,确保 my-nginx 服务已经成功创建并正常运行

    2024年04月08日
    浏览(68)
  • 基于容器技术和服务发现的全新大数据平台弹性伸缩方法

    随着科技的不断发展,各个行业都在不断地数字化和智能化。在这个过程中,大数据技术成为了许多行业的重要支撑。而随着大数据技术的普及,行业分类和设备装置的不断更新换代,弹性伸缩成为了一个不可避免的问题。本文将介绍基于服务发现和容器技术的大数据平台弹

    2024年02月06日
    浏览(44)
  • 【云原生•监控】基于Prometheus实现自定义指标弹性伸缩(HPA)

    「Autoscaling即弹性伸缩,是Kubernetes中的一种非常核心的功能,它可以根据给定的指标(例如 CPU 或内存)自动缩放Pod副本,从而可以更好地管理和利用计算资源,提高系统的可用性和性能,同时减少开销和成本。弹性伸缩可以解决服务负载存在较大波动或资源实际使用与预估

    2024年02月14日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包