Google Kubernetes EngineへのEMQXデプロイ
EMQX Operatorを使用すると、Google Kubernetes Engine(GKE)上にEMQXをデプロイできます。これにより、GCPで管理されたKubernetesクラスターのデプロイが簡素化されます。GKEを利用することで、運用のオーバーヘッドをGCPに委ねることが可能です。GKE上にEMQXをデプロイすることで、Kubernetesのスケーラビリティと柔軟性を活かしつつ、管理されたサービスのシンプルさと利便性を享受できます。EMQX OperatorをGKEで利用すれば、クラウド上でMQTTブローカーを簡単にデプロイおよび管理でき、ビジネス目標に集中できます。
はじめる前に
GKE上にEMQXをデプロイする前に、以下の前提条件を満たしていることを確認してください。
Google Cloud Platform上にGKEクラスターがあること
- プロジェクトでGKE APIを有効にする必要があります。セットアップ手順はGoogle Kubernetes Engineのドキュメントを参照してください。
GKEクラスターに接続するための動作する
kubectl設定ローカルの
kubectlインストールを使って接続する場合は、GKEクラスターへの接続を参照してください。GCPコンソールのCloud Shellから直接接続する場合は、Cloud ShellでのGKEクラスター管理を参照してください。
クラスターにEMQX Operatorがインストールされていること
- 詳細はEMQX Operatorのインストールを参照してください。
EMQXクラスターの迅速なデプロイ
以下の例は基本的なEMQXカスタムリソース(CR)設定を示しています。
以下の内容をYAMLファイルとして保存し、
kubectl applyでデプロイします。注意
CPUおよびメモリのリソース制限を指定する場合は、最低でも250m CPUと512Miメモリを確保してください。詳細はAutopilotのリソースリクエストを参照してください。
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://cloud.google.com/kubernetes-engine/docs/concepts/persistent-volumes#storageclasses storageClassName: standard resources: requests: storage: 10Gi accessModes: - ReadWriteOnce dashboardServiceTemplate: spec: ## ロードバランサーの詳細:https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balancing type: LoadBalancer listenersServiceTemplate: spec: ## ロードバランサーの詳細:https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-balancing type: LoadBalancerEMQXクラスターがReady状態になるまで待ちます。
kubectl getコマンドでEMQXクラスターの状態を確認し、STATUSがReadyであることを確認してください。準備完了までに時間がかかる場合があります。shell$ kubectl get emqx NAME STATUS AGE emqx Ready 1m2sEMQXダッシュボードの外部IPを取得します。
EMQX Operatorは
dashboardServiceTemplateの設定に基づき、EMQXダッシュボード用のServiceリソースを作成します。shell$ kubectl get svc emqx-dashboard -o json | jq -r '.status.loadBalancer.ingress[0].ip' 34.122.174.166http://34.122.174.166:18083でダッシュボードを開きます。デフォルトの認証情報でログインしてください。
- ユーザー名:
admin - パスワード:
public
- ユーザー名:
サブスクライブとパブリッシュ
このハンズオンでは、オープンソースのMQTT 5.0コマンドラインクライアントツールであるMQTTX CLIを使用し、MQTTサービスやアプリケーションの迅速なテストを支援します。
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オフロードについての注意点
執筆時点では、Google LoadBalancerはTLSからプレーンTCPへのトラフィックの終了(ターミネーション)をサポートしていません。可能な回避策については、このディスカッションを参照してください。