文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-03 18:24

关注

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

实验环境:

通过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文件。

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

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

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

执行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
如何使用Rancher在Kubernetes上部署EMQ X集群

在导入页面将emqx.yaml文件的内容复制进去!
如何使用Rancher在Kubernetes上部署EMQ X集群

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

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