搜索
您的当前位置:首页K8S部署rocketmq单机和集群

K8S部署rocketmq单机和集群

来源:乌哈旅游

版本

K8S版本:v21.5
rocketmq:v4.8.0

Rocketmq介绍

RocketMQ 是阿里巴巴开源的分布式消息中间件。支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。它里面有几个区别于标准消息中件间的概念,如 Group、 Topic、 Queue等。系统组成则由 Producer、 Consumer、 Broker、 NameServer 等。
RocketMQ 特点
是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式等特点Producer、 Consumer、队列都可以分布式
Producer 向一些队列轮流发送消息,队列集合称为 Topic, Consumer 如果做广播消费,则
一个 Consumer 实例消费这个 Topic 对应的所有队列 ,如果做集群消费 ,则多个Consumer 实例平均消费这个 Topic 对应的队列集合
能够保证严格的消息顺序
支持拉(pull)和推(push)两种消息模式
高效的订阅者水平扩展能力
实时的消息订阅机制
亿级消息堆积能力
支持多种消息协议,如 JMS、 OpenMessaging 等
较少的依赖

RocketMQ 的核心概念

消息队列 RocketMQ 在任何一个环境都是可扩展的,生产者必须是一个集群,消息服务器必须是一个集群,消费者也同样。集群级别的高可用,是消息队列 RocketMQ 跟其他的消息服务器的主要区别,消息生产者发送一条消息到消息服务器,消息服务器会随机的选择一个消费者,只要这个消费者消费成功就认为是成功了。
注意: 文中所提及的消息队列 RocketMQ 的服务端或者服务器包含 Name Server、Broker 等。服务端不等同于 Broker。

2.1、Topic、 Queue、 tags

RocketMQ 的 Topic/Queue 和 JMS 中的 Topic/Queue 概念有一定的差异, JMS 中所有消费者都会消费一个 Topic 消息的副本,而 Queue 中消息只会被一个消费者消费;但到了RocketMQ 中 Topic 只代表普通的消息队列,而 Queue 是组成 Topic 的更小单元。
• topic: 表示消息的第一级类型,比如一个电商系统的消息可以分为:交易消息、物流消息… 一条消息必须有一个 Topic。
• Queue:主题被划分为一个或多个子主题,称为“message queues”。一个topic 下,我们可以设置多个 queue(消息队列)。当我们发送消息时,需要要
指定该消息的 topic。 RocketMQ 会轮询该 topic 下的所有队列,将消息发送出去。
定义: Queue 是 Topic 在一个 Broker 上的分片,在分片基础上再等分为若干份(可指定份数)后的其中一份,是负载均衡过程中资源分配的基本单元。
集群消费模式下一个消费者只消费该 Topic 中部分 Queue 中的消息,当一个消费者开启广播模式时则会消费该 Topic 下所有 Queue 中的消息。先看一张有关 Topic 和 Queue 的关系图:

2.2、Producer 与 Producer Group

Producer表示消息队列的生产者。消息队列的本质就是实现了publish-subscribe模式,生产者生产消息,消费者消费消息。所以这里的 Producer 就是用来生产和发送消息的,一般指业务系统。 RocketMQ 提供了发送:普通消息(同步、异步和单向(one-way)消息)、
定时消息、延时消息、事务消息。见 1.2 消息类型章节Producer Group 是一类 Producer 的集合名称,这类 Producer 通常发送一类消息,且发
送逻辑一致。相同角色的生产者被分组在一起。同一生产者组的另一个生产者实例可能被broker 联系,以提交或回滚事务,以防原始生产者在交易后崩溃。
警告:考虑提供的生产者在发送消息时足够强大,每个生产者组只允许一个实例,以避免对生产者实例进行不必要的初始化。

2.3、Consumer 与 Consumer Group

2.4、组件的关系

1.Broker, Producer 和 Consumer

如果不考虑负载均衡和高可用,最简单的 Broker, Producer 和 Consumer 之间的关系如下
图所示:

2、Topic, Topic 分片和 Queue

Queue 是 RocketMQ 中的另一个重要概念。在对该概念进行分析介绍前,我们先来看上
面的这张图:

3、queue 数量指定方式

1、代码指定: producer.setDefaultTopicQueueNums(8);
2、配置文件指定
同时设置 broker 服务器的配置文件 broker.properties: defaultTopicQueueNums=16
3、 rocket-console 控制台指定

