Skip to content

HPAによるレプリカントノードのオートスケール ​

KubernetesのHorizontalPodAutoscaler(HPA)を使用して、EMQXレプリカントノードを自動的にスケールします。EMQX Operator 3.0は、apps.emqx.io/v3beta1 EMQXリソースのKubernetes scale サブリソースを公開しています。このサブリソースは .spec.replicantTemplate.spec.replicas を対象としているため、HPAはCore-Replicantクラスター内のレプリカントノードをスケールします。

はじめに ​

KubernetesのリソースメトリクスAPIが利用可能であることを確認してください。このページのCPU使用率の例では、Metrics Server または metrics.k8s.io データを提供する他のメトリクスアダプターが必要です。

Podメトリクスが利用可能かどうか、以下のコマンドを実行して確認してください。

bash
kubectl top pods

CPUおよびメモリ使用量が返されない場合は、HPAを作成する前にメトリクスプロバイダーをインストールして設定してください。

レプリカントノードを有効にする場合は、Coreのレプリカを最低2つに設定してください。HPAが利用率を解析してスケールの判断を行うためには、Podのリソースリクエストも設定する必要があります。

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レプリカの範囲でスケールします。

    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と計算した場合、.spec.replicantTemplate.spec.replicas が2に更新されていることを確認してください。設定されたスケールダウンの安定化ウィンドウにより、この更新が遅れることがあります。EMQX Operatorはその後、レプリカントセットをそのレプリカ数に調整します。

レプリカントノードのスケールダウンはMQTT接続やセッションの退避を伴い、クラスターに負荷をかけるため、HPAの安定化ウィンドウや保守的なスケーリングポリシーを利用して、負荷の変動による頻繁なレプリカ数の変動を避けてください。