簡體   English   中英

如何根據 celery 任務隊列中的任務數自動擴展 Kubernetes Pod?

[英]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 的管道來執行此操作:

  1. 由於 Celery 不公開 Prometheus 指標,因此您需要安裝一個導出器,將有關 Celery 的一些信息(包括隊列長度)作為 Prometheus 指標公開。 例如,這個 exporter
  2. 在集群中安裝Prometheus並將其配置為從 Celery 導出器收集與任務隊列長度對應的指標。
  3. 在您的集群中安裝Prometheus 適配器並將其配置為通過自定義指標 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM