千家信息网

如何使用Rancher在Kubernetes上部署EMQ X集群

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"如何使用Rancher在Kubernetes上部署EMQ X集群",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何使用Ranche
千家信息网最后更新 2026年11月02日如何使用Rancher在Kubernetes上部署EMQ X集群

这篇文章主要讲解了"如何使用Rancher在Kubernetes上部署EMQ X集群",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何使用Rancher在Kubernetes上部署EMQ X集群"吧!

实验环境:

  • 公有云环境:AWS EC2

  • 操作系统:ubuntu 16.04

  • Docker version:18.09.0

通过Rancher部署kubernetes集群

Rancher的安装以及部署kubernetes集群的步骤推荐直接按照快速入门执行。

创建Rancher Api密钥

EMQ X通过访问kube-apiserver来实现自动集群功能,在Rancher中,Rancher对kube-apiserver做了一层代理,在访问kube-apiserver的时候必须提供用于向Rancher进行身份验证的API密钥。参考用户手册创建并保存API Key。本实验中创建的Access Key为:token-dksbl,Secret Key为:pshhhf5cp8d5v5x7bzjdm82qfrwgx7f2bzksnr748j42xmbvvklbdz,组合成的Token为:token-dksbl:pshhhf5cp8d5v5x7bzjdm82qfrwgx7f2bzksnr748j42xmbvvklbdz

下载并配置kubectl

  1. 下载并安装kubectl

  2. 进入Rancher集群页面,点击Kubeconfig文件。

将kubeconfig文件保存到~/.kube/config

执行kubectl cluster-info验证配置是否成功

$ kubectl cluster-infoKubernetes master is running at https://13.125.244.172/k8s/clusters/c-vvgjqKubeDNS is running at https://13.125.244.172/k8s/clusters/c-vvgjq/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

访问kube-apiserver

EMQ X通过访问kube-apiserver来实现自动集群,kube-apiserver的地址可以查看~/.ssh/config文件或者执行kubectl cluster-info获取,本实验中kube-apiserver的地址为:https://13.125.244.172/k8s/clusters/c-vvgjq。

直接访问kube-apiserver,可以看到会报错需要认证。

$ curl -k https://13.125.244.172/k8s/clusters/c-vvgjq{"type":"error","status":"401","message":"must authenticate"}

在头部加上Authorization认证则可以正常访问

$ curl -k -H 'Authorization: Bearer token-dksbl:pshhhf5cp8d5v5x7bzjdm82qfrwgx7f2bzksnr748j42xmbvvklbdz' https://13.125.244.172/k8s/clusters/c-vvgjq

编辑emqx.yaml

在Kubernetes 上安装 EMQ X 系列文章之二 :EMQ X 自动集群一文中分享了EMQ X部署kubernetes集群的yaml文件如下,在Rancher上部署EMQ X集群的话需要稍加改动。

$cat emqx.yamlapiVersion: v1kind: Servicemetadata:  name: emqxspec:  ports:  - port: 32333    nodePort: 32333    targetPort:  emqx-dashboard    protocol: TCP  selector:    app: emqx  type: NodePort---apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: emqx  labels:        app: emqxspec:  replicas: 2  template:    metadata:      labels:        app: emqx    spec:      containers:      - name: emqx        image: emqx/emqx:latest        ports:        - name: emqx-dashboard          containerPort: 18083        env:        - name: EMQX_CLUSTER__DISCOVERY          value: k8s        - name: EMQX_NAME          value: emqx        - name: EMQX_CLUSTER__K8S__APISERVER          value: http://172.31.19.161:8080        - name: EMQX_CLUSTER__K8S__NAMESPACE          value: default        - name: EMQX_CLUSTER__K8S__SERVICE_NAME          value: emqx        - name: EMQX_CLUSTER__K8S__ADDRESS_TYPE          value: ip        - name: EMQX_CLUSTER__K8S__APP_NAME          value: emqx        tty: true

EMQ X可以读取/var/run/secrets/kubernetes.io/serviceaccount/token文件中的内容组合Authorization认证访问kube-apiserver,所以只需要把Rancher的API Token通过Secret挂载到容器中就可以了。

Secret解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。

Secret有三种类型:

  • Service Account :用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中;

  • Opaque :base64编码格式的Secret,用来存储密码、密钥等;

  • kubernetes.io/dockerconfigjson :用来存储私有docker registry的认证信息。

首先对API Token做base64编码

$ echo -n token-dksbl:pshhhf5cp8d5v5x7bzjdm82qfrwgx7f2bzksnr748j42xmbvvklbdz | base64 -w 0dG9rZW4tZGtzYmw6cHNoaGhmNWNwOGQ1djV4N2J6amRtODJxZnJ3Z3g3ZjJiemtzbnI3NDhqNDJ4bWJ2dmtsYmR6

在yaml文件中创建Secret

$vim emqx.yamlapiVersion: v1kind: Secretmetadata:  name: emqx-secrettype: Opaquedata:  token: dG9rZW4tcGI2MjU6eDZ2eGJ0Y2NmdG1waGpseHR3NGNjdGN2d2txdzk5aDJzYmhxNHFtaDh5c2ZnbXd6dzJ0d2Rw---......

修改Deployment,将环境变量中的EMQX_CLUSTER__K8S__APISERVER改为Rancher的Kube-apiserver的地址,增加volumeMounts

