Skip to content

Azure Kubernetes Service に EMQX をデプロイする

EMQX Operator は Azure Kubernetes Service(AKS)上への EMQX デプロイをサポートしています。AKS は、Azure 上でマネージド Kubernetes クラスターを簡単にデプロイできるようにし、運用の負荷を Azure に委ねます。ホスト型 Kubernetes サービスとして、Azure はヘルスモニタリングやメンテナンスなどの重要なタスクを管理します。AKS クラスターが作成されると、Azure は追加費用なしで Kubernetes コントロールプレーンを自動的にプロビジョニングおよび管理します。

はじめる前に

AKS 上に EMQX をデプロイする前に、以下の前提条件を満たしていることを確認してください。

EMQX クラスターを素早くデプロイする

以下の例は、EMQX カスタムリソース(CR)の基本的な設定例です。

  1. YAML ファイルとして保存し、kubectl apply でデプロイします。

    yaml
    apiVersion: apps.emqx.io/v2
    kind: EMQX
    metadata:
      name: emqx
    spec:
      image: emqx/emqx:6.2.0
      config:
        data: |
          license {
            key = "..."
          }
      coreTemplate:
        spec:
          volumeClaimTemplates:
            ## ストレージクラスの詳細:https://learn.microsoft.com/en-us/azure/aks/concepts-storage#storage-classes
            storageClassName: default
            resources:
              requests:
                storage: 10Gi
            accessModes:
            - ReadWriteOnce
      dashboardServiceTemplate:
        spec:
          ## ロードバランサーの詳細:https://learn.microsoft.com/en-us/azure/aks/load-balancer-standard
          type: LoadBalancer
      listenersServiceTemplate:
        spec:
          ## ロードバランサーの詳細:https://learn.microsoft.com/en-us/azure/aks/load-balancer-standard
          type: LoadBalancer
  2. EMQX クラスターが Ready 状態になるまで待ちます。

    kubectl get コマンドでクラスターの状態を確認し、STATUSReady になっていることを確認してください。起動には時間がかかる場合があります。

    shell
    $ kubectl get emqx
    NAME   STATUS    AGE
    emqx   Ready     1m5s
  3. EMQX ダッシュボードの外部 IP を取得し、アクセスします。

    EMQX Operator は dashboardServiceTemplate の設定に基づき、自動的に Service を作成します。

    shell
    $ kubectl get svc emqx-dashboard -o json | jq -r '.status.loadBalancer.ingress[0].ip'
    20.245.230.91
  4. ダッシュボードに http://20.245.230.91:18083 でアクセスします。

    デフォルトの認証情報でログインしてください:

    • ユーザー名: admin
    • パスワード: public

MQTTX を使ってサブスクライブとパブリッシュを行う

この手順では、開発者が MQTT サービスやアプリケーションを素早くテストできるオープンソースの MQTT 5.0 コマンドラインクライアントツールである MQTTX CLI を使用します。

  1. EMQX TCP リスナーの外部 IP を取得します。

    EMQX Operator は、設定された各リスナーに対して自動的に Service リソースを作成します。

    shell
    external_ip=$(kubectl get svc emqx-listeners -o json | jq -r '.status.loadBalancer.ingress[0].ip')
  2. トピックにサブスクライブします。

    shell
    $ mqttx sub -t 'hello' -h ${external_ip} -p 1883
    [10:00:25] › …  接続中...
    [10:00:25] › ✔  接続完了
    [10:00:25] › …  hello にサブスクライブ中...
    [10:00:25] › ✔  hello にサブスクライブしました
  3. 別のターミナルで EMQX クラスターに接続し、メッセージをパブリッシュします。

    shell
    $ mqttx pub -t 'hello' -h ${external_ip} -p 1883 -m 'hello world'
    [10:00:58] › …  接続中...
    [10:00:58] › ✔  接続完了
    [10:00:58] › …  メッセージをパブリッシュ中...
    [10:00:58] › ✔  メッセージをパブリッシュしました
  4. サブスクライバーがメッセージを受信する様子を確認します。

    shell
    [10:00:58] › payload: hello world

LoadBalancer による TLS オフロードについての注意点

L3/L4 ロードバランサーである Azure LoadBalancer は TLS 終端をサポートしていません。可能な回避策については、こちらのディスカッションをご参照ください。