Azure Kubernetes Service 上への EMQX デプロイ
EMQX Operator は Azure Kubernetes Service(AKS)上への EMQX デプロイをサポートしています。AKS は、運用上の負荷を Azure に委ねることで、Azure 上にマネージド Kubernetes クラスターを簡単にデプロイできるサービスです。ホスト型 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/v3beta1 kind: EMQX metadata: name: emqx spec: image: emqx/emqx:6.3.2 config: roots: license: key: "..." coreTemplate: spec: persistentVolumeClaimSpec: ## ストレージクラスの詳細: 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 終端をサポートしていません。可能な回避策については、こちらのディスカッションを参照してください。