k8s的YAML部署rocketmq记录

news2024/11/24 18:51:46

说明

测试环境是k8s集群,在上边部署一套单节点的rocketmq

nameserver部署

Service和StatefulSet脚本如下

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

broker部署

部署broker,如果不挂盘存储数据的话,很简单。
不挂盘的server和StatefulSet配置如下:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: rocketmqbroker
  name: rocketmqbroker
spec:
  # type: NodePort
  type: ClusterIP
  ports:
  - port: 10911
    targetPort: 10911
    name: broker-port
  selector:
    app: rocketmqbroker
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: rocketmqbroker
spec:
  serviceName: rocketmqbroker
  replicas: 1
  selector:
    matchLabels:
      app: rocketmqbroker
  template:
    metadata:
      labels:
        app: rocketmqbroker
    spec:
      containers:
      - name: rocketmqbroker
        image: apache/rocketmq:4.9.4
        env:
          - name: TZ
            value: Asia/Shanghai
          - name: JAVA_OPT_EXT
            value: "-Xms512M -Xmx512M -Xmn128m"
          - name: NAMESRV_ADDR
            value: rocketmqnamesrv:9876
        command: ["sh","/home/rocketmq/rocketmq-4.9.4/bin/mqbroker","-n","rocketmqnamesrv:9876"]
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 10911
      imagePullSecrets:
      - name: registry-pull-secret

不挂盘,重启后数据会丢失,因此还是想挂盘存储数据,中间碰到了一些问题,简单记录如下:
由于docker镜像用的是公共镜像,是rocketmq:rocketmq启动的,volumeMounts挂载的硬盘没写权限,因此启动失败。可通过 fsGroup(指定卷的附加用户组 ID) 解决

spec:
      securityContext:
        fsGroup: 3000
      containers:

其中id需要进入控制台通过命令 id 查看,如下

[rocketmq@rocketmqnamesrv-0 bin]$ id
uid=3000(rocketmq) gid=3000(rocketmq) groups=3000(rocketmq)

最终挂盘的脚本如下:

 apiVersion: v1
kind: Service
metadata:
  labels:
    app: mqbroker
  name: mqbroker
spec:
  # type: NodePort
  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: "-Xms512M -Xmx512M -Xmn128m -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
        - mountPath: /home/rocketmq/data
          name: rocketmqbroker-data
        resources:
          limits:
            cpu: "2"
            memory: 2Gi
          requests:
            cpu: "1"
            memory: 2Gi
      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:
              - ReadWriteMany
              resources:
                requests:
                  storage: 100Gi
              storageClassName: alicloud-disk-ssd
              volumeMode: Filesystem


 

rocketmq-dashboard部署

apiVersion: v1
kind: Service
metadata:
  labels:
    app: rocketmq-dashboard
  name: rocketmq-dashboard
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
    name: port
    nodePort: 30809
  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

验证

进入broker控制台的rocketmq的bin目录(进入控制台后默认就在bin目录)
执行如下命令。
生产消息(会生成1000条消息,主题是):

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

成功显示内容如下:

ConsumeMessageThread_please_rename_unique_group_name_4_1 Receive New Messages: [MessageExt [brokerName=broker-a, queueId=0, storeSize=192, queueOffset=985, sysFlag=0, bornTimestamp=1658971129478, bornHost=/:57834, storeTimestamp=1658971129478, storeHost=/:10911, msgId=AC12050900002A9F00000000000B8AC8, commitLogOffset=756424, bodyCRC=74782942, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=1000, CONSUME_START_TIME=1658971252955, UNIQ_KEY=7F00000100F07852E9228B53DE8603AE, CLUSTER=DefaultCluster, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 57, 52, 50], transactionId='null'}]] 
ConsumeMessageThread_please_rename_unique_group_name_4_6 Receive New Messages: [MessageExt [brokerName=broker-a, queueId=0, storeSize=192, queueOffset=984, sysFlag=0, bornTimestamp=1658971129475, bornHost=/:57834, storeTimestamp=1658971129475, storeHost=/:10911, msgId=AC12050900002A9F00000000000B87C8, commitLogOffset=755656, bodyCRC=736192263, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=1000, CONSUME_START_TIME=1658971252955, UNIQ_KEY=7F00000100F07852E9228B53DE8303AA, CLUSTER=DefaultCluster, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 57, 51, 56], transactionId='null'}]] 

控制台界面

 其他问题
rocketmq启动脚本中有计算内存的逻辑,最终java的启动参数会设置内存为
-server -Xms8192M -Xmx8192M -Xmn1200M ,比分配给容器的内存大的多。虽然通过 JAVA_OPTS 重新设置了,但是挺不爽的。
还有就是brokerName,想用POD_NAME作为brokerName,配置文件中不支持${POD_NAME}
总结成一个YAML文件部署

