事件驱动的自动定量Kubernetes

在现代云架构应用程序分解成独立的构建块通常microservices。这些microservices允许团队更快更敏捷和部署。Microservices形式的分布式系统中,他们之间的沟通是至关重要的为了创建统一的系统。这样沟通的良好实践是实现事件驱动的体系结构。

事件驱动架构是什么?

事件驱动的体系结构是一种软件设计模式的组件构建对事件做出反应。一个组件会产生一个事件,第二个反应,而不是request-driven体系结构,其中一个组件发起一个请求收到另一个组件。在事件驱动的体系结构中,第一个组件会产生消费者反应的事件。这种方法限制了组件之间的耦合;一个不知道另一个。事件驱动架构也会让许多用户事件的分布。

事件驱动架构通常以两种方式实现:

点到点消息传递

涉及到两个主要组件,生产者和消费者。生产者负责发布消息队列,而消费者对他们需要这些信息和行为。每个消息处理只有一次只有一个消费者执行特定的任务。

科达

发布/订阅

发布/订阅模型允许将消息广播系统的不同部分。出版商将事件虽然主题的所有订阅者对事件通知。这种方法时使用多个组件需要提醒,当一个事件发生。

科达

来源:https://aws.amazon.com/pub-sub-messaging/

作为事件驱动架构和Kubernetes环境变得更加普遍和更复杂,,关键是要有一个解决方案,让您的基础设施规模基于消息队列或事件源的长度。Kubernetes水平吊舱自动定量(HPA)尺度资源提供基于雷竞技rabet官网度量(通常是CPU或内存利用率),然而它本身不支持事件源。因此,有一个延迟填充新豆荚而扩大事件源和事件。这可以解决使用自定义指标与下丘脑或我们可以使用Kubernetes-based事件驱动Auto-Scaler(科达)。

介绍科达

科达是一个专用的、轻量级的、开源组件,用来激活Kubernetes部署基于各种来源的事件(s)。科达的作品与标准Kubernetes组件下丘脑和可以扩展它的功能通过允许它规模根据事件源的事件数量

它是如何工作的呢?

科达

来源:https://keda.sh/docs/2.2/concepts/

科达从Kubernetes支持1.16及以上版本。

科达集成了多个标量(事件源),并使用自定义资源(crd)定义所需的/扩展所需的行为雷竞技rabet官网和参数。这些自定义资源让你地图事件雷竞技rabet官网源(身份验证)的部署,StatefulSet,自定义资源,或工作扩展用途。

安装科达,还创建了以下crd写在科达文档:

  • ScaledObjects(scaledobjects.keda.sh)定义一个事件源之间的关系到一个特定的工作负载的资源(例如部署、StatefulSet自定义资源扩展)
  • ScaledJobs (scaledjobs.keda.sh)代表一个事件源之间的映射和Kubernetes工作。
  • ScaledObjects / ScaledJobs也可以参考TriggerAuthentication(triggerauthentications.keda.sh)或ClusterTriggerAuthentication(clustertriggerauthentications.keda.sh)包含身份验证配置或秘密监视事件源。

科达监控中定义的事件源ScaledObjects / ScaledJobs和将所需的HPA豆荚在给定时刻基于事件的来源。这些豆荚积极把物品从事件源,而科达连续监控,并将相应适应的豆荚。一旦事件源是空的,科达将缩减规模资源为0。雷竞技rabet官网

科达也暴露指标普罗米修斯所以你可以很容易地刮科达指标相应地普罗米修斯和监控。

在使用科达,您的应用程序应该实现的通信事件源(e。g消费/订阅等)。

让我们看看它的实际效果

对于这个例子,我将使用官方科达的一个例子https://github.com/kedacore/sample-go-rabbitmq

我有一个集群部署到Azure使用部(这也可以使用任何其他Kubernetes味道,托管或非托管)。

我要用舵(舵安装指南)部署科达。

首先我将安装科达执掌图:

执掌回购添加kedacore https://kedacore.github。io /图表回购更新kubectl创建名称空间科达舵舵安装科达kedacore /科达科达- 2.0.0版本名称空间

