在 kubernetes 上集群 EMQ X

kubernetes(k8s) 是 Google 的开源容器集群管理系统,是一个完备的分布式系统支撑平台。EMQ X 节点可以使用 kubernetes 的服务发现功能组建集群。

k8s的功能非常强大,关于它的部署和配置的详细说明超过了本文档的范围,有兴趣的读者请参阅k8s文档在线

配置 EMQ X 节点

您需要在各个 EMQ X 节点上编辑 'etc/emqx.conf'文件中的cluster段落和node段落。

配置 k8s 集群方式

您需要为 k8s 自动集群指定 kubernetes API服务器,EMQ X 在 k8s 上的服务名,地址类型,用于建立node.name的 app_name 和 k8s上使用的命名空间。

  1. cluster.discovery = k8s
  2. ##--------------------------------------------------------------------
  3. ## Cluster using Kubernetes
  4. ## Kubernetes API server list, seperated by ','.
  5. ##
  6. ## Value: String
  7. cluster.k8s.apiserver = http://192.168.1.162:8081
  8. ## The service name helps lookup EMQ nodes in the cluster.
  9. ##
  10. ## Value: String
  11. cluster.k8s.service_name = emqx
  12. ## The address type is used to extract host from k8s service.
  13. ##
  14. ## Value: ip | dns
  15. cluster.k8s.address_type = ip
  16. ## The app name helps build 'node.name'.
  17. ##
  18. ## Value: String
  19. cluster.k8s.app_name = emqx
  20. ## Kubernetes Namespace
  21. ##
  22. ## Value: String
  23. cluster.k8s.namespace = default

检验是否集群成功

在配置完成后,依次启动集群的各个节点。然后在任意节点上执行命令查询集群状态:

  1. ./emqx_ctl cluster status

看到以下结果则表示集群建立成功:

  1. Cluster status: [{running_nodes,['emqx@192.168.1.162','emqx@192.168.1.165']}]

关闭集群内一个节点,再次查询集群状态,应该能看到以下结果:

  1. Cluster status: [{running_nodes,['emqx2@192.168.1.165']},
  2. {stopped_nodes,['emqx1@192.168.1.162']}]