3、部署时知识简要说明

4、单机版部署

这里我们希望使用单机版 k8s 部署一套低配置 rockerMQ, 仅启动一个 nameservice 和 1 个broker

4.1、镜像制作过程

wget https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.8.0/rocketmq-all-4.8.0-binrelease.zip
由于 ADD 指令只能解压 tar 包,所以这里将 zip 包调整为 tar 包
unzip rocketmq-all-4.8.0-bin-release.zip
[root@k8s-master01 rocketmq_image]# ll
total 13564
-rw-r–r-- 1 root rootdrwxr-xr-x 6 root root 339 Feb 2 11:52 Dockerfile103 Dec 9 19:46 rocketmq-all-4.8.0-bin-release
-rw-r–r-- 1 root root 13881969 Dec 19 19:54 rocketmq-all-4.8.0-bin-release.zip
将 runbroker.sh 脚本文件里的内存设置调整小点
[root@k8s-master01release/bin/runbroker.sh rocketmq_image]# vim rocketmq-all-4.8.0-bin


JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"


[root@k8s-master01 rocketmq_image]# tar -zvcf rocketmq-all-4.8.0-bin-release.tar.gz
rocketmq-all-4.8.0-bin-release
[root@k8s-master01 rocketmq_image]# rm -rf rocketmq-all-4.8.0-bin-release rocketmqall-4.8.0-bin-release.zip
Dockerfile 镜像文件内容:

FROM centos:centos8.3.2011
 
RUN rm -f /etc/localtime \
&& ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone
 
ENV LANG en_US.UTF-8
 
ADD jdk-8u301-linux-x64.tar.gz /usr/java/
ADD rocketmq-all-4.8.0-bin-release.tar.gz /usr/local/
RUN mv /usr/local/rocketmq-all-4.8.0-bin-release /usr/local/rocketmq-4.8.0 \
&& mkdir -p /data/rocketmq/store

#jdk enviroment
ENV JAVA_HOME=/usr/java/jdk1.8.0_301
ENV JRE_HOME=/usr/java/jdk1.8.0_301/jre
ENV CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
ENV PATH=/usr/local/rocketmq-4.8.0/bin:$JAVA_HOME/bin:$PATH
 
CMD ["/bin/bash"]

制作镜像并上传到 docker Hub 仓库
[root@k8s-master01 images]# docker build -t liuyi71sinacom/rocketmq-4.8.0 .
[root@k8s-master01 images]# docker push liuyi71sinacom/rocketmq-4.8.0

4.2、yaml编写

1、namesrv

apiVersion: v1
kind: Service
metadata:
  name: rocketmq
spec:
  ports:
  - port: 9876
    protocol: TCP
    targetPort: 9876
  selector:
    app: mqnamesrv
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mqnamesrv
spec:
  serviceName: mqnamesrv
  replicas: 1
  selector:
    matchLabels:
      app: mqnamesrv
  template:
    metadata:
      labels:
        app: mqnamesrv
    spec:
      containers:
      - name: mqnamesrv
        image: liuyi71sinacom/rocketmq-4.8.0
        command: ["sh","/usr/local/rocketmq-4.8.0/bin/mqnamesrv"]
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 9876
          protocol: TCP

这个yaml会创建一个名字为rocketmq为svc和名字为mqnamesrv的sts的namesrv
我这里创建一个单机版的命名空间来做单机版

kubectl create ns single

切换到这个命名空间下面

kubectl config set-context --current --namespace=single

然后执行这个yaml

2、broker yaml定义

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mqbroker
spec:
  serviceName: mqbroker
  replicas: 1
  selector:
    matchLabels:
      app: mqbroker
  template:
    metadata:
      labels:
        app: mqbroker
    spec:
      containers:
      - name: mqbroker
        image: liuyi71sinacom/rocketmq-4.8.0
        command: ["sh","/usr/local/rocketmq-4.8.0/bin/mqbroker", "-n","rocketmq:9876"]
        imagePullPolicy: IfNotPresent
        env:
        - name: JAVA_OPT
          value: "-server -XX:ParallelGCThreads=1 -Xms1g -Xmx1g -Xmn512m"
          #value: "-XX:MaxRAMPercentage=80.0"
        ports:
        - containerPort: 10909
        - containerPort: 10911
        resources:
          requests:
            memory: 128Mi