apiVersion: v1
kind: Service
metadata:
  labels:
    app: rocketmqnamesrv
  name: rocketmqnamesrv
spec:
  type: ClusterIP
  ports:
  - port: 9876
    targetPort: 30011
    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



---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: rocketmqbroker
  name: rocketmqbroker
spec:
  # type: NodePort
  type: ClusterIP
  ports:
  - port: 10911
    targetPort: 30012
    name: broker-port
  selector:
    app: rocketmqbroker
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: rocketmqbroker
spec:
  serviceName: rocketmqbroker
  replicas: 1
  selector:
    matchLabels:
      app: rocketmqbroker
  template:
    metadata:
      labels:
        app: rocketmqbroker
    spec:
      containers:
      - name: rocketmqbroker
        image: apache/rocketmq:4.9.4
        env:
          - name: TZ
            value: Asia/Shanghai
          - name: JAVA_OPT_EXT
            value: "-Xms512M -Xmx512M -Xmn128m"
          - name: NAMESRV_ADDR
            value: rocketmqnamesrv:9876
        command: ["sh","/home/rocketmq/rocketmq-4.9.4/bin/mqbroker","-n","rocketmqnamesrv:9876"]
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 10911
      imagePullSecrets:
      - name: registry-pull-secret
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: rocketmq-dashboard
  name: rocketmq-dashboard
spec:
  type: NodePort
  ports:
  - port: 30015
    targetPort: 30013
    name: port
    nodePort: 30014
  selector:
    app: rocketmq-dashboard
---
apiVersion: apps/v1
kind: StatefulSet
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytorch深度学习【十四】

批量归一化 归一化 损失出现在最后,后面的层(高级语义层)训练较快数据输入在最底部 底部的层训练慢底部层一变化,所有高级语义层都得跟着变最后的那些层需要重新学习多次—收敛速度变慢 问题—是否可以在学习底部层的时候避免变化顶部层 批量归一化 固定…

8 个精彩的免费 G​​IS 软件资源分享

有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。 生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道,你要走的弯路就会越少。 GIS 软件有两种通用格式&a…

【面试题】2023年前端最新面试题-性能优化篇

