GKE 中基于 RabbitMQ 队列大小的自动缩放

Posted

技术标签:

【中文标题】GKE 中基于 RabbitMQ 队列大小的自动缩放【英文标题】:Autoscaling in GKE based on RabbitMQ Queue Size 【发布时间】:2021-04-17 16:07:56 【问题描述】:

我对 Kubernetes 和 RabbitMQ 都很陌生,但我正在尝试根据我的 RabbitMQ 队列中就绪消息的数量自动缩放 Pod。

我一直在关注 GCP 文档 here,我的 prometheus rabbitmq 容器基于找到的 here

根据这些指南,我创建了一个部署

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: rabbitmq-prometheus-sd
  name: rabbitmq-prometheus-sd
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      run: rabbitmq-prometheus-sd
  template:
    metadata:
      labels:
        run: rabbitmq-prometheus-sd
    spec:
      containers:
      # rabbitmq-exporter container
      - name: prometheus
        image: kbudde/rabbitmq-exporter:v0.29.0
        env:
          - name: RABBIT_URL
            value: http://MYRABBITMQHOST.rmq.cloudamqp.com:15672
          - name: RABBIT_USER
            value: MYRABBITMQUSERNAME
          - name: RABBIT_PASSWORD
            value: MYRABBITMQPASSWORD
          - name: PUBLISH_PORT
            value: "9419"
          # amqp 3.6.9++
          - name: RABBIT_CAPABILITIES
            value: "bert,no_sort"
      # pre-built 'prometheus-to-sd' sidecar container to export prometheus
      # metrics to Stackdriver
      - name: prometheus-to-sd
        image: gcr.io/google-containers/prometheus-to-sd:v0.5.0
        command: ["/monitor"]
        args:
        - --source=:http://localhost:9419
        - --stackdriver-prefix=custom.googleapis.com
        - --pod-id=$(POD_ID)
        - --namespace-id=$(POD_NAMESPACE)
        env:
        # save Kubernetes metadata as environment variables for use in metrics
        - name: POD_ID
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.uid
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace

我可以将它部署到我在 GKE 中的集群,但是当我在指标资源管理器中检查自定义指标时,我只能找到这 3 个,而没有其他:

rabbitmq_exporter_build_info rabbitmq_module_up rabbitmq_up

显然,如果没有队列指标,我无法创建 HPA 来扩展我的应用程序。任何有关这些指标为何未提供或建议的替代路线的帮助或指导,我们将不胜感激。

【问题讨论】:

【参考方案1】:

您可以使用keda,特别是RabbitMQ trigger,根据 RabbitMQ 队列的大小自动扩展 Kubernetes 部署。

【讨论】:

【参考方案2】:

问题是 rabbitmq 导出器无法与 cloudampq 上托管的 rabbitmq 一起使用。改为使用此 method 缩放

【讨论】:

以上是关于GKE 中基于 RabbitMQ 队列大小的自动缩放的主要内容,如果未能解决你的问题,请参考以下文章

zabbix监控rabbitmq队列和进程--基于自动发现

基于消息队列(RabbitMQ)实现延迟任务

如何在 GKE 自动驾驶仪中基于自定义指标实现水平自动缩放

基于消息队列(RabbitMQ)实现延迟任务

怎么设置rabbitmq的队列的大小或长度

是否有任何工具可以根据 kubernetes 中请求的总 pod 自动扩展 GKE 节点?