#          limits:
#            memory: 1024Mi

3、console yaml定义

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: console
  name: console
spec:
  replicas: 1
  selector:
    matchLabels:
      app: console
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: console
    spec:
      containers:
      - image: styletang/rocketmq-console-ng
        name: rocketmq-console-ng
        env: 
        - name: JAVA_OPTS
          value: "-Drocketmq.namesrv.addr=rocketmq:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
        resources: {}
status: {}
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: console
  name: console
spec:
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: console
status:
  loadBalancer: {}

4、创建一个ingress来访问

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: rocketmq
spec:
 ingressClassName: nginx
 rules:
 - host: bml.mq.com
   http:
     paths:
     - path: /
       backend:
         serviceName: console
         servicePort: 8080
   

然后我们在windows的hosts中配置了bml.mq.com对应的ingress svc的ip就可以访问了

5、简单测试使用

在发送/接收消息之前,我们需要告诉客户名称服务器的位置。 RocketMQ 提供了多种方法来实现这一点。为了简单起见,我们使用环境变量 NAMESRV_ADDR。通过使用 bin/tools.sh工具类,实现测试发送消息。命令行操作如下:
进入 mqbroker

kubectl exec -it mqbroker-0 -- sh
export NAMESRV_ADDR=rocketmq:9876
echo $NAMESRV_ADDR
cd /usr/local/rocketmq-4.8.0/bin/

执行生产者 Producer 发送测试消息

sh ./tools.sh org.apache.rocketmq.example.quickstart.Producer
 export NAMESRV_ADDR= rocketmq:9876
echo $NAMESRV_ADDR
cd /usr/local/rocketmq-4.8.0/bin/

执行消费者 Consumer 消费测试消息

sh ./tools.sh org.apache.rocketmq.example.quickstart.Consumer

如果消费成功,我们会看到大量成功的消费日志。

通过日志可以看到消息被消费了,我们再通过console来看下

到现在单机版安装部署验证完成

5、常用 rocketmq 命令

./mqadmin clusterList -n rocketmq:9876

#查看 broker 状态

./mqadmin brokerStatus -n rocketmq:9876 -b 172.19.152.208:10911(注意换成你的 broker 地址)

#查看 topic 列表

./mqadmin topicList -n 1 rocketmq:9876

#查看 topic 状态

./mqadmin topicStatus -n rocketmq:9876 -t MyTopic(换成你想查询的 topic)

#查看 topic 路由

./mqadmin topicRoute -n rocketmq:9876 -t MyTopic

6、集群部署

在生产环境下,必须搭建 RocketMQ 高可用集群, 对高性能有比较强的诉求,使用两主两从, 同步模式。

切回命名空间default

kubectl config set-context --current --namespace=default

6.1、部署描述

6.2、使用 NFS 配置 StatefulSet 的动态持久化存储

StatefulSet 使用 volumeClaimTemplates使用 NFS 作为 StatefulSet 持久化存储的操作记录,分别需要创建 nfs-provisioner 的 rbac、storageclass、 nfs-client-provisioner 和 statefulset 的 pod。

6.3、创建 RocketMQ 集群(双主双从异步模式)

使用镜像 rocketmq-4.8.0
使用 Statefulset 部署每一个组件。

rw-r--r-- 1 root root 2437 Jan 19 21:16 broker-a-s.yaml
-rw-r--r-- 1 root root 2317 Jan 19 21:16 broker-a.yaml
-rw-r--r-- 1 root root 2436 Jan 19 21:16 broker-b-s.yaml
-rw-r--r-- 1 root root 2317 Jan 19 21:16 broker-b.yaml
drwxr-xr-x 2 root root  118 Jan 19 21:16 config
-rw-r--r-- 1 root root 1644 Jan 19 21:16 namesrv.yaml
[root@k8s-master cluster]# 

config里面是配置文件,如下:

-rw-r--r-- 1 root root 409 Jan 19 21:16 broker-a.properties 主1配置文件
-rw-r--r-- 1 root root 432 Jan 19 21:16 broker-a-s.properties 从1配置文件
-rw-r--r-- 1 root root 433 Jan 19 21:16 broker-b.properties 主2配置文件
-rw-r--r-- 1 root root 432 Jan 19 21:16 broker-b-s.properties 从2配置文件
[root@k8s-master config]# 

6.4、配置文件详情

