[英]How to auto-scale Kubernetes Pods based on number of tasks in celery task queue?
我有一個 celery 工作人員部署在 Kubernetes pod 上,它執行一項任務(不是非常占用 CPU,但由於一些 HTTP 調用需要一些時間才能完成)。 有沒有辦法根據任務隊列中的任務數自動縮放 K8s 中的 Pod?
是的,通過使用 Kubernetes 指標注冊表和 Horizontal Pod Autoscaler 。
首先,您需要從 Celery 收集“隊列長度”指標,並通過 Kubernetes 指標 API 之一公開它。 您可以使用基於 Prometheus 的管道來執行此操作:
現在,您可以配置 Horizontal Pod Autoscaler 以從自定義指標 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
解決這個問題有兩個部分:您需要從 celery 收集指標,並將它們提供給 Kubernetes API(作為自定義指標 API)。 然后 HorizontalPodAutoscaler 可以查詢這些指標,以便根據自定義指標進行縮放。
您可以使用 Prometheus(例如)從 Celery 收集指標。 然后,您可以使用Prometheus Adapter將指標公開給 Kubernetes。 現在 prometheus 中可用的指標可用於 Kubernetes。
您現在可以為您的應用程序定義一個HorizontalPodAutoscaler
:
kind: HorizontalPodAutoscaler
apiVersion: autoscaling/v2alpha1
metadata:
name: sample-metrics-app-hpa
spec:
scaleTargetRef:
kind: Deployment
name: sample-metrics-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Object
object:
target:
kind: Service
name: sample-metrics-app
metricName: celery_queue_length
targetValue: 100
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.