专栏首页有点技术KEDA - 基于Kubernetes事件驱动的自动缩放

KEDA - 基于Kubernetes事件驱动的自动缩放

事件驱动的计算并不是什么新生事务。数据库世界中的人们使用数据库触发器已有多年了。这个概念很简单: 每当您添加,更改或删除数据时,都会触发一个事件以执行各种功能。新的事件是这些类型的事件和触发器在其他领域的应用程序中激增,例如自动扩展,自动修复,容量规划等。事件驱动架构的核心是对系统上的各种事件做出反应并采取相应的行动。

自动缩放(以一种或其他方式实现自动化)已成为几乎所有云平台中不可或缺的组成部分,微服务又或者容器并不是一种例外。容器以灵活和解耦设计而闻名最适合自动缩放,因为它们比虚拟机更容易创建。

为什么要自动缩放???

对于基于容器的现代应用程序部署,可伸缩性是要考虑的最重要方面之一。随着容器编排平台的发展,设计可伸缩性设计解决方案从未如此简单。KEDA基于Kubernetes的事件驱动自动缩放或KEDA(使用Operator Framework构建)允许用户在Kubernetes上构建自己以事件驱动的应用程序。KEDA处理触发器以响应其他服务中发生的事件,并根据需要扩展工作负载。KEDA使容器可以直接从源使用事件,而不是通过HTTP进行路由。

KEDA可以在任何公共或私有云和本地环境中工作,包括Azure Kubernetes服务和Red Hat的OpenShift。借助此功能,开发人员现在还可以采用Microsoft的无服务器平台Azure Functions,并将其作为容器部署在Kubernetes群集中,包括在OpenShift上。

这可能看起来很简单,但假设每天繁忙处理大量事务,如下所示真的可以手动管理应用程序的数量(Kubernetes部署)吗?

KEDA将利用实时度量标准自动检测新部署并开始监视事件源,以推动扩展决策。

KEDA

KEDA作为Kubernetes上的组件提供了两个关键角色:

  • 扩展客户端:用于激活和停用部署以扩展到配置的副本,并在没有事件的情况下将副本缩减回零。
  • Kubernetes Metrics Server:一种度量服务器,它公开大量与事件相关的数据, 例如队列长度或流滞后,从而允许基于事件的扩展使用特定类型的事件数据。

Kubernetes Metrics Server与Kubernetes HPA(horizontal pod autoscaler)进行通信,以从Kubernetes部署副本中扩展规模。然后由部署决定是否直接从源中使用事件。这样可以保留丰富的事件集成,并使诸如完成或放弃队列消息之类的手势可以立即使用。

Scaler

KEDA使用 Scaler来检测是否应激活或取消激活(缩放)部署,然后将其馈送到特定事件源中。如今,支持多个 Scaler,通过特定受支持的触发器,例如(Kafka(trigger: Kafka topic)),RabbitMQ(trigger: RabbitMQ队列)),并且还会支持更多。

除了这些KEDA,还与Azure Functions工具集成在一起,以本机扩展Azure特定的缩放器, 例如Azure Storage Queues, Azure Service Bus Queues,Azure Service Bus Topics。

ScaledObject

ScaledObject部署为Kubernetes CRD(自定义资源定义),它具有将部署与事件源同步的功能。

一旦部署为CRD,ScaledObject即可进行以下配置:

如上所述,支持不同的触发器,下面显示了一些示例:

事件驱动的自动伸缩在实践中-本地Kubernetes集群

KEDA部署在Kubernetes中

带有KEDA的RabbitMQ队列缩放器

RabbitMQ是一种称为消息代理或队列管理器的消息队列软件. 简单地说: 这是一个可以定义队列的软件, 应用程序可以连接到队列并将消息传输到该队列上。

在下面的示例中,在Kubernetes上将RabbitMQ服务器/发布器部署为“状态集”:

RabbitMQ使用者被部署为接受RabbitMQ服务器生成的队列并模拟执行的部署。

使用RabbitMQ触发器创建ScaledObject

除了上面的部署外,还提供了ScaledObject配置,该配置将由上面创建的KEDA CRD转换,并在Kubernetes上安装KEDA。

创建ScaledObject后,KEDA控制器将自动同步配置并开始监视上面创建的Rabbitmq-consumer。KEDA无缝创建具有所需配置的HPA(水平Pod自动缩放器)对象, 并根据通过ScaledObject提供的触发规则(在此示例中,队列长度为 5)扩展副本。由于尚无队列,如下所示,rabbitmq-consumer部署副本被设置为零。

通过ScaledObject和HPA配置,KEDA将驱动容器根据从事件源接收的信息进行横向扩展。使用下面的 Kubernetes-Job配置发布一些队列,这将产生10个队列:

KEDA会自动将当前设置为零副本的 rabbitmq-consumer缩放为 两个副本,以适应队列。

发布10个队列-RabbitMQ Consumer扩展为两个副本:

发布200个队列-RabbitMQ使用者扩展到四十(40)个副本:

发布1000个队列-RabbitMQ Consumer扩展到100个副本,因为最大副本数设置为100:

KEDA提供了一个类似于FaaS的事件感知扩展模型,在这种模型中,Kubernetes部署可以基于需求和基于智能,动态地从零扩展到零,而不会丢失数据和上下文。KEDA还为Azure Functions提供了一个新的托管选项,可以将其部署为Kubernetes群集中的容器,从而将Azure Functions编程模型和规模控制器带入云或本地的任何Kubernetes实现中。