1、broker-a.properties 配置文件

brokerClusterName=rocketmq-cluster
brokerName=broker-a
brokerId=0
namesrvAddr=rocketmq-0.rocketmq:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=20911
deleteWhen=04
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
diskMaxUsedSpaceRatio=88
storePathRootDir=/data/rocketmq/store
maxMessageSize=65536
brokerRole=MASTER

2、broker-a-s.properties配置文件

brokerClusterName=rocketmq-cluster
brokerName=broker-a
brokerId=1
namesrvAddr=rocketmq-0.rocketmq:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=20911
deleteWhen=04
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
diskMaxUsedSpaceRatio=88
storePathRootDir=/data/rocketmq/store
maxMessageSize=65536
brokerRole=SLAVE
flushDiskType=SYNC_FLUSH

3、broker-b.properties 配置文件

brokerClusterName=rocketmq-cluster
brokerName=broker-b
brokerId=0
namesrvAddr=rocketmq-0.rocketmq:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=20911
deleteWhen=04
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
diskMaxUsedSpaceRatio=88
storePathRootDir=/data/rocketmq/store
maxMessageSize=65536
brokerRole=MASTER
flushDiskType=SYNC_FLUSH

3、broker-b-s.properties 配置文件

brokerClusterName=rocketmq-cluster
brokerName=broker-b
brokerId=1
namesrvAddr=rocketmq-0.rocketmq:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=20911
deleteWhen=04
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
diskMaxUsedSpaceRatio=88
storePathRootDir=/data/rocketmq/store
maxMessageSize=65536
brokerRole=SLAVE
flushDiskType=SYNC_FLUSH

6.5、准备配置文件,创建 configmap

RocketMQ 默认提供的配置文件都是最基本的,很多配置都是默认值,在生产环境中我们需要根据实际情况进行修改。
broker 的端口是 20911、 nameserver 的端口是 9876
依据上面 rocketmq 的 4 个配置文件创建 configmap 存储卷

kubectl create cm rocketmq-config --from-file=broker-a.properties --from-file=broker-a-s.properties --from-file=broker-b.properties --from-file=broker-b-s.properties 

查看cm rocketmq-config:

6.6、namesrv安装

apiVersion: v1
kind: Service
metadata:
  labels:
    app: mq-namesrv
  name: rocketmq
spec:
  ports:
  - port: 9876
    targetPort: 9876
    name: namesrv-port
  selector:
    app: mq-namesrv
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: rocketmq
spec:
  serviceName: rocketmq
  replicas: 1
  selector:
    matchLabels:
      app: mq-namesrv
  template:
    metadata:
     labels:
       app: mq-namesrv
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                      - mq-namesrv
              topologyKey: "kubernetes.io/hostname"
      containers:
      - name: mq-namesrv
        image: liuyi71sinacom/rocketmq-4.8.0
        imagePullPolicy: IfNotPresent
        command: ["sh","/usr/local/rocketmq-4.8.0/bin/mqnamesrv"]
        ports:
        - containerPort: 9876
          protocol: TCP
        env:
        - name: JAVA_OPT
          value: "-server -XX:ParallelGCThreads=1 -Xms1g -Xmx1g -Xmn512m"
          #value: "-XX:MaxRAMPercentage=80.0"
        lifecycle:
          postStart:
            exec:
              command: ["/bin/sh","-c","touch /tmp/health"]
        livenessProbe:
          exec:
            command: ["test","-e","/tmp/health"]
          initialDelaySeconds: 5
          timeoutSeconds: 5
          periodSeconds: 10
        readinessProbe:
          tcpSocket:
            port: 9876
          initialDelaySeconds: 15
          timeoutSeconds: 5
          periodSeconds: 20

执行这个yaml

6.7、broker安装

1、主1配置文件

apiVersion: v1
kind: Service
metadata:
  labels:
    app: broker-a
  name: broker-a
