在Kubernetes中部署RocketMQ,并实现高可用,按照以下步骤进行操作。基本示例如下:
步骤 1: 准备工作
确保你的 Kubernetes 环境已经搭建
步骤 2: 创建 Namespace
首先,创建一个命名空间(Namespace),以便在其中部署 RocketMQ。
# namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: rocketmq
然后,使用以下命令创建该 Namespace:
kubectl apply -f namespace.yaml
步骤 3: 创建 ConfigMap
创建 RocketMQ 的配置文件,然后存储为 ConfigMap。
# rocketmq-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: rocketmq-config
namespace: rocketmq
data:
broker.properties: |
brokerClusterName=rocketmq-cluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
brokerIP1=broker-a
autoCreateTopicEnable=true
logback.xml: |
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.apache.rocketmq" level="INFO"/>
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
应用 ConfigMap:
kubectl apply -f rocketmq-configmap.yaml
步骤 4: 创建 StatefulSet
创建 RocketMQ 的 StatefulSet,确保持久化存储。
# rocketmq-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: rocketmq-broker
namespace: rocketmq
spec:
replicas: 3
serviceName: rocketmq-broker
selector:
matchLabels:
app: rocketmq-broker
template:
metadata:
labels:
app: rocketmq-broker
spec:
containers:
- name: rocketmq-broker
image: apache/rocketmq-broker:4.9.1
env:
- name: ROCKETMQ_HOME
value: /opt/rocketmq
ports:
- containerPort: 10911
- containerPort: 10909
volumeMounts:
- name: config-volume
mountPath: /opt/rocketmq/conf
- name: storage
mountPath: /opt/rocketmq/store
volumeClaimTemplates:
- metadata:
name: storage
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
volumeMounts:
- name: config-volume
mountPath: /opt/rocketmq/conf
应用 StatefulSet:
kubectl apply -f rocketmq-statefulset.yaml
步骤 5: 创建 Service
为 RocketMQ 创建一个 Headless Service。
# rocketmq-service.yaml
apiVersion: v1
kind: Service
metadata:
name: rocketmq-broker
namespace: rocketmq
spec:
clusterIP: None
ports:
- name: broker
port: 10911
- name: namesrv
port: 9876
selector:
app: rocketmq-broker
应用 Service:
kubectl apply -f rocketmq-service.yaml
现在,RocketMQ 在 Kubernetes 上已经成功部署,并且具有高可用性。
k8s实现rocketmq高可用
于 2024-04-10 00:00:41 首次发布