我现在应该有科达可用集群。运行以下命令将协助验证:

kubectl部署,crd - n科达

输出将类似于:

接下来,让我们安装兔子MQ

kubectl得到豆荚

现在,我们科达部署和队列准备好了,我们可以设置ScaledObject

首先,让我们与我们的例子:克隆存储库

git克隆https://github.com/kedacore/sample-go-rabbitmq cd sample-go-rabbitmq

部署消费者

这个消费者设置为每个实例使用一个消息,睡了1秒,然后承认完成消息。

ScaledObject包含在部署设置规模最小的0副本没有事件,和最多30副本重事件(优化队列长度为5的消息/副本)。没有事件的30秒后,副本将被缩减(冷却时间)。这些设置可以改变在ScaledObject。

kubectl应用- f / deploy-consumer.yaml部署

将创建下列Kubernetes资源:雷竞技rabet官网

kubectl得到部署

您应该看到你的部署有0副本。

发布消息的队列

下面的工作将发布300条消息“hello”队列部署正在听。随着队列的增大,科达将帮助HPA添加越来越多的豆荚,直到队列是耗尽大约2分钟后,30并发豆荚。您可以修改deploy-publisher-job发布消息的确切数字。yaml文件。

kubectl应用- f / deploy-publisher-job部署。yaml kubectl部署- w

你会看到部署尺度和we看到我们的部署规模/基于事件的数量在我们的队列。为了验证这些豆荚有足够的计算资源上运行,您应该实现一个自动定量机制。雷竞技rabet官网

长时间运行的执行人/降低处理

另一个考虑是如何处理长时间运行的执行。想象科达触发一个扩大的圆荚体,需要几个小时执行。在某些时候,HPA需要做一个决定按比例缩小这些豆荚。没有任何特定的配置,这个决定是随机的,你按比例缩小风险豆荚,尚未完成其工作。

有两种主要的方法来处理:

利用容器生命周期

Kubernetes提供几个生命周期的钩子可以利用延迟终止吊舱。

运行工作

当你使用ScaledJob CRD、一个Kubernetes工作将为每个事件被部署。通过这种方法,一个事件从事件源,加工完成和终止。

科达功能使用现货海洋扩张

在云中运行Kubernetes集群时,你会想要尽可能高效分配资源(节点),自动定量的基础设施是必需的,和你想要做的在低成本的同时保持高可用性。雷竞技rabet官网Cluster-autoscaler是实现这一目标的一种方式,但它往往伴随着更多的管理和建筑工作。

另外,科达搭配现货的海洋现货NetApp serverless容器的引擎,将自动化和优化这些过程。科达专注于向集群中添加和删除豆荚基于事件源的长度,而海洋处理基础设施供应通过不断优化资源与Kubernetes集群相关联。雷竞技rabet官网

海洋是一个容器驱动的自动定量,本机使用云产能过剩(AWS现货实例、GCP抢占式vm和Azure现货vm)进行高效、可靠的运行工作负载。AI-driven监控现货市场预测算法和识别中断的风险,主动更换高危实例或下降回按需如果没有可用产能过剩。它还会增加集群中使用多样化的机器类型这降低了产能损失的风险,增加了产能过剩上运行的可靠性,帮助降低相关成本大幅Kubernetes数据平面。AWS用户利用保留的实例或储蓄计划,海洋可以优先考虑空之前保留现货或点播。

其他核心功能在海洋使更快,更高效的扩展。海洋的内置空间机制允许新的豆荚的快速规模而不需要等待启动一个新实例。空间可以手动配置,也可以配置为自动。这将设置空间容量的百分比的总集群资源,并将增加或减少随着集群的变化。雷竞技rabet官网

现货海洋兼容科达的很多方面只是一个海洋延伸Kubernetes的力量给你的云基础设施更好的效率,负担能力和性能。更多地了解海洋,访问我们产品页面

下载我们的免费指导”,自动定量和6其他Kubernetes自动化挑战”