溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何在Kubernetes上部署EMQ X集群

發(fā)布時間:2021-09-04 15:01:19 來源:億速云 閱讀:333 作者:chen 欄目:互聯(lián)網(wǎng)科技

本篇內(nèi)容主要講解“如何在Kubernetes上部署EMQ X集群”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何在Kubernetes上部署EMQ X集群”吧!

通過 Helm 在 Kubernetes 上快速部署 EMQ X 集群

通過 EMQ X 提供的 Helm chart 可以很簡單地將 EMQ X 部署至 Kubernetes 平臺。在開始之前,請確保遵循 Helm文檔指南 來安裝 Helm。

關(guān)于 Kubernetes

Kubernetes 是廣泛應(yīng)用的提供自動部署、擴展和運行應(yīng)用程序開源容器編排平臺。

使用 Kubernetes, 可以快速高效地響應(yīng)客戶需求:

  • 快速、可預(yù)測地部署應(yīng)用程序

  • 擁有即時擴展應(yīng)用程序的能力

  • 不影響現(xiàn)有業(yè)務(wù)的情況下,無縫地發(fā)布新功能

  • 優(yōu)化硬件資源,降低成本

Kubernetes 具有如下特點:
  • 便攜性: 無論公有云、私有云、混合云還是多云架構(gòu)都全面支持

  • 可擴展: 它是模塊化、可插拔、可掛載、可組合的,支持各種形式的擴展

  • 自修復: 它可以自保持應(yīng)用狀態(tài)、可自重啟、自復制、自縮放的,通過聲明式語法提供了強大的自修復能力

Kubernetes 項目由 Google 公司在 2014 年啟動。Kubernetes 建立在 Google 公司超過十余年的運維經(jīng)驗基礎(chǔ)之上,Google 所有的應(yīng)用都運行在容器上, 再與社區(qū)中最好的想法和實踐相結(jié)合,也許它是最受歡迎的容器平臺。

關(guān)于 Helm

