Skip to content

使用 HPA 自动伸缩 Replicant 节点 ​

使用 Kubernetes HorizontalPodAutoscaler(HPA)自动伸缩 EMQX Replicant 节点。EMQX Operator 3.0 为 apps.emqx.io/v3beta1 EMQX 资源提供 Kubernetes scale 子资源。该子资源以 .spec.replicantTemplate.spec.replicas 为目标,因此 HPA 可以伸缩 Core-Replicant 集群中的 Replicant 节点。

准备工作 ​

确保 Kubernetes 资源指标 API 可用。本页中的 CPU 利用率示例需要使用 Metrics Server,或其他可以提供 metrics.k8s.io 数据的指标适配器。

运行以下命令,验证是否可以获取 Pod 指标:

bash
kubectl top pods

如果该命令未返回 CPU 和内存使用情况,请先安装并配置指标提供程序,再创建 HPA。

启用 Replicant 节点时,请至少配置两个 Core 副本。还必须配置 Pod 资源请求,HPA 才能分析利用率并做出伸缩决策。

部署 EMQX ​

  1. 将以下内容保存为 emqx.yaml:

    yaml
    apiVersion: apps.emqx.io/v3beta1
    kind: EMQX
    metadata:
      name: emqx
    spec:
      image: emqx/emqx:6.3.2
      config:
        roots:
          license:
            key: "..."
      coreTemplate:
        spec:
          replicas: 2
      replicantTemplate:
        spec:
          replicas: 4
          resources:
            requests:
              cpu: 500m
              memory: 1Gi
  2. 部署 EMQX 集群:

    bash
    kubectl apply -f emqx.yaml
  3. 等待 EMQX 集群就绪:

    bash
    kubectl wait --for=condition=Ready emqx/emqx

创建 HPA ​

  1. 将以下内容保存为 emqx-hpa.yaml。本示例根据 CPU 利用率,在 2 到 10 个副本之间伸缩 Replicant 节点:

    yaml
    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: emqx-replicants
    spec:
      scaleTargetRef:
        apiVersion: apps.emqx.io/v3beta1
        kind: EMQX
        name: emqx
      minReplicas: 2
      maxReplicas: 10
      metrics:
        - type: Resource
          resource:
            name: cpu
            target:
              type: Utilization
              averageUtilization: 70
      behavior:
        scaleDown:
          stabilizationWindowSeconds: 300
  2. 应用 HPA:

    bash
    kubectl apply -f emqx-hpa.yaml

验证自动伸缩 ​

  1. 检查 HPA 和 EMQX 状态:

    bash
    kubectl get hpa emqx-replicants
    kubectl get emqx emqx -o custom-columns='DESIRED:.spec.replicantTemplate.spec.replicas,CURRENT:.status.replicantReplicas'
  2. 在没有 MQTT 客户端负载的情况下,监控 HPA。如果观测到的 CPU 利用率足够低,使 HPA 计算出的目标副本数为 2,请验证 HPA 是否将 .spec.replicantTemplate.spec.replicas 更新为 2。配置的缩容稳定窗口可能会延迟此次更新。随后,EMQX Operator 会将 Replicant 节点数量协调为该副本数。

缩容 Replicant 节点可能触发 MQTT 连接和会话疏散,从而增加集群负载。请使用 HPA 稳定窗口和保守的伸缩策略,避免工作负载波动时频繁改变副本数。