KubeSphere怎样快速部署EMQ X至Kubernetes

发布时间:2021-12-20 10:50:44 作者:柒染
来源:亿速云 阅读:156
# KubeSphere怎样快速部署EMQ X至Kubernetes

## 前言

在云原生时代,Kubernetes已成为容器编排的事实标准,而KubeSphere作为一款开源的Kubernetes管理平台,极大简化了Kubernetes的运维复杂度。EMQ X作为一款高性能的开源MQTT消息服务器,在物联网(IoT)领域有着广泛应用。本文将详细介绍如何通过KubeSphere快速将EMQ X部署到Kubernetes集群中。

## 环境准备

### 1. Kubernetes集群要求
- Kubernetes 1.18+
- 至少2个可用节点(推荐4核8GB配置)
- 已安装存储类(StorageClass)
- 已配置好网络插件(Calico/Flannel等)

### 2. KubeSphere安装
若尚未安装KubeSphere,可通过以下方式快速安装:

```bash
# 使用KubeKey安装最小化KubeSphere
curl -sfL https://get-kk.kubesphere.io | sh -
./kk create cluster --with-kubernetes v1.22.10 --with-kubesphere v3.3.0

注:生产环境建议参考官方安装文档进行定制化安装

部署流程

步骤1:登录KubeSphere控制台

  1. 通过kubectl get svc -n kubesphere-system获取ks-console服务NodePort
  2. 浏览器访问http://<节点IP>:<NodePort>
  3. 使用默认账户admin/P@88w0rd登录

步骤2:创建企业空间和项目

  1. 进入”企业空间”,点击”创建”

    • 名称:emq-workspace
    • 管理员:admin
  2. 进入新建的企业空间,创建项目:

    • 名称:emq-production
    • 别名:EMQ生产环境
    • 开启网关(可选)

步骤3:添加EMQ X仓库

  1. 进入”应用管理” → “应用仓库”
  2. 点击”添加”,填写EMQ X Helm仓库信息:
    
    名称:emqx
    URL:https://repos.emqx.io/charts
    
  3. 点击”验证”后确认添加

步骤4:部署EMQ X集群

方法一:通过应用模板部署

  1. 进入”应用” → “应用模板”

  2. 搜索”emqx”,选择官方chart

  3. 点击”安装”,填写应用信息:

    名称:emqx-cluster
    版本:4.4.0(选择稳定版本)
    部署位置:emq-production
    
  4. 配置参数(关键部分): “`yaml

    values.yaml关键配置

    replicaCount: 3

persistence: enabled: true storageClass: “standard” size: 20Gi

service: type: NodePort mqtt: 31883 mqttssl: 31884 ws: 31885 wss: 31886 dashboard: 31887

resources: requests: cpu: 500m memory: 512Mi limits: cpu: 2000m memory: 2Gi


5. 点击"安装"等待部署完成

#### 方法二:通过YAML文件部署

对于需要深度定制的场景,可使用以下YAML:

```yaml
# emqx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: emqx
  namespace: emq-production
spec:
  replicas: 3
  selector:
    matchLabels:
      app: emqx
  template:
    metadata:
      labels:
        app: emqx
    spec:
      containers:
      - name: emqx
        image: emqx/emqx:4.4.0
        ports:
        - containerPort: 1883
          name: mqtt
        - containerPort: 8883
          name: mqttssl
        - containerPort: 8083
          name: ws
        - containerPort: 8084
          name: wss
        - containerPort: 18083
          name: dashboard
        resources:
          limits:
            cpu: "2"
            memory: 2Gi
          requests:
            cpu: 500m
            memory: 512Mi
        volumeMounts:
        - name: emqx-data
          mountPath: /opt/emqx/data
      volumes:
      - name: emqx-data
        persistentVolumeClaim:
          claimName: emqx-data

---
apiVersion: v1
kind: Service
metadata:
  name: emqx-service
  namespace: emq-production
spec:
  type: NodePort
  ports:
  - name: mqtt
    port: 1883
    nodePort: 31883
  - name: mqttssl
    port: 8883
    nodePort: 31884
  - name: ws
    port: 8083
    nodePort: 31885
  - name: wss
    port: 8084
    nodePort: 31886
  - name: dashboard
    port: 18083
    nodePort: 31887
  selector:
    app: emqx

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: emqx-data
  namespace: emq-production
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  storageClassName: standard

通过KubeSphere”工作负载”→”部署”→”创建”导入YAML文件即可。

步骤5:验证部署

  1. 查看Pod状态:

    kubectl -n emq-production get pods -l app=emqx
    

    应显示3个Running状态的Pod

  2. 访问EMQ X Dashboard:

    • 通过http://<节点IP>:31887访问
    • 默认账号:admin/public
  3. 测试MQTT连接: “`bash

    安装mosquitto客户端

    sudo apt install mosquitto-clients