Helm 是一個 kubernetes 應(yīng)用的包管理工具,用來管理 [charts] (https://github.com/kubernetes/charts)——預(yù)先配置好的安裝包資源,有點類似于 Ubuntu 的 APT 和 CentOS 中的 yum 。

Helm chart 是用來封裝 kubernetes 原生應(yīng)用程序的 yaml 文件,可以在部署應(yīng)用的時候自定義應(yīng)用程序的一些metadata,便與應(yīng)用程序的分發(fā)。

Helm 和 charts 的主要作用:

  • 應(yīng)用程序封裝

  • 版本管理

  • 依賴檢查

  • 便于應(yīng)用程序分發(fā)

Setup

  • Kubernetes 1.6+

  • Helm

快速部署一個簡單的 EMQ X 集群

  • 添加 Helm 倉庫

    $ helm repo add emqx https://repos.emqx.io/charts


  • 查詢 EMQ X

    helm search emqx
    NAME     	CHART VERSION	APP VERSION  	DESCRIPTION
    emqx/emqx	v1.0.0-beta.1	v1.0.0-beta.1	A Helm chart for Emqx

     

    EMQ X Chart 當前是 Beta 版,所以在執(zhí)行 helm install 命令的時候需要添加 --devel,正式版的 Chart 無需添加該選項,請讀者注意。

  • 啟動 EMQ X 集群,設(shè)置 service.type=NodePort,并指定使用的 imageemqx/emqx:v3.2.3

    $ helm install --devel --name my-emqx --set service.type=NodePort --set image=emqx/emqx:v3.2.3 emqx/emqx


  • 查看 EMQ X 集群情況

    $ kubectl get pods
    NAME       READY  STATUS             RESTARTS  AGE
    my-emqx-0  1/1    Running            0         81m
    my-emqx-1  1/1    Running            0         81m
    my-emqx-2  1/1    Running            0         80m
    
    $ kubectl exec -it my-emqx-0 -- emqx_ctl cluster status
    Cluster status: [{running_nodes,['my-emqx@192.168.109.82',
                                     'my-emqx@192.168.71.78',
                                     'my-emqx@192.168.95.126']}]


  • 查看 EMQ X service

    $ kubectl get svc
    NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                                                      AGE
    kubernetes           ClusterIP   10.100.0.1      <none>        443/TCP                                                                                      7h36m
    my-emqx              NodePort    10.100.213.62   <none>        1883:30068/TCP,8883:32463/TCP,8080:31854/TCP,8083:32057/TCP,8084:31459/TCP,18083:31539/TCP   57s
    my-emqx-headless     ClusterIP   None            <none>        1883/TCP,8883/TCP,8080/TCP,8083/TCP,8084/TCP,18083/TCP                                       57s


    可以看到 my-emqx 的 18083 端口對應(yīng)的宿主機IP是31539。( NodePort 在每次部署的時候都會變化,以實際部署時為準。)

  • 訪問 Kubernetes 的任意一臺節(jié)點IP的31539端口,輸入默認用戶名:admin,默認密碼:public,登陸 EMQ X Dashboard。

  • 刪除 EMQ X 集群

    $ helm del --purge my-emqx


部署一個持久化的 EMQ X 集群

EMQ X 通過 創(chuàng)建 PVC 資源掛載 /opt/emqx/data/mnesia 目錄實現(xiàn)持久化 pods在部署 EMQ X 之前,用戶需要部署 Haproxy 或 Nginx-PLUS 等負載均衡器,并自行在 Kubernetes 中創(chuàng)建 PV 資源或是 Storage Classes 資源

  • 添加 Helm 倉庫

    $ helm repo add emqx https://repos.emqx.io/charts


  • 啟動 EMQ X 集群

    持久化 EMQ X 集群需要進行以下的設(shè)置:

    image=emqx/emqx:v3.2.3
    emqxAddressType=hostname
    persistence.enabled=true


    **注意:**持久化EMQ X 僅支持 v3.2.1 以上的版本

    • 如果用戶部署了 PV 資源,那么設(shè)置 persistence.existingClaim=your_pv_name

      $ helm install --devel --name my-emqx --set image=emqx/emqx:v3.2.3 --set emqxAddressType=hostname --set persistence.enabled=true --set persistence.existingClaim=your_pv_name  emqx/emqx


    • 如果用戶部署了 Storage Classes 資源,那么設(shè)置persistence.storageClass=your_storageClass_name

      $ helm install --devel --name my-emqx --set image=emqx/emqx:v3.2.3 --set emqxAddressType=hostname --set persistence.enabled=true --set persistence.storageClass=your_storageClass_name emqx/emqx


  • 查看 EMQ X 集群情況

    $ kubectl get pods
    NAME       READY  STATUS             RESTARTS  AGE
    my-emqx-0  1/1    Running            0         81m
    my-emqx-1  1/1    Running            0         81m
    my-emqx-2  1/1    Running            0         80m
    
    $ kubectl exec -it my-emqx-0 -- emqx_ctl cluster status
    Cluster status: [{running_nodes,['my-emqx@my-emqx-2.my-emqx-headless.default.svc.cluster.local',
                                     'my-emqx@my-emqx-1.my-emqx-headless.default.svc.cluster.local',
                                     'my-emqx@my-emqx-0.my-emqx-headless.default.svc.cluster.local']}]


  • 以 Storage Classes 為例,可以看到 PVC 資源已經(jīng)成功的建立

    $ kubectl get pvc
    NAME                  STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    emqx-data-my-emqx-0   Bound     pvc-8094cd75-adb5-11e9-80cc-0697b59e8064   1Gi        RWO            gp2            2m11s
    emqx-data-my-emqx-1   Bound     pvc-9325441d-adb5-11e9-80cc-0697b59e8064   1Gi        RWO            gp2            99s
    emqx-data-my-emqx-2   Bound     pvc-ad425e9d-adb5-11e9-80cc-0697b59e8064   1Gi        RWO            gp2            56s


    集群會將 EMQ X 的 /opt/emqx/data/mnesia 目錄掛載到 PVC 中,當 Pods 被重新調(diào)度之后,EMQ X 會從 /opt/emqx/data/mnesia 目錄中獲取數(shù)據(jù)并恢復

  • 查看 EMQ X 的 ClusterIP

    $ kubectl get svc
    NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                  AGE
    kubernetes           ClusterIP   10.100.0.1      <none>        443/TCP                                                  24h
    my-emqx              ClusterIP   10.100.205.13   <none>        1883/TCP,8883/TCP,8080/TCP,8083/TCP,8084/TCP,18083/TCP   26m
    my-emqx-headless     ClusterIP   None            <none>        1883/TCP,8883/TCP,8080/TCP,8083/TCP,8084/TCP,18083/TCP   26m


    可以看到 my-emqx 的 ClusterIP 為 10.100.205.13 ( ClusterIP 在每次部署的時候都會變化,以實際部署時為準。)

  • 將負載均衡監(jiān)聽的 URL 的 1883、8883、8080、8083、8084、18083 端口轉(zhuǎn)發(fā)到 my-emqx 的 ClusterIP,如果有 TLS 連接的需要,推薦在負載均衡器終結(jié) SSL 連接??蛻舳伺c負載均衡器之間 TLS 安全連接,LB 與 EMQ X 之間普通 TCP 連接。

  • 訪問 URL:18083,輸入默認用戶名:admin,默認密碼:public,登陸 EMQ X dashboard。

  • 使用 helm upgrade 命令可以輕松擴展 EMQ X 集群,下面以增加 EMQ X 節(jié)點為例展示 helm upgrade命令

    # 將 EMQ X 的節(jié)點數(shù)量變更為5個
    # 注意:EMQ X 的節(jié)點數(shù)量建議為單數(shù)
    $ helm upgrade --set replicas=5 my-emqx emqx/emqx


    $ kubectl get pods
    NAME       READY  STATUS             RESTARTS  AGE
    my-emqx-0  1/1    Running            0         81m
    my-emqx-1  1/1    Running            0         81m
    my-emqx-2  1/1    Running            0         80m
    my-emqx-3  1/1    Running            0         22m
    my-emqx-4  1/1    Running            0         22m
    
    $ kubectl exec -it my-emqx-0 -- emqx_ctl cluster status
    Cluster status: [{running_nodes,['my-emqx@my-emqx-4.my-emqx-headless.default.svc.cluster.local',
                                     'my-emqx@my-emqx-3.my-emqx-headless.default.svc.cluster.local',
                                     'my-emqx@my-emqx-2.my-emqx-headless.default.svc.cluster.local',
                                     'my-emqx@my-emqx-1.my-emqx-headless.default.svc.cluster.local',
                                     'my-emqx@my-emqx-0.my-emqx-headless.default.svc.cluster.local']}]


  • 刪除 EMQ X 集群

    $ helm del --purge my-emqx


    **注意:**EMQ X 集群刪除掉之后 PVC 資源不會自動釋放掉,以便恢復 EMQ X ,確認不需要恢復后需要手動刪除 PVC 資源

    $ kubectl get pvc
    NAME                  STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    emqx-data-my-emqx-0   Bound     pvc-8094cd75-adb5-11e9-80cc-0697b59e8064   1Gi        RWO            gp2            84m
    emqx-data-my-emqx-1   Bound     pvc-9325441d-adb5-11e9-80cc-0697b59e8064   1Gi        RWO            gp2            84m
    emqx-data-my-emqx-2   Bound     pvc-ad425e9d-adb5-11e9-80cc-0697b59e8064   1Gi        RWO            gp2            83m
    emqx-data-my-emqx-3   Bound     pvc-b6c5a565-adbd-11e9-80cc-0697b59e8064   1Gi        RWO            gp2            25m
    emqx-data-my-emqx-4   Bound     pvc-c626cafd-adbd-11e9-80cc-0697b59e8064   1Gi        RWO            gp2            25m
    
    $ kubectl delete pvc emqx-data-my-emqx-0 emqx-data-my-emqx-1 emqx-data-my-emqx-2 emqx-data-my-emqx-3 emqx-data-my-emqx-4                    
    persistentvolumeclaim "emqx-data-my-emqx-0" deleted
    persistentvolumeclaim "emqx-data-my-emqx-1" deleted
    persistentvolumeclaim "emqx-data-my-emqx-2" deleted
    persistentvolumeclaim "emqx-data-my-emqx-3" deleted
    persistentvolumeclaim "emqx-data-my-emqx-4" deleted


部署 EMQ X Edge 集群和 EMQ X 企業(yè)版集群

EMQ X Edge

部署 EMQ X Edge 集群指定 image=emqx/emqx-edge:v3.2.3 ,其他設(shè)置與部署 EMQ X 集群保持一致

$ helm install --devel --name my-emqx --set service.type=NodePort --set image=emqx/emqx-edge:v3.2.3 emqx/emqx
EMQ X EE

部署 EMQ X 企業(yè)版集群首先需要登陸 emqx.io 申請并下載 License 文件,并將 License 文件創(chuàng)建為 Secret 資源

$ kubectl create secret generic your-license-secret-name --from-file=/path/to/emqx.lic

然后在部署時指定 emqxLicneseSecretName=your-license-secret-name,image=emqx/emqx-ee:v3.4.0,其他設(shè)置與部署 EMQ X 集群保持一致

helm install --devel --name my-emqx --set service.type=NodePort --set image=emqx/emqx-ee:v3.2.3 --set emqxLicneseSecretName=your-license-secret-name emqx/emqx

EMQ X Helm Chart 配置項

參數(shù)描述Default Value
apiserverKubernates API serverhttps://kubernetes.default.svc:443
namespacekubernetes namespacedefault
replicasEMQ X 節(jié)點數(shù)量,建議保持奇數(shù)個節(jié)點,不然腦裂后無法自動恢復3
imageEMQ X 鏡像名稱emqx/emqx:latest
imagePullPolicy獲取鏡像的策略IfNotPresent
persistence.enabled是否啟用 PVCfalse
persistence.storageClassStorage class 名稱nil
persistence.existingClaimPV 名稱""
persistence.accessModePVC 訪問模式ReadWriteOnce
persistence.sizePVC 容量20Mi
resourcesCPU/內(nèi)存資源{}
service.typeEmqx 集群服務(wù)類型ClusterIP
service.mqttPortMQTT 協(xié)議端口1883
service.mqttsslPortMQTT/SSL 端口8883
service.mgmtPort管理API 端口8080
service.websocketPortMQTT/WebSocket 端口8083
service.wssPortMQTT/WebSocket/SSL 端口8084
service.dashboardPortDashboard 端口18083
emqxAddressType用于從k8s服務(wù)中獲取EMQ X 節(jié)點 <br>可選值:ip、dns、hostname <br> 注意:hosename 僅支持 EMQ X v3.2.1 之后的版本ip
emqxConfigEMQ X 配置項,詳情查看文檔{}
emqxLicneseSecretNameEMQ X 企業(yè)版需要手動將 License 文件創(chuàng)建為 Secret 資源""

當需要設(shè)置復雜參數(shù)的時候,可以使用 Yaml 文件來記錄參數(shù)

$ helm install --devel --name my-emqx -f values.yaml emqx/emqx

到此,相信大家對“如何在Kubernetes上部署EMQ X集群”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI