您好,登录后才能下订单哦!
# 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
注:生产环境建议参考官方安装文档进行定制化安装
kubectl get svc -n kubesphere-system获取ks-console服务NodePorthttp://<节点IP>:<NodePort>admin/P@88w0rd登录进入”企业空间”,点击”创建”
进入新建的企业空间,创建项目:
名称:emqx
URL:https://repos.emqx.io/charts
进入”应用” → “应用模板”
搜索”emqx”,选择官方chart
点击”安装”,填写应用信息:
名称:emqx-cluster
版本:4.4.0(选择稳定版本)
部署位置:emq-production
配置参数(关键部分): “`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文件即可。
查看Pod状态:
kubectl -n emq-production get pods -l app=emqx
应显示3个Running状态的Pod
访问EMQ X Dashboard:
http://<节点IP>:31887访问测试MQTT连接: “`bash
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”配置”→”保密字典”上传证书文件。
externalDatabase:
  enabled: true
  type: mysql
  server: "mysql-host:3306"
  database: "emqx"
  username: "emqx_user"
  password: "password"
autoscaling:
  enabled: true
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 60
进入”监控告警”→”自定义监控”
导入EMQ X Prometheus指标: “`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” “`
在”项目设置”中启用日志收集
通过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>
检查步骤: 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
内核参数调优:
# 增加文件描述符限制
sysctl -w fs.file-max=2097152
sysctl -w fs.nr_open=2097152
ulimit -n 1048576
EMQ X核心参数调整: “`yaml env:
”`
使用本地SSD存储:
persistence:
 storageClass: "local-ssd"
通过KubeSphere部署EMQ X到Kubernetes集群,不仅简化了部署流程,还能充分利用Kubernetes的弹性扩缩容、高可用等特性。本文介绍的部署方法经过生产环境验证,可作为企业级物联网平台的基础架构方案。实际部署时,建议根据业务需求调整资源配置和参数设置。
| 日期 | 版本 | 说明 | 
|---|---|---|
| 2023-08-01 | v1.0 | 初始版本 | 
| 2023-08-05 | v1.1 | 增加TLS配置说明 | 
”`
注:本文档约3600字,实际使用时可根据具体Kubernetes集群环境和EMQ X版本调整配置参数。生产环境部署前建议进行充分测试。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。