spec:
  ports:
  - port: 20911
    targetPort: 20911
    name: broker-port
  selector:
    app: broker-a
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: broker-a
spec:
  serviceName: broker-a
  replicas: 1
  selector:
    matchLabels:
      app: broker-a
  template:
    metadata:
     labels:
       app: broker-a
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                      - broker-a
              topologyKey: "kubernetes.io/hostname"
      containers:
      - name: broker-a
        image: liuyi71sinacom/rocketmq-4.8.0
        imagePullPolicy: IfNotPresent
        command: ["sh","-c","mqbroker  -c /usr/local/rocketmq-4.8.0/conf/broker-a.properties"]
        env:
        - name: JAVA_OPT
          value: "-server -XX:ParallelGCThreads=1 -Xms1g -Xmx1g -Xmn512m"
          #value: "-XX:MaxRAMPercentage=80.0"
        volumeMounts:
          - mountPath: /root/logs
            name: rocketmq-data
            subPath: mq-brokeroptlogs
          - mountPath: /data/rocketmq
            name: rocketmq-data
            subPath: mq-brokeroptstore
          - name: broker-config
            mountPath: /usr/local/rocketmq-4.8.0/conf/broker-a.properties
            subPath: broker-a.properties
        lifecycle:
          postStart:
            exec:
              command: ["/bin/sh","-c","touch /tmp/health"]
        livenessProbe:
          exec:
            command: ["test","-e","/tmp/health"]
          initialDelaySeconds: 5
          timeoutSeconds: 5
          periodSeconds: 10
        readinessProbe:
          tcpSocket:
            port: 20911
          initialDelaySeconds: 15
          timeoutSeconds: 5
          periodSeconds: 20
      volumes:
      - name: broker-config
        configMap:
          name: rocketmq-config
  volumeClaimTemplates:
  - metadata:
      name: rocketmq-data
      annotations:
        volume.beta.kubernetes.io/storage-class: "nfs"
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi

2、从1配置文件

apiVersion: v1
kind: Service
metadata:
  labels:
    app: broker-a-s
  name: broker-a-s
spec:
  ports:
  - port: 20911
    targetPort: 20911
    name: broker-port
  selector:
    app: broker-a-s
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: broker-a-s
spec:
  serviceName: broker-a-s
  replicas: 1
  selector:
    matchLabels:
      app: broker-a-s
  template:
    metadata:
     labels:
       app: broker-a-s
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                      - broker-a-s
              topologyKey: "kubernetes.io/hostname"
      containers:
      - name: broker-a-s
        image: liuyi71sinacom/rocketmq-4.8.0
        imagePullPolicy: IfNotPresent
        command: ["sh","-c","mqbroker  -c /usr/local/rocketmq-4.8.0/conf/broker-a-s.properties"]
        env:
        - name: JAVA_OPT
          value: "-server -XX:ParallelGCThreads=1 -Xms1g -Xmx1g -Xmn512m"
          #value: "-XX:MaxRAMPercentage=80.0"
        volumeMounts:
          - mountPath: /root/logs
            name: rocketmq-data
            subPath: mq-brokeroptlogs
          - mountPath: /data/rocketmq
            name: rocketmq-data
            subPath: mq-brokeroptstore
          - name: broker-config
            mountPath: /usr/local/rocketmq-4.8.0/conf/broker-a-s.properties
            subPath: broker-a-s.properties
        lifecycle:
          postStart:
            exec:
              command: ["/bin/sh","-c","touch /tmp/health"]
        livenessProbe:
          exec:
            command: ["test","-e","/tmp/health"]
          initialDelaySeconds: 5
          timeoutSeconds: 5
          periodSeconds: 10
        readinessProbe:
          tcpSocket:
            port: 20911
          initialDelaySeconds: 15
          timeoutSeconds: 5
          periodSeconds: 20
      volumes:
      - name: broker-config
        configMap:
          name: rocketmq-config
          items:
          - key: broker-a-s.properties
            path: broker-a-s.
  volumeClaimTemplates:properties
  - metadata:
      name: rocketmq-data
      annotations:
        volume.beta.kubernetes.io/storage-class: "nfs"
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi

3、主2配置文件

apiVersion: v1
kind: Service
metadata:
  labels:
    app: broker-b
  name: broker-b
