KEDA(基于 Kubernetes 的事件驱动自动缩放器)是一个开源项目,它扩展了 Kubernetes 的自动缩放能力,超越了内置的水平 Pod 自动缩放器(HPA)。虽然 HPA 在基于 CPU 和内存的缩放方面表现出色,但 KEDA 更进一步,允许您基于自定义指标进行缩放,比如队列深度、API 流量,或者几乎任何您能想到的指标。
以下是 KEDA 改变游戏规则的原因:
- 事件驱动缩放:响应真实世界的事件,而不仅仅是资源使用
- 从零到英雄:在没有负载时从零个 Pod 开始缩放
- 指标灵活性:使用来自 Prometheus、Azure Monitor、AWS CloudWatch 等各种来源的指标
- 轻松集成:与现有的 Kubernetes 部署无缝协作
开始使用 KEDA
准备好试用 KEDA 吗?让我们一起看看设置过程:
1. 安装 KEDA
首先,让我们在您的集群中启动并运行 KEDA。您可以使用 Helm 进行快速简便的安装:
helm repo add kedacore https://kedacore.github.io/charts
helm repo update
helm install keda kedacore/keda --namespace keda --create-namespace
或者,如果您更喜欢使用 YAML:
kubectl apply -f https://github.com/kedacore/keda/releases/download/v2.8.1/keda-2.8.1.yaml
2. 定义一个 ScaledObject
现在是有趣的部分——定义您想要的缩放方式。KEDA 使用一个名为 ScaledObject 的自定义资源来确定缩放行为。以下是一个示例,它根据 RabbitMQ 队列中的消息数量来缩放部署:
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: rabbitmq-scaledobject
namespace: default
spec:
scaleTargetRef:
deploymentName: my-deployment
pollingInterval: 15
cooldownPeriod: 30
maxReplicaCount: 30
triggers:
- type: rabbitmq
metadata:
queueName: myqueue
host: amqp://guest:[email protected]:5672/
queueLength: "5"
这个 ScaledObject 告诉 KEDA 根据 "myqueue" RabbitMQ 队列的长度来缩放 "my-deployment" 部署。当队列中有超过 5 条消息时,KEDA 将开始扩展部署。
KEDA 实际应用:真实场景
让我们探索一些 KEDA 发挥作用的实际用例:
场景 1:API 流量缩放
想象一下,您有一个 API 会遇到零星的流量高峰。使用 KEDA,您可以根据传入请求的数量进行缩放:
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: api-scaler
spec:
scaleTargetRef:
deploymentName: api-deployment
triggers:
- type: prometheus
metadata:
serverAddress: http://prometheus.monitoring:9090
metricName: http_requests_total
threshold: "100"
query: sum(rate(http_requests_total{job="api-gateway"}[2m]))
当传入请求的速率在 2 分钟内超过每秒 100 次时,此设置将扩展您的 API 部署。
场景 2:批处理作业处理
对于批处理作业,您可以根据待处理任务的数量来缩放工作节点:
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: batch-job-scaler
spec:
scaleTargetRef:
deploymentName: batch-worker
triggers:
- type: postgresql
metadata:
connectionFromEnv: POSTGRES_CONNECTION
query: "SELECT COUNT(*) FROM jobs WHERE status='pending'"
targetQueryValue: "10"
这个 ScaledObject 根据 PostgreSQL 数据库中待处理作业的数量来缩放 batch-worker 部署。
KEDA 精通技巧
在您开始 KEDA 之旅时,请记住以下提示:
- 从小开始:从非关键工作负载开始,以熟悉 KEDA 的行为。
- 密切监控:密切关注您的缩放模式,以微调触发器。
- 与 HPA 结合使用:KEDA 可以与 HPA 一起使用,以实现更灵活的缩放。
- 使用缩放作业进行成本优化:当没有工作时,KEDA 可以将部署缩放到零,从而节省成本。
- 探索自定义缩放器:如果内置缩放器不符合您的需求,您可以创建自定义缩放器。
潜在陷阱:小心行事!
虽然 KEDA 功能强大,但有一些需要注意的事项:
- 缩放过于激进:确保您的冷却期合适,以避免快速缩放上升和下降。
- 指标可靠性:确保您的缩放指标可靠,并能抵抗短期波动。
- 资源限制:不要忘记为您的 Pod 设置资源请求和限制,以防止集群资源耗尽。
“强大的缩放能力伴随着巨大的责任。” - 如果本叔叔是 DevOps 工程师
自动缩放的未来:KEDA 的下一步是什么?
KEDA 正在积极发展,未来将有新功能和改进。值得关注的一些令人兴奋的领域:
- 增强对更多云原生事件源的支持
- 改进与服务网格的集成
- 高级预测性缩放算法
请关注 KEDA GitHub 仓库 以获取最新更新和功能。
总结:KEDA 适合您吗?
KEDA 为 Kubernetes 自动缩放带来了新的灵活性和响应能力。如果您的应用程序处理可变工作负载、事件驱动架构或需要基于自定义指标进行缩放,KEDA 可能是您 Kubernetes 拼图中缺失的一块。
请记住,自动缩放既是一门艺术,也是一门科学。在受控环境中开始尝试 KEDA,密切监控其行为,并迭代您的缩放策略。很快,您将拥有一个像梦一样缩放的 Kubernetes 集群,优雅地响应工作负载的涨落。
那么,您准备好将 Kubernetes 自动缩放提升到一个新的水平了吗?试试 KEDA,看看您的集群如何变成一个精简、高效的缩放机器!
进一步阅读
祝您缩放愉快,Kubernetes 爱好者!