您好,登录后才能下订单哦!
# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。