EMQ建集羣加入到kubernetes和rancher

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章