Skip to content

在 Google Kubernetes Engine 中部署 EMQX ​

EMQX Operator 允许在 Google Kubernetes Engine (GKE) 上部署 EMQX,这简化了在 GCP 中部署托管 Kubernetes 集群的过程。使用 GKE,您可以将运维开销转移到 GCP。通过在 GKE 上部署 EMQX,您可以利用 Kubernetes 的可扩展性和灵活性,同时受益于托管服务的简单性和便利性。使用 GKE 上的 EMQX Operator,您可以轻松地在云中部署和管理 MQTT 代理,并专注于您的业务目标。

前提条件 ​

在 GKE 上部署 EMQX 之前,请确保满足以下先决条件:

快速部署 EMQX 集群 ​

以下示例显示了基本的 EMQX 自定义资源 (CR) 配置。

  1. 将以下文档保存为 YAML 文件,并使用 kubectl apply 部署。

    注意

    如果指定 CPU 和内存限制,请确保至少 250m CPU 和 512Mi 内存。有关详细信息,请参阅 Autopilot 中的资源请求。

    yaml
    apiVersion: apps.emqx.io/v2
    kind: EMQX
    metadata:
      name: emqx
    spec:
      image: emqx/emqx:6.3.1
      config:
        data: |
          license {
            key = "..."
          }
      coreTemplate:
        spec:
          volumeClaimTemplates:
          ## 有关存储类的更多信息: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
  2. 等待 EMQX 集群就绪。

    使用 kubectl get 检查 EMQX 集群的状态,并确保 STATUS 为 Ready。这可能需要一些时间。

    shell
    $ kubectl get emqx
    NAME   STATUS    AGE
    emqx   Ready     1m2s
  3. 获取 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
  4. 在 http://34.122.174.166:18083 打开 Dashboard。

    使用默认凭据登录:

    • 用户名: admin
    • 密码: public

订阅和发布 ​

本演练使用 MQTTX CLI,这是一款开源的 MQTT 5.0 命令行客户端工具,可帮助开发者快速测试 MQTT 服务和应用。

  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] › …  Connecting...
    [10:00:25] › ✔  Connected
    [10:00:25] › …  Subscribing to hello...
    [10:00:25] › ✔  Subscribed to hello
  3. 在单独的终端中,连接到 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
  4. 观察订阅者接收消息。

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

关于使用 LoadBalancer 进行 TLS 卸载的说明 ​

在撰写本文时,Google LoadBalancer 不支持 TLS 到纯 TCP 流量的终止。请参阅此讨论以了解可能的解决方案。