Azure Kubernetes Service上でのEMQXのデプロイ
EMQX Operatorは、Azure Kubernetes Service(AKS)上でのEMQXのデプロイをサポートしています。AKSは、Azure上でマネージドKubernetesクラスターを簡単にデプロイできるようにし、運用の負荷をAzure側に委ねます。ホステッドKubernetesサービスとして、Azureはヘルスモニタリングやメンテナンスなどの重要なタスクを担当します。AKSクラスターが作成されると、Azureは追加費用なしでKubernetesコントロールプレーンのプロビジョニングと管理を自動的に行います。
はじめる前に
AKS上でEMQXをデプロイする前に、以下の前提条件を満たしていることを確認してください。
Azureサブスクリプション内にAKSクラスターがあること
- AKSクラスターの作成および設定については、Azure Kubernetes Serviceドキュメントを参照してください。
AKSクラスターに接続するための動作する
kubectl設定- ローカルにインストールされた
kubectlを使用して接続する場合は、AKSクラスターへの接続の手順に従ってください。 - Azure Cloud Shellを使用して接続する場合は、Azure CloudShellでのAKSクラスター管理を参照してください。
- ローカルにインストールされた
クラスターにEMQX Operatorがインストールされていること
- インストール手順については、EMQX Operatorのインストールを参照してください。
EMQXクラスターの迅速なデプロイ
以下の例は、EMQXカスタムリソース(CR)の基本的な設定例です。
YAMLファイルとして保存し、
kubectl applyでデプロイします。yamlapiVersion: 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: LoadBalancerEMQXクラスターがReady状態になるまで待ちます。
kubectl getコマンドでクラスターの状態を確認し、STATUSがReadyになっていることを確認してください。起動には時間がかかる場合があります。shell$ kubectl get emqx NAME STATUS AGE emqx Ready 1m5sEMQXダッシュボードの外部IPを取得し、アクセスします。
EMQX Operatorは
dashboardServiceTemplateの設定に基づいて自動的にServiceを作成します。shell$ kubectl get svc emqx-dashboard -o json | jq -r '.status.loadBalancer.ingress[0].ip' 20.245.230.91ダッシュボードを
http://20.245.230.91:18083で開きます。デフォルトの認証情報でログインしてください:
- ユーザー名:
admin - パスワード:
public
- ユーザー名:
MQTTXを使ったサブスクライブとパブリッシュ
この手順では、開発者がMQTTサービスやアプリケーションを素早くテストできるオープンソースのMQTT 5.0コマンドラインクライアントツールであるMQTTX CLIを使用します。
EMQX TCPリスナーの外部IPを取得します。
EMQX Operatorは、設定された各リスナーに対してServiceリソースを自動的に作成します。
shellexternal_ip=$(kubectl get svc emqx-listeners -o json | jq -r '.status.loadBalancer.ingress[0].ip')トピックにサブスクライブします。
shell$ mqttx sub -t 'hello' -h ${external_ip} -p 1883 [10:00:25] › … 接続中... [10:00:25] › ✔ 接続完了 [10:00:25] › … helloにサブスクライブ中... [10:00:25] › ✔ helloにサブスクライブしました別のターミナルで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] › ✔ メッセージをパブリッシュしましたサブスクライバーがメッセージを受信する様子を確認します。
shell[10:00:58] › payload: hello world
LoadBalancerによるTLSオフロードについての注意点
L3/L4ロードバランサーであるAzure LoadBalancerはTLS終端をサポートしていません。可能な回避策については、こちらのディスカッションを参照してください。