EMQ建集群加入到kubernetes和rancher
最近发现EMQ对物联网场景支持比较好,各种协议插件比较多容器扩展。目前EMQ整个部署想加入到k8s集群里需要做一些事情,首先进行deploayment和server的部署,目前3.1版本版本,首先要在rancher后台新建api key,如果使用kubeconfig里面的token会有如下错误can't read token:eaccs。这个可能是里面token不能使用,后来我是从后台新增了一个a
最近发现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
更多推荐
所有评论(0)