EMQ建集群加入到kubernetes和rancher

  • Post author:
  • Post category:其他


最近发现EMQ对物联网场景支持比较好,各种协议插件比较多容器扩展。目前EMQ整个部署想加入到k8s集群里需要做一些事情,首先进行deploayment和server的部署,目前3.1版本版本,首先要在rancher后台新建api key,如果使用kubeconfig里面的token会有如下错误can’t read token:eaccs。这个可能是里面token不能使用,后来我是从后台新增了一个api key。对改token进行base编码,从rancher进去到集群界面打开kubectl控制台,运行 echo -n token-sj5fc:x47bbk97cwmtt6btx6nvx5mw8tj99mf6l7pk269dlhbr9v8hv8skbm | base64 -w 0返回base64编码。

不使用api server地址而使用Kubeconfig里面rancher的集群访问地址,也可以从Kubectl控制台输入kubectl cluster-info查找api server地址。在k8s里面添加serect资源

apiVersion: v1

kind: Secret

metadata:

name: emqx-secret

type: Opaque

data:

token: dG9rZW4tc2o1ZmM6eDQ3YmJrOTdjd210dDZidHg2bnZ4NW13OHRqOTltZjZsN3BrMjY5ZGxoYnI5djhodjhza2Jt

添加好后添加deployment,service资源

apiVersion: v1

kind: Service

metadata:

name: emqx

spec:

ports:

– port: 10001

nodePort: 10001

targetPort:  emqx-dashboard

protocol: TCP

selector:

app: emqx

type: NodePort



apiVersion: extensions/v1beta1

kind: Deployment

metadata:

name: emqx

labels:

app: emqx

spec:

replicas: 2

template:

metadata:

labels:

app: emqx

spec:

volumes:

– name: emqx-secret

secret:

secretName: emqx-secret

affinity:

nodeAffinity:

requiredDuringSchedulingIgnoredDuringExecution:

nodeSelectorTerms:

– matchExpressions:

– key: worktype1

operator: In

values:

– emq

containers:

– name: emqx

image: emqx/emqx:v3.1.0

ports:

– name: emqx-dashboard

containerPort: 18083

– name: emqx-http

containerPort: 8083

– name: emqx-mqtt

containerPort: 1883

– name: emqx-management

containerPort: 8080

env:

– name: EMQX_CLUSTER__DISCOVERY

value: k8s

– name: EMQX_NAME

value: emqx

– name: EMQX_CLUSTER__K8S__APISERVER

value: https://rancher.domain.com/k8s/clusters/c-m62j9

– name: EMQX_CLUSTER__K8S__NAMESPACE

value: emqcluster

– 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

这里为止整个能跑起来了,但有个就是如果发生pod转移或者重启之前设置信息都没了,需要对一些目录做持久化处理

比如以下目录

volumes:

– ./emqx/log:/opt/emqx/log #working

– ./emqx/data/mnesia:/opt/emqx/data/mnesia #working

– ./emqx/lib:/opt/emqx/lib #not working

– ./emqx/etc:/opt/emqx/etc/plugins/ #not working

参考:

https://github.com/emqx/emqx-docker



版权声明:本文为learner198461原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。