原文见:语雀(https://www.yuque.com/deepstates/interview/xtt59x) ● 性能指标 ● 分析工具 ● 优化方式 ○ 加载 ○ 渲染 ● 专题优化 ○ 技术栈:react ○ 浏览器 ○ 打包工具:webpack ● 项目 ⭐️⭐️⭐️ 相关知…

如何隐藏电脑硬盘分区?

无论是个人还是公司的电脑我们都会储存一些重要的数据,有些甚至还是涉及个人隐私或公司的商业机密。为了更好地保护电脑磁盘中的重要资料,部分用户希望能将硬盘分区隐藏起来。那么怎么隐藏硬盘分区呢?方法一:使用磁盘管理隐藏硬盘…

将vscode打造为你的开发工具的首选

文章目录前言vscode主要配置vscode的两个主要快捷键Java配置JDK和Gradle环境主要插件常见的配置launch.json配置运行测试用例常见问题Python主要插件settings.json配置Javascript/typescript常用插件settings.json样例Golang参考前言 什么是IDE? IDE 文本编辑 搜索 代码导…

Matlab矩阵和数组的操作

一、矩阵的建立 1、直接输入法 将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。 A [16 3 2 13; 5 10 11 8; … 9 6 7 12; 4 15 14 1] A 16 3 2 13 5 10 11 8 9 6…

如何有效的增加 shopee 的流量?

很多卖家选择在跨境电商平台开店。说到跨境电商,大家首先想到的应该是亚马逊、易趣等电商平台,边肖会在shopee平台上给大家带来店铺。新店如何获得流量?有哪些方式?米贸搜为你整理如下:shopee店铺如何获取流量&#xf…

Python学习笔记——函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。能提高应用的模块性,和代码的重复利用率。定义函数定义函数使用关键字def,后接函数名,再后接放在圆括号()中的可选…

P1036 [NOIP2002 普及组] 选数————C++

题目 [NOIP2002 普及组] 选数 题目描述 已知 nnn 个整数 x1,x2,⋯,xnx_1,x_2,\cdots,x_nx1​,x2​,⋯,xn​&#xff0c;以及 111 个整数 kkk&#xff08;k<nk<nk<n&#xff09;。从 nnn 个整数中任选 kkk 个整数相加&#xff0c;可分别得到一系列的和。例如当 n4n4…

支持ITIL的IT帮助台

什么是ITIL 信息技术基础架构库 &#xff08;ITIL&#xff09; 是一套集成的最佳实践&#xff0c;旨在帮助企业向客户提供 IT 服务。ITIL是由中央设计的广泛采用的框架 计算机和电信局&#xff08;CCTA&#xff09;&#xff0c;英国的政府机构;它目前由AXELOS Ltd拥有。 ITIL…

【微信小程序】实用教程03-自定义底部导航(含自定义tabBar导航高亮需点击两次的解决方案)

开始前&#xff0c;请先完成底部导航的开发&#xff0c;详见 【微信小程序】实用教程01-注册登录账号&#xff0c;获取 AppID、下载安装开发工具、创建项目、上传体验 显然&#xff0c;纯文字的底部导航有点low&#xff0c;还是需要有图标的才酷&#xff0c;下面我们一起来实…

python的numpy的用法总结

本文总结Numpy的用法&#xff0c;建议先学习python的container 基础。numpy可以理解列表或数组。一个numpy数组是一个由不同数值组成的网格。网格中的数据都是同一种数据类型&#xff0c;可以通过非负整型数的元组来访问。维度的数量被称为数组的阶&#xff0c;数组的大小是一个…

五个了解自己天赋优势的分析工具(五)PDP性格测试

PDP性格测试 PDP的全称是Professional Dyna-Metric Programs⾏为特质动态衡量系统&#xff0c;它是⼀个⽤来衡量个⼈的⾏为特质、活⼒、动能、压⼒、精⼒及能量变动情况的系统。 PDP根据⼈的天⽣特质&#xff0c;将⼈群分为五种类型&#xff0c;包括&#xff1a;⽀配型、外向型…

项目部署 koa项目 (后端)

当你用node koa写好项目后&#xff0c;把它部署到服务器上使用 首先&#xff0c;你要买台服务器&#xff0c;链接到你的服务器上&#xff08;我前面部署前端项目有写&#xff0c;你可以参考&#xff09; 安装node 因为我们是node项目&#xff0c;所以先安装node dnf instal…

学习记录662@项目管理之项目整体管理

什么是项目整体管理 整体管理就是要决定在什么时间把工作量分配到相应的资源上&#xff0c;有哪些潜在的问题并在其出现问题之前积极处理&#xff0c;以及协调各项工作使项目整体上取得一个好的结果。项目整体管理包括选择资源分配方案、平衡相互竞争的目标和方案&#xff0c;…

LiveGBS流媒体平台GB/T28181功能-支持GB35114接入海康大华华为设备通过GB35114国标流媒体平台

LiveGBS流媒体平台GB/T28181功能-支持GB35114接入国标流媒体平台接入说明1、LiveNVR通过GB35114接入LiveGBS1.1、开启LiveGBS 35114功能1.2、 获取设备端证书给平台1.3、LiveGBS白名单中添加需要接入的国密设备1.4、导出LiveGBS平台端证书给设备&#xff08;双向认证需要&#…

嵌入式Linux-进程中常用的函数调用

1. execve()函数 系统调用 execve()可以将新程序加载到某一进程的内存空间&#xff0c;通过调用 execve()函数将一个外部的可执行文件加载到进程的内存空间运行&#xff0c;使用新的程序替换旧的程序&#xff0c;而进程的栈、数据、以及堆数据会被新程序的相应部件所替换&…

W13Scan 漏洞扫描器之XSS插件模块编写示例

一、背景 上周将W13Scan目录结构整理了一番&#xff0c;觉得要深入研究还得从代码层&#xff0c;于是尝试编写一下插件&#xff1b;框架本身已经集成了XSS扫描插件&#xff1b; 本篇文章的XSS插件的编写单纯是为了学习这个框架&#xff0c;所以只支持GET型&#xff0c;了解插…

一文解析企业网盘 带你寻找数据协作的“满分答案”

数据量急剧增长&#xff0c;线上办公逐渐成为常态。许多企业都会选择部署企业网盘来满足日益增长的数据管理与数据协作的需求。网盘市场乱花渐欲迷人眼&#xff0c;企业又该如何从中甄别最适合自己的企业网盘&#xff1f; 网盘&#xff0c;企业的数字基建 飞速发展的科技让企业…

[GIT] GIT拆分仓库--不丢git提交历史记录

背景 如果你的代码仓库里有多个目录&#xff0c;你想把其中一个目录拆分出去变成一个独立的代码仓库。重要的一点是拆分的过程中要保留git提交历史记录。 拆分步骤 1. 检查一下你的 repo 的根目录中。 进入根目录后&#xff0c;快速运行 ls 终端命令以确保列出所有子目录。…