$vim emqx.yaml......apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: emqx  labels:        app: emqxspec:  replicas: 2  template:    metadata:      labels:        app: emqx    spec:      volumes:      - name: emqx-secret        secret:           secretName: emqx-secret      containers:      - name: emqx        image: emqx/emqx:latest        ports:        - name: emqx-dashboard          containerPort: 18083        - name: emqx-http          containerPort: 8083        - name: emqx-mqtt          containerPort: 1883        env:        - name: EMQX_CLUSTER__DISCOVERY          value: k8s        - name: EMQX_NAME          value: emqx        - name: EMQX_CLUSTER__K8S__APISERVER          value: https://13.125.244.172/k8s/clusters/c-vvgjq        - name: EMQX_CLUSTER__K8S__NAMESPACE          value: default        - name: EMQX_CLUSTER__K8S__SERVICE_NAME          value: emqx        - name: EMQX_CLUSTER__K8S__ADDRESS_TYPE          value: ip        - name: EMQX_CLUSTER__K8S__APP_NAME          value: emqx        tty: true        volumeMounts:          - name: emqx-secret            mountPath: "/var/run/secrets/kubernetes.io/serviceaccount"            readOnly: true

部署EMQ X

查看修改后的emqx.yaml

$cat emqx.yamlapiVersion: v1kind: Secretmetadata:  name: emqx-secrettype: Opaquedata:  token: dG9rZW4tcGI2MjU6eDZ2eGJ0Y2NmdG1waGpseHR3NGNjdGN2d2txdzk5aDJzYmhxNHFtaDh5c2ZnbXd6dzJ0d2Rw---apiVersion: v1kind: Servicemetadata:  name: emqxspec:  ports:  - port: 32333    nodePort: 32333    targetPort:  emqx-dashboard    protocol: TCP  selector:    app: emqx  type: NodePort---apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: emqx  labels:        app: emqxspec:  replicas: 2  template:    metadata:      labels:        app: emqx    spec:      volumes:      - name: emqx-secret        secret:           secretName: emqx-secret      containers:      - name: emqx        image: emqx/emqx:latest        ports:        - name: emqx-dashboard          containerPort: 18083        - name: emqx-http          containerPort: 8083        - name: emqx-mqtt          containerPort: 1883        env:        - name: EMQX_CLUSTER__DISCOVERY          value: k8s        - name: EMQX_NAME          value: emqx        - name: EMQX_CLUSTER__K8S__APISERVER          value: https://13.125.244.172/k8s/clusters/c-vvgjq        - name: EMQX_CLUSTER__K8S__NAMESPACE          value: default        - name: EMQX_CLUSTER__K8S__SERVICE_NAME          value: emqx        - name: EMQX_CLUSTER__K8S__ADDRESS_TYPE          value: ip        - name: EMQX_CLUSTER__K8S__APP_NAME          value: emqx        tty: true        volumeMounts:          - name: emqx-secret            mountPath: "/var/run/secrets/kubernetes.io/serviceaccount"            readOnly: true

部署EMQ X

$ kubectl create -f emqx.yamlsecret/emqx-secret createdservice/emqx createddeployment.extensions/emqx created

查看状态

$ kubectl get podsNAME                       READY   STATUS    RESTARTS   AGEemqx-67b5fcf4d-gwzfn       1/1     Running   0          36semqx-67b5fcf4d-rb7m6       1/1     Running   0          36s

集群成功

$ kubectl exec emqx-67b5fcf4d-gwzfn /opt/emqx/bin/emqx_ctl cluster statusCluster status: [{running_nodes,['emqx@10.42.1.24','emqx@10.42.2.19']}]

使用Rancher Dashboard部署EMQ X(可选)

删除刚刚部署的EMQ X

$ kubectl delete -f emqx.yamlsecret "emqx-secret" deletedservice "emqx" deleteddeployment.extensions "emqx" deleted

进入Rancher集群工作负载页面,点击导入YAML

在导入页面将emqx.yaml文件的内容复制进去!

点击导入,等待导入成功。

感谢各位的阅读,以上就是"如何使用Rancher在Kubernetes上部署EMQ X集群"的内容了,经过本文的学习后,相信大家对如何使用Rancher在Kubernetes上部署EMQ X集群这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

集群 文件 内容 密钥 环境 认证 成功 地址 页面 学习 实验 配置 验证 变量 密码 数据 文章 编码 问题 中创 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 厦门中拓互联网络科技有限公司 互联网巨头反垄断金融科技 互联网科技上市公司 广西互联网科技公司 互联网科技公司名称 农村开互联网科技讲堂 科技与互联网的利与弊 南山科技园互联网公司有哪些 宁夏科技产业互联网案例 湖南一路畅行互联网科技 崇明区互联网教育科技售后服务 互联网科技扶贫时间 中国互联网十大科技股排名 中国互联网有什么科技 互联网安防科技感 昆明中奇联合互联网科技 银川新华互联网科技学校原画 北京天晋互联网科技有限公司 互联网对科技影响 广州全民伙伴互联网科技有限公司 互联网与科技 博彦科技互联网金融 合肥互联网科技公司 中国互联网科技发展 米客互联网科技 随着互联网科技发展 世界互联网领先科技成果获奖 工业互联网展湾科技股份有限公司 新氧科技和美国互联网有关系吗 数字互联网科技有限公司
0