KEDA还为Kubernetes带来了更多的事件来源。随着将来继续添加更多的触发器或为应用程序开发人员根据应用程序的性质设计触发器提供框架,使KEDA有潜力成为生产级Kubernetes部署中的必备组件,从而使应用程序自动缩放成为应用程序开发中的嵌入式组件。

原文链接:https://itnext.io/keda-kubernetes-based-event-driven-autoscaling-48491c79ec74

本文分享自微信公众号 - 有点技术(havetech),作者:rocdu

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • KEDA|Kubernetes中基于事件驱动的自动伸缩

    事件驱动计算并不是什么新的想法,在数据库领域中就已经使用数据库触发器有很多年了。这个概念很简单:就是每当你添加、更改或删除数据时,就会触发一个事件来执行各种操作...

    CNCF
  • KEDA-Kubernetes 中基于事件驱动的自动伸缩

    事件驱动计算并不是什么新的想法,在数据库领域中就已经使用数据库触发器有很多年了。这个概念很简单:就是每当你添加、更改或删除数据时,就会触发一个事件来执行各种操作...

    我是阳明
  • K8s自动扩缩容工具KEDA发布2.0版本,全面升级应用扩展能力

    一年前,红帽和微软共同发布了Kubernetes自动扩缩容工具KEDA 1.0,而现在官方强化KEDA的扩缩容器,发布第2个主要更新KEDA 2.0,能支持更多...

    DevOps持续交付
  • KEDA从CNCF沙箱升级成为孵化项目

    CNCF技术监督委员会[1](TOC)投票通过了将 KEDA 作为 CNCF 孵化项目的决定。

    CNCF
  • 基于事件驱动的自动伸缩工具 KEDA 简单使用

    KEDA 是 Kubernetes 基于事件驱动的自动伸缩工具,通过 KEDA 我们可以根据需要处理的事件数量来驱动 Kubernetes 中任何容器的扩展。K...

    我是阳明
  • KEDA发布2.0(Beta)|来一个伸缩测试

    要获得完整的更改列表,我们强烈建议浏览我们的更改日志!在我们的稳定版本中,我们将在一篇新的博客文章中提供关于所发布内容的完整概述。

    CNCF
  • 基于事件驱动的自动化运维平台

    随着公司规模的增长,业务越来越复杂,运维的场景越来越多,对运维自动化的要求也越来越高。事物的发展不是孤立的,运维也不例外,运维的发展过程大致可以分为:手动运维-...

    有赞coder
  • 微软Build 2019有“料”!实现隔空办公、云与AI全面贯彻,惊艳不止三两处

    人工智能未来关注的核心在于数据和机器学习,并不是靠规则、意向或者代码构建的强大会话接口。

    镁客网
  • 微软Build 2019|发布多项产品、服务,涵盖VR/AR、AI、云等领域

    微软Build 2019开发者大会已于太平洋时间5月6日准时举行(至5月8日结束)。在今年Build开发者大会首日,微软针对VR/AR、AI、云服务等领域发布了...

    VRPinea
  • 基于事件驱动的并发编程

    高广超
  • 中国 KubeCon + CloudNativeCon 演讲提案征集

    ? ? PART ONE 概 述 提案征集 (CFP) 现已开放。 提交提案[1] 如果您没有使用过 CFP 系统,您需要在提交前注册并创建一个账户。 请在首...

    腾源会
  • 基于事件驱动的微服务模式

    本文我们将讨论一些经常用在微服务应用中可扩展的设计模式: 事件流 事件溯源 通晓多语言的持久性 内存镜像 命令查询职责分离 起因 Uber, Gilt和其它的公...

    用户1263954
  • KEDA将容器镜像迁移到GitHub容器注册表

    我们提供多种方式在你的集群中部署 KEDA[1],包括使用Helm chart[2]、Operator Hub[3]和原始 YAML 规范。

    CNCF
  • 基于消息的事件驱动机制(Message Based, Event Driven)

    基于消息的事件驱动机制是一个通用模型,广泛应用于桌面软件开发、网络应用程序开发、前端开发等技术方向中。本文主要描述基本模型、基本框架,用于说明不同技术的共性知识...

    河边一枝柳
  • 【云原生架构】节俭K8s Operator 第2部分:将控制器缩放到零

    在本系列博客的第1部分中,我们介绍了这样一种想法,即Kubernetes运营商(在大规模部署时)可以消耗大量资源,无论是实际资源消耗还是可调度容量的消耗。我们还...

    首席架构师智库
  • [k8s新知] 红帽抢攻边缘运算的两大关键技术

    红帽正式敲响了下一阶段混合云布局,将借助Knative无伺服器与Istio微服务开源新技术,来扩大混合云战场,抢进边缘运算

    阿泽
  • 基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

    Spring Cloud为开发者提供了快速构建分布式系统中的一些常见工具,如分布式配置中心,服务发现与注册中心,智能路由,服务熔断及降级,消息总线,分布式追踪的...

    李红
  • 基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例

    Spring Cloud为开发者提供了快速构建分布式系统中的一些常见工具,如分布式配置中心,服务发现与注册中心,智能路由,服务熔断及降级,消息总线,分布式追踪的...

    李红
  • kubernetes 降本增效标准指南|理解弹性,应用弹性

    王孝威,腾讯云容器产品经理,热衷于为客户提供高效的 Kubernetes 使用方式,为客户极致降本增效服务。 弹性伸缩在云计算领域的简述 弹性伸缩又称自动伸...

    腾讯云原生

扫码关注云+社区

领取腾讯云代金券