在 Google Kubernetes Engine 中部署 EMQX
EMQX Operator 支持在 Google Kubernetes Engine(GKE)上部署 EMQX,从而简化在 GCP 中部署托管 Kubernetes 集群的过程。使用 GKE,可以将 Kubernetes 集群的运维工作交由 GCP 管理。在 GKE 上部署 EMQX,既可以利用 Kubernetes 的可扩展性和灵活性,也能获得托管服务带来的便捷体验。使用 GKE 上的 EMQX Operator,可以轻松地在云端部署和管理 MQTT Broker,并专注于业务目标。
前提条件
在 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: LoadBalancer等待 EMQX 集群就绪。
使用
kubectl get检查 EMQX 集群的状态,并确保STATUS为Ready。这可能需要一些时间。shell$ kubectl get emqx NAME STATUS AGE emqx Ready 1m2s获取 EMQX Dashboard 的外部 IP。
EMQX Operator 会根据
dashboardServiceTemplate配置创建 Service 资源。shell$ kubectl get svc emqx-dashboard -o json | jq -r '.status.loadBalancer.ingress[0].ip' 34.122.174.166在
http://34.122.174.166:18083打开 Dashboard。使用默认凭据登录:
- 用户名:
admin - 密码:
public
- 用户名:
订阅和发布
本演练使用 MQTTX CLI,这是一款开源的 MQTT 5.0 命令行客户端工具,可帮助开发者快速测试 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] › … Connecting... [10:00:25] › ✔ Connected [10:00:25] › … Subscribing to hello... [10:00:25] › ✔ Subscribed to hello在单独的终端中,连接到 EMQX 集群并发布消息。
shell$ mqttx pub -t 'hello' -h ${external_ip} -p 1883 -m 'hello world' [10:00:58] › … Connecting... [10:00:58] › ✔ Connected [10:00:58] › … Message Publishing... [10:00:58] › ✔ Message published观察订阅者接收消息。
shell[10:00:58] › payload: hello world
关于使用 LoadBalancer 进行 TLS 卸载的说明
在撰写本文时,Google LoadBalancer 不支持终止 TLS 并将其转换为纯 TCP 流量。有关可能的解决方法,请参阅相关讨论。