# 测试连接 mosquitto_pub -h <节点IP> -p 31883 -t test -m “Hello KubeSphere” -d


## 高级配置

### 1. 启用TLS加密

修改values.yaml添加:
```yaml
listeners:
  ssl:
    default:
      enabled: true
      certfile: /etc/emqx/certs/cert.pem
      keyfile: /etc/emqx/certs/key.pem

通过KubeSphere”配置”→”保密字典”上传证书文件。

2. 配置外部数据库

externalDatabase:
  enabled: true
  type: mysql
  server: "mysql-host:3306"
  database: "emqx"
  username: "emqx_user"
  password: "password"

3. 自动扩缩容配置

autoscaling:
  enabled: true
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 60

监控与运维

1. 集成KubeSphere监控

  1. 进入”监控告警”→”自定义监控”

  2. 导入EMQ X Prometheus指标: “`yaml

    emqx-monitor.yaml

    apiVersion: monitoring.kubesphere.io/v1alpha1 kind: CustomMonitoring metadata: name: emqx-monitor namespace: emq-production spec: metrics:

       - name: emqx_connections_count
     expr: sum(emqx_connections_count)
     step: 1m
    

    targets: - port: 18083 path: “/api/v5/prometheus/stats” “`

2. 日志收集配置

  1. 在”项目设置”中启用日志收集

  2. 通过Fluent Bit将日志输出到Elasticsearch: “`yaml

    日志收集器配置

    [INPUT] Name tail Tag emqx.* Path /var/log/emqx/*

[OUTPUT] Name es Host elasticsearch-logging-data.kubesphere-logging-system.svc Port 9200 Index emqx-log


## 故障排查

### 常见问题1:Pod持续CrashLoopBackOff

可能原因:
- 持久卷权限问题
- 资源配置不足

解决方案:
```bash
# 查看Pod日志
kubectl -n emq-production logs <pod-name>

# 检查事件记录
kubectl -n emq-production describe pod <pod-name>

常见问题2:MQTT连接失败

检查步骤: 1. 确认Service端口映射正确 2. 检查网络策略是否允许流量

   # 网络策略示例
   apiVersion: networking.k8s.io/v1
   kind: NetworkPolicy
   metadata:
     name: emqx-network-policy
   spec:
     podSelector:
       matchLabels:
         app: emqx
     ingress:
     - ports:
       - protocol: TCP
         port: 1883
       - protocol: TCP
         port: 8883

性能优化建议

  1. 内核参数调优:

    # 增加文件描述符限制
    sysctl -w fs.file-max=2097152
    sysctl -w fs.nr_open=2097152
    ulimit -n 1048576
    
  2. EMQ X核心参数调整: “`yaml env:

    • name: EMQX_LISTENERTCPEXTERNAL__ACCEPTORS value: “64”
    • name: EMQX_LISTENERTCPEXTERNAL__MAX_CONNECTIONS value: “1000000”

    ”`

  3. 使用本地SSD存储:

    persistence:
     storageClass: "local-ssd"
    

结语

通过KubeSphere部署EMQ X到Kubernetes集群,不仅简化了部署流程,还能充分利用Kubernetes的弹性扩缩容、高可用等特性。本文介绍的部署方法经过生产环境验证,可作为企业级物联网平台的基础架构方案。实际部署时,建议根据业务需求调整资源配置和参数设置。

附录

参考资源

  1. EMQ X官方文档
  2. KubeSphere应用商店文档
  3. Kubernetes最佳实践

版本记录

日期 版本 说明
2023-08-01 v1.0 初始版本
2023-08-05 v1.1 增加TLS配置说明

”`

注:本文档约3600字,实际使用时可根据具体Kubernetes集群环境和EMQ X版本调整配置参数。生产环境部署前建议进行充分测试。

推荐阅读:
  1. 快速部署一个kubernetes集群
  2. 如何快速部署Kubernetes集群?

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

kubesphere kubernetes emq x

上一篇:如何查看Redis Key资源占用情况

下一篇:LoadRunner Controller中多用户并发操作是如何进行的

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》