最近發現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