您好,登錄后才能下訂單哦!
本篇內容主要講解“如何在Kubernetes上部署EMQ X集群”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何在Kubernetes上部署EMQ X集群”吧!
通過 EMQ X 提供的 Helm chart 可以很簡單地將 EMQ X 部署至 Kubernetes 平臺。在開始之前,請確保遵循 Helm文檔指南 來安裝 Helm。
Kubernetes 是廣泛應用的提供自動部署、擴展和運行應用程序開源容器編排平臺。
使用 Kubernetes, 可以快速高效地響應客戶需求:
快速、可預測地部署應用程序
擁有即時擴展應用程序的能力
不影響現有業務的情況下,無縫地發布新功能
優化硬件資源,降低成本
便攜性: 無論公有云、私有云、混合云還是多云架構都全面支持
可擴展: 它是模塊化、可插拔、可掛載、可組合的,支持各種形式的擴展
自修復: 它可以自保持應用狀態、可自重啟、自復制、自縮放的,通過聲明式語法提供了強大的自修復能力
Kubernetes 項目由 Google 公司在 2014 年啟動。Kubernetes 建立在 Google 公司超過十余年的運維經驗基礎之上,Google 所有的應用都運行在容器上, 再與社區中最好的想法和實踐相結合,也許它是最受歡迎的容器平臺。
Helm 是一個 kubernetes 應用的包管理工具,用來管理 [charts] (https://github.com/kubernetes/charts)——預先配置好的安裝包資源,有點類似于 Ubuntu 的 APT 和 CentOS 中的 yum 。
Helm chart 是用來封裝 kubernetes 原生應用程序的 yaml 文件,可以在部署應用的時候自定義應用程序的一些metadata,便與應用程序的分發。
Helm 和 charts 的主要作用:
應用程序封裝
版本管理
依賴檢查
便于應用程序分發
Kubernetes 1.6+
Helm
添加 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 版,所以在執行
helm install
命令的時候需要添加--devel
,正式版的 Chart 無需添加該選項,請讀者注意。
啟動 EMQ X 集群,設置 service.type=NodePort
,并指定使用的 image
為 emqx/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 端口對應的宿主機IP是31539。( NodePort 在每次部署的時候都會變化,以實際部署時為準。)
訪問 Kubernetes 的任意一臺節點IP的31539端口,輸入默認用戶名:admin,默認密碼:public,登陸 EMQ X Dashboard。
刪除 EMQ X 集群
$ helm del --purge my-emqx
EMQ X 通過 創建 PVC 資源掛載 /opt/emqx/data/mnesia
目錄實現持久化 pods
,在部署 EMQ X 之前,用戶需要部署 Haproxy 或 Nginx-PLUS 等負載均衡器,并自行在 Kubernetes 中創建 PV 資源或是 Storage Classes 資源
添加 Helm 倉庫
$ helm repo add emqx https://repos.emqx.io/charts
啟動 EMQ X 集群
持久化 EMQ X 集群需要進行以下的設置:
image=emqx/emqx:v3.2.3 emqxAddressType=hostname persistence.enabled=true
**注意:**持久化EMQ X 僅支持 v3.2.1
以上的版本
如果用戶部署了 PV 資源,那么設置 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 資源,那么設置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 資源已經成功的建立
$ 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 被重新調度之后,EMQ X 會從 /opt/emqx/data/mnesia
目錄中獲取數據并恢復
查看 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 在每次部署的時候都會變化,以實際部署時為準。)
將負載均衡監聽的 URL 的 1883、8883、8080、8083、8084、18083 端口轉發到 my-emqx
的 ClusterIP,如果有 TLS 連接的需要,推薦在負載均衡器終結 SSL 連接。客戶端與負載均衡器之間 TLS 安全連接,LB 與 EMQ X 之間普通 TCP 連接。
訪問 URL:18083
,輸入默認用戶名:admin,默認密碼:public,登陸 EMQ X dashboard。
使用 helm upgrade
命令可以輕松擴展 EMQ X 集群,下面以增加 EMQ X 節點為例展示 helm upgrade
命令
# 將 EMQ X 的節點數量變更為5個 # 注意:EMQ X 的節點數量建議為單數 $ 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 集群指定 image=emqx/emqx-edge:v3.2.3
,其他設置與部署 EMQ X 集群保持一致
$ helm install --devel --name my-emqx --set service.type=NodePort --set image=emqx/emqx-edge:v3.2.3 emqx/emqx
部署 EMQ X 企業版集群首先需要登陸 emqx.io 申請并下載 License 文件,并將 License 文件創建為 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
,其他設置與部署 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
參數 | 描述 | Default Value |
---|---|---|
apiserver | Kubernates API server | https://kubernetes.default.svc:443 |
namespace | kubernetes namespace | default |
replicas | EMQ X 節點數量,建議保持奇數個節點,不然腦裂后無法自動恢復 | 3 |
image | EMQ X 鏡像名稱 | emqx/emqx:latest |
imagePullPolicy | 獲取鏡像的策略 | IfNotPresent |
persistence.enabled | 是否啟用 PVC | false |
persistence.storageClass | Storage class 名稱 | nil |
persistence.existingClaim | PV 名稱 | "" |
persistence.accessMode | PVC 訪問模式 | ReadWriteOnce |
persistence.size | PVC 容量 | 20Mi |
resources | CPU/內存資源 | {} |
service.type | Emqx 集群服務類型 | ClusterIP |
service.mqttPort | MQTT 協議端口 | 1883 |
service.mqttsslPort | MQTT/SSL 端口 | 8883 |
service.mgmtPort | 管理API 端口 | 8080 |
service.websocketPort | MQTT/WebSocket 端口 | 8083 |
service.wssPort | MQTT/WebSocket/SSL 端口 | 8084 |
service.dashboardPort | Dashboard 端口 | 18083 |
emqxAddressType | 用于從k8s服務中獲取EMQ X 節點 <br>可選值:ip、dns、hostname <br> 注意:hosename 僅支持 EMQ X v3.2.1 之后的版本 | ip |
emqxConfig | EMQ X 配置項,詳情查看文檔 | {} |
emqxLicneseSecretName | EMQ X 企業版需要手動將 License 文件創建為 Secret 資源 | "" |
當需要設置復雜參數的時候,可以使用 Yaml 文件來記錄參數
$ helm install --devel --name my-emqx -f values.yaml emqx/emqx
到此,相信大家對“如何在Kubernetes上部署EMQ X集群”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。