spec:
  ports:
  - port: 20911
    targetPort: 20911
    name: broker-port
  selector:
    app: broker-b
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: broker-b
spec:
  serviceName: broker-b
  replicas: 1
  selector:
    matchLabels:
      app: broker-b
  template:
    metadata:
     labels:
       app: broker-b
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                      - broker-b
              topologyKey: "kubernetes.io/hostname"
      containers:
      - name: broker-b
        image: liuyi71sinacom/rocketmq-4.8.0
        imagePullPolicy: IfNotPresent
        command: ["sh","-c","mqbroker  -c /usr/local/rocketmq-4.8.0/conf/broker-b.properties"]
        env:
        - name: JAVA_OPT
          value: "-server -XX:ParallelGCThreads=1 -Xms1g -Xmx1g -Xmn512m"
          #value: "-XX:MaxRAMPercentage=80.0"
        volumeMounts:
          - mountPath: /root/logs
            name: rocketmq-data
            subPath: mq-brokeroptlogs
          - mountPath: /data/rocketmq
            name: rocketmq-data
            subPath: mq-brokeroptstore
          - name: broker-config
            mountPath: /usr/local/rocketmq-4.8.0/conf/broker-b.properties
            subPath: broker-b.properties
        lifecycle:
          postStart:
            exec:
              command: ["/bin/sh","-c","touch /tmp/health"]
        livenessProbe:
          exec:
            command: ["test","-e","/tmp/health"]
          initialDelaySeconds: 5
          timeoutSeconds: 5
          periodSeconds: 10
        readinessProbe:
          tcpSocket:
            port: 20911
          initialDelaySeconds: 15
          timeoutSeconds: 5
          periodSeconds: 20
      volumes:
      - name: broker-config
        configMap:
          name: rocketmq-config
  volumeClaimTemplates:
  - metadata:
      name: rocketmq-data
      annotations:
        volume.beta.kubernetes.io/storage-class: "nfs"
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi

4、从2配置文件

apiVersion: v1
kind: Service
metadata:
  labels:
    app: broker-b-s
  name: broker-b-s
spec:
  ports:
  - port: 20911
    targetPort: 20911
    name: broker-port
  selector:
    app: broker-b-s
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: broker-b-s
spec:
  serviceName: broker-b-s
  replicas: 1
  selector:
    matchLabels:
      app: broker-b-s
  template:
    metadata:
     labels:
       app: broker-b-s
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                      - broker-b-s
              topologyKey: "kubernetes.io/hostname"
      containers:
      - name: broker-b-s
        image: liuyi71sinacom/rocketmq-4.8.0
        imagePullPolicy: IfNotPresent
        command: ["sh","-c","mqbroker -c /usr/local/rocketmq-4.8.0/conf/broker-b-s.properties"]
        env:
        - name: JAVA_OPT
          value: "-server -XX:ParallelGCThreads=1 -Xms1g -Xmx1g -Xmn512m"
          #value: "-XX:MaxRAMPercentage=80.0"
        volumeMounts:
          - mountPath: /root/logs
            name: rocketmq-data
            subPath: mq-brokeroptlogs
          - mountPath: /data/rocketmq
            name: rocketmq-data
            subPath: mq-brokeroptstore
          - name: broker-config
            mountPath: /usr/local/rocketmq-4.8.0/conf/broker-b-s.properties
            subPath: broker-b-s.properties
        lifecycle:
          postStart:
            exec:
              command: ["/bin/sh","-c","touch /tmp/health"]
        livenessProbe:
          exec:
            command: ["test","-e","/tmp/health"]
          initialDelaySeconds: 5
          timeoutSeconds: 5
          periodSeconds: 10
        readinessProbe:
          tcpSocket:
            port: 20911
          initialDelaySeconds: 15
          timeoutSeconds: 5
          periodSeconds: 20
      volumes:
      - name: broker-config
        configMap:
          name: rocketmq-config
          items:
          - key: broker-b-s.properties
            path: broker-b-s.properties
  volumeClaimTemplates:
  - metadata:
      name: rocketmq-data
      annotations:
        volume.beta.kubernetes.io/storage-class: "nfs"
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi

执行安装,安装成功以后如下:

我这电脑资源不够了,始终有一台起不来,但是安装过程是没有问题的,文件也是没有问题的,后面给电脑加点资源再测试
安装完成以后,把ingress和console安装了,和之前的一样,可以通过控制台来访问

第二天我把k8s加了内存过后,启动就正常了,如下图:

ocketmq-0是namesvr,然后我重新部署了console,console如下图:

至此,k8s部署rocketmq就完成了

安装文件

有道云笔记里面有附件,这里么有上传:
链接:http://note.youdao.com/noteshare?id=57071743fbef85caf401a04546e5157d&sub=D06D665CBE0D418196DE5F5024879401

因篇幅问题不能全部显示,请点此查看更多更全内容

Top