KEDA Kubernetes 弹性伸缩领域又一强者

2,862 阅读4分钟

Why KEDA is a game-changer for scaling in Kubernetes

KEDA 使得用户可以基于几乎任何度量提供者所能想到的任何度量来轻松地进行扩展成为可能,并且在世界上一些最大的公司的云生产中大规模地运行。

KEDA地址:

介绍

在这篇文章中,我将将介绍 Kubernetes事件驱动自动伸缩 (KEDA) 并使 Kubernetes 管理员能够完成的任务以及如何开始。

前置必要条件

  • 1.5+ 版本的 Kubernetes 集群
  • Kubernetes 集群的管理员权限
  • Helm tools

什么是 KEDA?

Kubernetes 事件驱动自动缩放 (KEDA: Kubernetes Event-driven Autoscaling) 是对 Kubernetes 内置的水平 Pod 自动缩放器(HPA)的补充。

KEDA 并没有取代 HPA,它仍然使用 HPA 来发挥它的魔力,这一点在官方文档中可以找到。

KEDA 有非常好的文档,所以很容易设置,同时 KEDA 是一个由微软支持的开源原生云项目,它在 Azure AKS (Azure的Kubernetes产品) 中得到了完全支持。

微软(Microsoft)、Zapier 和阿里巴巴云(Alibaba cloud)等大公司都在使用它,因此它正在大规模地运行于生产环境中。

为什么 KEDA 是 Kubernetes 世界中的变革者

KEDA 使得 Kubernetes 能够对 Pods 副本缩0或者扩展到更多是基于标准内置的 Kubernetes 指标,例如CPU和内存等标准,但也基于高级指标,例如消息队列的排队深度,每秒请求数,调度的 Cron 作业数,或者从您自己的应用程序记录中以及您可以想象的其他所有指标中的自定义指标。

这里你可以查到当前 KEDA 支持的外置指标扩展器: keda.sh/docs/2.6/sc…

可以看到当前 KEDA 可以支持多种云厂商以及知名的开源软件的扩展器:

等等。。

KEDA 是如何工作的

KEDA 会从外部度量提供者系统 (上面提到的指标扩展器,比如 Azure Monitor) 监控度量,然后根据基于度量值的伸缩规则进行伸缩。

它直接与度量提供者系统通信,作为一个Kubernetes Operator 运行(一个普通pod 并且进行持续的监控)。

KEDA architecture (source: https://keda.sh/)

如何设置 KEDA

安装 KEDA 最简单的方法就是使用 Helm。因此,再次之前你需要对 Helm 工具有一定的了解(如何感兴趣,可以在 keda.sh/docs/2.6/de… 中查看具体的部署详情)。

helm repo add kedacore https://kedacore.github.io/charts
helm repo update
kubectl create namespace keda
helm install keda kedacore/keda --namespace keda

# 在使用上述 helm 指令安装完后,即可以看到如下输出信息(helm release 和 pod 信息)
sh-4.2# helm list -n keda
NAME	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART     	APP VERSION
keda	keda     	1       	2022-09-17 17:30:05.323724181 +0800 CST	deployed	keda-2.8.2	2.8.1
sh-4.2# kubectl  get pods -n keda
NAME                                               READY   STATUS    RESTARTS   AGE
keda-operator-7cfbd4d854-7mg6j                     1/1     Running   0          73s
keda-operator-metrics-apiserver-6cf4bd67bc-56clz   1/1     Running   0          59s

配置伸缩规则

当确认我们集群中的 KEDA 相关组件正常运行后,我们需要编写一个清单文件来声明要基于什么进行扩展、何时进行扩展以及如何进行扩展。

接下来我将提供一个关于如何基于 CPU 和 内存 等公共指标设置伸缩性的指导。

伸缩被定义为一个清单YAML文件,就像部署一样,它的类型是 ScaledObject。

可以使用如下命令查看当前设置的 伸缩对象:

kubectl get scaledobject

scaledobject

使用如下命令可以删除对应对象

kubectl delete scaledobject <name of scaled object>

Memory scaling

如下是一个可以根据容器内部的内存使用情况设置规则来的规则。

内存相关的扩展器

可以基于这些类型的值进行伸缩

  • Utilization: 目标值是所有相关单元的资源度量的平均值,表示为单元的资源请求值的百分比。
  • AverageValue: 目标值是跨所有相关豆荚(数量)的度量平均值的目标值。

一个使用 Utilization 的示例:

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: memory-scaledobject
  namespace: default
spec:
  scaleTargetRef:
    name: sandboxapi
  triggers:
  - type: memory
    metadata:
      type: Utilization
      value: "50"

这个示例创建了一个规则,该规则根据内存利用率来扩展 pod ,scaleTargetRef 指的是应该伸缩的 Deployment。

CPU scaling

Scaling 也可以用于容器内的 CPU 使用情况。

注意: 对于 CPU 而言,同样支持 UtilizationAverageValue 两种值进行规则设置。

示例文件:

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: memory-scaledobject
  namespace: default
spec:
  scaleTargetRef:
    name: sandboxapi
  triggers:
  - type: cpu
    metadata:
      type: Utilization
      value: "50"

此示例创建了一个基于当前 CPU 利用率伸缩 Pod 的规则,scaleTargetRef 指的是应该伸缩的 Deployment。

结论

在本文中,我介绍了 KEDA 以及它如何帮助您尽可能轻松地在 Kubernetes 中构建可扩展的应用程序,以及如何开始。

Scales list 存在许多缩放器,您可以根据目标环境以及需求来调整你的伸缩规则。

原文: medium.com/@casperruba…
翻译:CloudNativeOps