我在 Kubernetes pods 上部署了一个 celery worker,它执行一个任务(CPU 不是很密集,但由于一些 HTTP 调用需要一些时间才能完成)。有没有办法根据任务队列中的任务数量自动缩放 K8s 中的 pod?
是的,通过使用 Kubernetes 指标注册表和Horizontal Pod Autoscaler。
首先,您需要从 Celery 收集“队列长度”指标,并通过 Kubernetes 指标 API 之一公开它。您可以使用基于 Prometheus 的管道执行此操作:
现在,您可以配置 Horizontal Pod Autoscaler 以从 Custom Metrics API 查询此指标并根据它自动扩展您的应用程序。
例如,要根据队列长度 5 的目标值在 1 到 10 个副本之间扩展应用程序:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 1
maxReplicas: 10
metrics:
- type: Object
object:
metric:
name: mycelery_queue_length
target:
type: value
value: 5
describedObject:
apiVersion: apps/v1
kind: Deployment
name: mycelery
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2474 次 |
| 最近记录: |