通过k8s address_type = ip 方式 可以自动集群
emqx.conf 配置
cluster { discovery_strategy = k8s name = emqx-cluster k8s { apiserver = "https://kubernetes.default.svc:443" service_name = "emqx-headless" namespace = "emqx" address_type = "ip" } }
node拉起正常
kubectl logs -n emqx emqx-0 EMQX_RPC__PORT_DISCOVERY [rpc.port_discovery]: manual EMQX_NODE__NAME [node.name]: emqx@10.244.149.41 Listener tcp:default on 0.0.0.0:1883 started. Listener ssl:default on 0.0.0.0:8883 started. Listener ws:default on 0.0.0.0:8083 started. Listener wss:default on 0.0.0.0:8084 started. Listener http:dashboard on 0.0.0.0:18083 started. EMQX 5.8.6 is running now!
自动集群成功,且节点重启后可自动加入集群
emqx ctl cluster status Cluster status: #{running_nodes => ['emqx@10.244.149.41','emqx@10.244.172.226', 'emqx@10.244.198.40'], stopped_nodes => []}
以下是通过k8s address_type = hostname 方式 无法自动集群
emqx.conf 配置
cluster { discovery_strategy = k8s name = emqx-cluster k8s { apiserver = "https://kubernetes.default.svc:443" service_name = "emqx-headless" namespace = "emqx" address_type = "hostname" } }
环境配置
- name: EMQX_NODE__NAME value: "emqx@$(POD_NAME).$(SERVICE_NAME).$(POD_NAMESPACE).svc.cluster.local"
pod创建没问题,node.name正确
kubectl logs -n emqx emqx-2 EMQX_RPC__PORT_DISCOVERY [rpc.port_discovery]: manual EMQX_NODE__NAME [node.name]: emqx@emqx-2.emqx-headless.emqx.svc.cluster.local Listener tcp:default on 0.0.0.0:1883 started. Listener ssl:default on 0.0.0.0:8883 started. Listener ws:default on 0.0.0.0:8083 started. Listener wss:default on 0.0.0.0:8084 started.
基于配置的yaml创建后 ,无法完成自动集群
emqx ctl cluster status Cluster status: #{running_nodes => ['emqx@emqx-1.emqx-headless.emqx.svc.cluster.local'], stopped_nodes => []}
必须要手动加入节点完成集群,且节点宕机重启后,无法自动接入
emqx ctl cluster join emqx@emqx-0.emqx-headless.emqx.svc.cluster.local Join the cluster successfully. Cluster status: #{running_nodes => ['emqx@emqx-0.emqx-headless.emqx.svc.cluster.local', 'emqx@emqx-1.emqx-headless.emqx.svc.cluster.local'], stopped_nodes => []}
其中rbac检查通过,k8s网络插件为calico
kubectl auth can-i get endpoints --as=system:serviceaccount:emqx:emqx-sa -n emqx yes kubectl auth can-i list pods --as=system:serviceaccount:emqx:emqx-sa -n emqx yes
想请教下,这两种方式除以上的address_type和环境变量EMQX_NODE__NAME 配置差异外,还需要哪些配置,如何正确配置 hostname 方式集群