k8s安装rocketmq5.3.0
创建YAML文件定义Deployment和Service,设置副本数、资源限制及服务暴露方式(ClusterIP或NodePort)。确认Kubernetes集群正常运行,具备足够的资源(CPU、内存、存储)部署RocketMQ 5.3.0。检查存储类(StorageClass)是否支持动态卷供应,RocketMQ的NameServer和Broker需要持久化存储。测试NameServer和Bro
安装前准备
确认Kubernetes集群正常运行,具备足够的资源(CPU、内存、存储)部署RocketMQ 5.3.0。确保kubectl和helm工具已安装并配置好集群访问权限。
检查存储类(StorageClass)是否支持动态卷供应,RocketMQ的NameServer和Broker需要持久化存储。若需自定义存储类,提前创建。
部署NameServer
RocketMQ 5.3.0的NameServer是无状态服务,可通过Deployment部署。创建YAML文件定义Deployment和Service,设置副本数、资源限制及服务暴露方式(ClusterIP或NodePort)。
配置健康检查(livenessProbe和readinessProbe),确保NameServer稳定运行。通过环境变量调整JVM参数,优化内存分配。
部署Broker集群
Broker是RocketMQ的核心组件,需持久化存储。使用StatefulSet部署Broker,确保Pod名称和存储卷稳定。配置PVC模板,动态申请持久化卷。
设置Broker角色(Master/Slave)和集群模式。通过环境变量或配置文件指定NameServer地址、Broker名称及集群名称。调整Broker参数如刷盘策略、消息存储路径。
配置控制台(Dashboard)
部署RocketMQ Dashboard用于监控和管理。通过Deployment暴露服务,配置Ingress或NodePort访问。在Dashboard配置中指定NameServer地址,确保能正确连接集群。
网络与访问配置
根据需求选择服务暴露方式。内部访问使用ClusterIP,外部访问通过NodePort或Ingress。配置网络策略,限制不必要的访问。
若需跨命名空间访问,确保DNS解析正确。测试NameServer和Broker的连通性,验证消息发送和接收功能。
监控与日志收集
集成Prometheus和Grafana监控RocketMQ指标,配置告警规则。部署日志收集工具(如EFK),集中管理Broker和NameServer日志。
调整日志级别和输出路径,便于故障排查。定期检查监控数据,优化集群性能。
验证与测试
使用RocketMQ提供的命令行工具测试消息生产与消费。验证集群高可用性,模拟节点故障,观察自动恢复情况。
测试持久化功能,确保消息不丢失。通过Dashboard检查各项指标,确认集群运行状态正常。
# 离线安装、安装在k8sworker01节点
cat rocketmq-deployment.yaml
apiVersion: v1
kind: Namespace
metadata:
name: rocketmq
---
################################
# RocketMQ NameServer
################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: rocketmq-nameserver
namespace: rocketmq
spec:
replicas: 1
selector:
matchLabels:
app: rocketmq-nameserver
template:
metadata:
labels:
app: rocketmq-nameserver
spec:
nodeSelector:
kubernetes.io/hostname: k8sworker01
containers:
- name: namesrv
image: sealos.hub:5000/repo/eclipse-temurin:17-jdk
imagePullPolicy: IfNotPresent
workingDir: /rocketmq
command:
- sh
- -c
- |
exec ./bin/mqnamesrv
ports:
- containerPort: 9876
volumeMounts:
- name: rocketmq-home
mountPath: /rocketmq
volumes:
- name: rocketmq-home
hostPath:
path: /root/rocketmq/rocketmq-all-5.3.0-bin-release
type: Directory
---
apiVersion: v1
kind: Service
metadata:
name: rocketmq-nameserver
namespace: rocketmq
spec:
selector:
app: rocketmq-nameserver
ports:
- name: remoting
port: 9876
targetPort: 9876
type: ClusterIP
---
################################
# RocketMQ Broker
################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: rocketmq-broker
namespace: rocketmq
spec:
replicas: 1
selector:
matchLabels:
app: rocketmq-broker
template:
metadata:
labels:
app: rocketmq-broker
spec:
nodeSelector:
kubernetes.io/hostname: k8sworker01
containers:
- name: broker
image: sealos.hub:5000/repo/eclipse-temurin:17-jdk
imagePullPolicy: IfNotPresent
workingDir: /rocketmq
env:
- name: JAVA_OPT_EXT
value: "-Xms512m -Xmx512m -XX:MaxDirectMemorySize=256m"
command:
- sh
- -c
- |
exec ./bin/mqbroker -n rocketmq-nameserver:9876
ports:
- containerPort: 10911
- containerPort: 10909
volumeMounts:
- name: rocketmq-home
mountPath: /rocketmq
volumes:
- name: rocketmq-home
hostPath:
path: /root/rocketmq/rocketmq-all-5.3.0-bin-release
type: Directory
---
apiVersion: v1
kind: Service
metadata:
name: rocketmq-broker
namespace: rocketmq
spec:
selector:
app: rocketmq-broker
ports:
- name: broker
port: 10911
targetPort: 10911
type: ClusterIP
---
################################
# RocketMQ Proxy
################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: rocketmq-proxy
namespace: rocketmq
spec:
replicas: 1
selector:
matchLabels:
app: rocketmq-proxy
template:
metadata:
labels:
app: rocketmq-proxy
spec:
nodeSelector:
kubernetes.io/hostname: k8sworker01
containers:
- name: proxy
image: sealos.hub:5000/repo/eclipse-temurin:17-jdk
imagePullPolicy: IfNotPresent
workingDir: /rocketmq
command:
- sh
- -c
- |
exec ./bin/mqproxy -n rocketmq-nameserver:9876
ports:
- containerPort: 8081
volumeMounts:
- name: rocketmq-home
mountPath: /rocketmq
volumes:
- name: rocketmq-home
hostPath:
path: /root/rocketmq/rocketmq-all-5.3.0-bin-release
type: Directory
---
apiVersion: v1
kind: Service
metadata:
name: rocketmq-proxy
namespace: rocketmq
spec:
selector:
app: rocketmq-proxy
ports:
- name: grpc
port: 8081
targetPort: 8081
nodePort: 32081
type: NodePort
---
################################
# RocketMQ Dashboard
################################
apiVersion: apps/v1
kind: Deployment
metadata:
name: rocketmq-dashboard
namespace: rocketmq
spec:
replicas: 1
selector:
matchLabels:
app: rocketmq-dashboard
template:
metadata:
labels:
app: rocketmq-dashboard
spec:
nodeSelector:
kubernetes.io/hostname: k8sworker01
containers:
- name: dashboard
image: sealos.hub:5000/apacherocketmq/rocketmq-dashboard:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8082
env:
- name: "NAMESRV_ADDR"
value: "rocketmq-nameserver:9876"
- name: "JAVA_OPT_EXT"
value: "-Xms256m -Xmx256m"
---
apiVersion: v1
kind: Service
metadata:
name: rocketmq-dashboard
namespace: rocketmq
spec:
selector:
app: rocketmq-dashboard
ports:
- name: http
port: 8082
targetPort: 8082
nodePort: 32080
type: NodePort
不过我指定了安装到k8sworker01,各位自己甄别不一定适合自己
更多推荐

所有评论(0)