步骤
单机版只需要部署一个nameserver,一个broker,一个dashboard即可。需要先部署nameserver,然后再部署broker和dashboard,因为需要调用nameserver的svc。版本为rocketmq:4.9.4
。
创建nameserver
vim nameserver.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: rocketmqnamesrv
name: rocketmqnamesrv
spec:
type: ClusterIP
ports:
- port: 9876
targetPort: 9876
name: namesrvport
selector:
app: rocketmqnamesrv
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: rocketmqnamesrv
spec:
serviceName: rocketmqnamesrv
replicas: 1
selector:
matchLabels:
app: rocketmqnamesrv
template:
metadata:
labels:
app: rocketmqnamesrv
spec:
containers:
- name: rocketmqnamesrv
image: apache/rocketmq:4.9.4
imagePullPolicy: IfNotPresent
env:
- name: TZ
value: Asia/Shanghai
- name: JAVA_OPT_EXT
value: "-Duser.home=/home/rocketmq -Xms512M -Xmx512M -Xmn128m"
command: ["sh","/home/rocketmq/rocketmq-4.9.4/bin/mqnamesrv"]
readinessProbe:
tcpSocket:
port: 9876
initialDelaySeconds: 15
timeoutSeconds: 5
periodSeconds: 20
k apply -f nameserver.yaml
创建configmap
namesrvAddr需要根据环境进行修改。
vim broker.conf
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr= rocketmqnamesrv:9876
k create configmap rocketmqbroker --from-file=broker.conf
创建broker
vim broker.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: mqbroker
name: mqbroker
spec:
type: ClusterIP
ports:
- port: 10911
targetPort: 10911
name: broker-port
selector:
app: mqbroker
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: rocketmqbroker
spec:
serviceName: rocketmqbroker
replicas: 1
selector:
matchLabels:
app: rocketmqbroker
template:
metadata:
labels:
app: rocketmqbroker
spec:
securityContext:
fsGroup: 3000
containers:
- name: rocketmqbroker
image: apache/rocketmq:4.9.4
env:
- name: TZ
value: Asia/Shanghai
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: JAVA_OPT_EXT
value: "-Xms4096M -Xmx4096M -Xmn1024m -XX:ParallelGCThreads=2"
- name: NAMESRV_ADDR
value: rocketmqnamesrv:9876
command: ["sh","/home/rocketmq/rocketmq-4.9.4/bin/mqbroker","-n","rocketmqnamesrv:9876","-c","/home/rocketmq/rocketmq-4.9.4/conf/broker.conf"]
imagePullPolicy: IfNotPresent
ports:
- containerPort: 10911
volumeMounts:
- mountPath: /home/rocketmq/rocketmq-4.9.4/conf/broker.conf
name: rocketmqbroker-config
subPath: broker.conf
##注意这里挂载的是store目录,而不是data目录,store目录才是真正的数据目录,不然做不了持久化
- mountPath: /home/rocketmq/store
name: rocketmqbroker-data
resources:
limits:
cpu: "2"
memory: 6Gi
requests:
cpu: "1"
memory: 4Gi
imagePullSecrets:
- name: registry-pull-secret
volumes:
- configMap:
defaultMode: 420
name: rocketmqbroker
name: rocketmqbroker-config
volumeClaimTemplates:
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rocketmqbroker-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: fast
volumeMode: Filesystem
k apply -f broker.yaml
部署dashboard
vim rocketmq-dashboard.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: rocketmq-dashboard
name: rocketmq-dashboard
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
name: port
selector:
app: rocketmq-dashboard
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: rocketmq-dashboard
spec:
replicas: 1
selector:
matchLabels:
app: rocketmq-dashboard
template:
metadata:
labels:
app: rocketmq-dashboard
spec:
containers:
- name: rocketmq-dashboard
image: apacherocketmq/rocketmq-dashboard
imagePullPolicy: IfNotPresent
env:
- name: TZ
value: Asia/Shanghai
- name: JAVA_OPTS
value: "-Drocketmq.namesrv.addr=rocketmqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
k apply -f rocketmq-dashboard.yaml
查看部署情况
k get po,svc | grep rocketmq
验证
先登录dashboard,查看消息。
生成消息
k exec -it rocketmqbroker-0 -- bash
pwd # /home/rocketmq/rocketmq-4.9.4/bin
./tools.sh org.apache.rocketmq.example.quickstart.Producer
消费消息
./tools.sh org.apache.rocketmq.example.quickstart.Consumer
查看dashboard,生产和消费消息变为了1000。
验证成功。