KEDA
Last updated
Was this helpful?
Last updated
Was this helpful?
本文主要基于 v1.5.0 版本
开始学习之前,先看看本 repo 最近在干什么(截至 2021.06),release note:
2.3.0 [2021.05]
Add Azure Pipelines Scaler
Add OpenStack Metrics Scaler
Added basic, tls and bearer authentication support to the Prometheus scaler
2.2.0 [2021.03]
Emit Kubernetes Events on KEDA events
Support Quantities in Metrics API scaler
Add Microsoft SQL Server (MSSQL) scaler
2.1.0 [2021.01]
Introduction of ClusterTriggerAuthentication for cluster-wide trigger authentication
Introducing new InfluxDB, MongoDB & OpenStack Swift scaler
Support for Redis clusters
2.0.0 [2020.11]
Introduce Azure Log Analytics scaler
Introduce scaling any CustomResource that implements Scale subresource
Provide KEDA go-client
Provide KEDA readiness and liveness probes
1.5.0 [2020.07]
Introduce Active MQ Artemis scaler
Introduce Redis Streams scaler
Introduce Cron scaler
KEDA 功能较为简单,目前的更新主要是丰富 scaler 和代码优化、修复
结合实战来学习本 repo
确认部署组件都已正常工作
安装完 KEDA 之后,来梳理下安装的组件
pod
容器
命令
源码 repo
keda-metrics-apiserver
keda-metrics-apiserver
keda-adapter --secure-port=6443 ...
KEDA
keda-operator
keda-operator
keda --zap-level=info ...
KEDA
上图中 KEDA 有3个逻辑组件:Metrics adapter(metrics-apiserver)、Controller(operator)和 Scaler。Scaler 代表 KEAD 能用于扩缩的事件源,分为内置和外置两部分
内置事件源包括但不限于:
...
KEDA 引入了 scaledobject、scaledjob 和 triggerauthentication 三类 CRD
scaledobject 记录了事件源和 Deployment、StatefulSet 或者任何实现了 /scale Custom Resource 的映射
scaledjob 记录了事件源和 Job 的映射
triggerauthentication 记录了访问事件源所需的鉴权数据
这里以 rabbitmq 作为 scaler,来演示 KEDA 的工作流程
如果测试的集群,没有动态 pv 供应的能力,这里可以先手工创建一个:
使用 helm 安装 rabbitmq
获取扩缩容对象 yaml
扩缩容对象是一个通俗化的称呼,它包括:
deployment:最终扩缩容的对象
scaledobject:指明了扩缩容对象及其依赖的指标信息,以及一些可选的常规配置,如 cooldownPeriod(多久没有事件开始缩容)
[optional] triggerauthentication:这里是访问 rabbitmq 所需的用户名、密码
创建扩缩容对象
上述命令涉及的完整流程是:
用户创建了 scaledobject
operator 创建对应的 hpa
此时没有事件,operator 将 deployment 缩容到0
事件发布之后,后台发生的事情:
operator 在收到事件后,会完成 deployment 从0->1的操作
operator 持续查询 metrics-apiserver
operator 更新 hpa
hpa 最终完成 deploy 的扩缩
以上演示的是 scaledobject,scaledjob 相比于前者,主要就是用来处理长时运行的函数。原文:
As an alternate to scaling event-driven code as deployments you can also run and scale your code as Kubernetes Jobs. The primary reason to consider this option is to handle processing long running executions. Rather than processing multiple events within a deployment, for each detected event a single Kubernetes Job is scheduled. That job will initialize, pull a single event from the message source, and process to completion and terminate.
除此之外,并无太大差别
operator 补足了 HPA 的能力,提供了缩容到0和从0扩容的能力;而 metrics-apiserver 则是作为 ,配合 HPA 工作
外部事件源需要按照一定的接口规范实现: