【云原生 | Kubernetes 系列】—K8S部署RocketMQ集群(双主双从+同步模式)

版权 本文为云录原创文章,转载无需和我联系,但请注明来自云录 https://www.yunzhuan.site

rocketMQ高可用有很多种方式,比如:单机部署,多主集群,双主双从同步部署,双主双从异步部署,以及多主多从部署。部署集群可按照自己公司的实际情况进行部署。

单机部署:只启动一个rocketMQ实例就可以了,一般常用来本机测试使用。原因:一旦rocketMQ因某些原因挂掉,导致mq无法使用,则我们服务器无法接受信息与消费信息等。

多主集群:只部署mq主节点,无部署从节点。优点:配置简单,单个Master宕机或重启维护对应用无影响,即使机器宕机不可恢复情况下,也有其他主节点进行写入操作,

消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高;

双主双从同步:部署四个节点,每个主节点都有一个从节点,主与从节点的信息通过同步的方式进行保存。优点:消息不会丢失,即:主节点挂了后,从节点的消息也不会造成丢失,只不过没法接受新消息,只能消费,但是能保证我消费的消息一定是准确的。缺点:客户端接受服务器响应时间长。可用于消息安全高的场景。

双主双从异步:与双主双从一致,只不过在主从数据传输是通过异步的方式,优点:客户端能快速的接收到服务器的消息,缺点:主节点挂的情况,从节点会丢失一部分消息。可用于允许消息丢失,吞吐量高的情景。

创建存储

这里我用ceph,需要自己准备存储

需要准备的材料 自行下载

apache-maven-3.6.3-bin.tar.gz

rocketmq-all-4.9.4-bin-release.zip

rocketmq-dashboard-master.zip

yarn-v1.22.10.tar.gz https://github.com/yarnpkg/yarn/releases/download/v1.22.10/yarn-v1.22.10.tar.gz

创建RocketMQ集群(双主双从同步模式)

制作rocketmq镜像

[root rocketmqimage]# ll
total 32200
-rw-r--r--. 1 root root 319 May 15 13:38 Dockerfile
drwxr-xr-x. 6 root root 103 May 15 13:37 rocketmq-all-4.9.4-bin-release
-rw-rw-r--. 1 root root 32967749 May 15 13:31 rocketmq-all-4.9.4-bin-release.zip

1:解压rocketmq-all-4.9.4-bin-release.zip 将runbroker.sh脚本文件里的内存设置调整小点

unzip  rocketmq-all-4.9.4-bin-release.zip
vim rocketmq-all-4.9.4-bin-release/bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g"

2:准备dockerfile

FROM openjdk:8
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
COPY rocketmq-all-4.9.4-bin-release /usr/local/rocketmq-all-4.9.4-bin-release
RUN mkdir -p /data/rocketmq/store
CMD ["/bin/bash"]

3:制作镜像并上传到Harbor仓库

docker build -t 127.0.0.1/rocketmq/rocketmq-4.9.3:1.0 .
docker push 127.0.0.1/rocketmq/rocketmq-4.9.3:1.0

制作nameserver的image镜像

将上面rocketmq_image目录下的包rocketmq-all-4.9.4-bin-release 拷贝过来

[root nameserver_image]# ll
total 8
-rw-r--r-- 1 root root 525 Aug 23 2022 Dockerfile
-rw-r--r-- 1 root root 17 Aug 23 2022 namesrv.properties
drwxr-xr-x 6 root root 103 May 15 13:56 rocketmq-all-4.9.4-bin-release

1:准备 namesrv.properties 自定义nameserver的端口号

[root nameserver_image]# cat namesrv.properties
listenPort=20801

2:准备dockerfile

[root nameserver_image]# cat Dockerfile
FROM openjdk:8
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
COPY rocketmq-all-4.9.4-bin-release /usr/local/rocketmq-all-4.9.4-bin-release
COPY namesrv.properties /usr/local/rocketmq-all-4.9.4-bin-release/conf/
WORKDIR /usr/local/rocketmq-all-4.9.4-bin-release
CMD ["/usr/local/rocketmq-all-4.9.4-bin-release/bin/mqnamesrv","-c","/usr/local/rocketmq-all-4.9.4-bin-release/conf/namesrv.properties"]

3: 制作镜像并上传到Harbor仓库

docker build -t 127.0.0.1/rocketmq/rocketmq_namesrv:4.9.3.1 .
docker push 127.0.0.1/rocketmq/rocketmq_namesrv:4.9.3.1

制作rocketmq的web可视化界面的image镜像

[root rockermq_web]# ll
total 14320
drwxr-xr-x 6 root root 99 Aug 23 2022 apache-maven-3.6.3
-rw-rw-r-- 1 dotnet dotnet 9506321 Aug 23 2022 apache-maven-3.6.3-bin.tar.gz
-rw-r--r-- 1 root root 674 May 15 15:26 Dockerfile
drwxr-xr-x 7 root root 213 Apr 11 2022 rocketmq-dashboard-master
-rw-rw-r-- 1 dotnet dotnet 3906355 Aug 23 2022 rocketmq-dashboard-master.zip
-rw-rw-r-- 1 dotnet dotnet 1244965 May 15 15:21 yarn-v1.22.10.tar.gz

1:下载rocketmq-dashboard-master.zip和apache-maven-3.6.3-bin.tar.gz 并解压 2:修改 dashboard配置

vim rocketmq-dashboard-master/src/main/resources/application.yml
修改内容:
namesrvAddrs:
- mq-namesrv.romq.svc.cluster.local:20801
loginRequired: true
accessKey: rocketmq2
secretKey: 12345678
server:
port: 8080
servlet:
encoding:
charset: UTF-8
enabled: true
force: true
## SSL setting
# ssl:
# key-store: classpath:rmqcngkeystore.jks
# key-store-password: rocketmq
# key-store-type: PKCS12
# key-alias: rmqcngkey spring:
application:
name: rocketmq-dashboard logging:
config: classpath:logback.xml rocketmq:
config:
# if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, default localhost:9876
# configure multiple namesrv addresses to manage multiple different clusters
namesrvAddrs:
- mq-namesrv.romq.svc.cluster.local:20801
# if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
isVIPChannel: false
# timeout for mqadminExt, default 5000ms
timeoutMillis:
# rocketmq-console's data path:dashboard/monitor
dataPath: /tmp/rocketmq-console/data
# set it false if you don't want use dashboard.default true
enableDashBoardCollect: true
# set the message track trace topic if you don't want use the default one
msgTrackTopicName:
ticketKey: ticket
# must create userInfo file: ${rocketmq.config.dataPath}/users.properties if the login is required
loginRequired: true
useTLS: false
# set the accessKey and secretKey if you used acl设置acl权限
accessKey: rocketmq2 # if version > 4.4.0
secretKey: 12345678 # if version > 4.4.0 threadpool:
config:
coreSize: 10
maxSize: 10
keepAliveTime: 3000
queueSize: 5000

3:准备dockerfile

[root rockermq_web]# cat Dockerfile
FROM openjdk:8
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
ENV MAVEN_HOME /usr/local/maven
ENV PATH $PATH:$MAVEN_HOME/bin
COPY rocketmq-dashboard-master /usr/local/rocketmq-dashboard-master
COPY yarn-v1.22.10.tar.gz /root/.m2/repository/com/github/eirslett/yarn/1.22.10/
COPY apache-maven-3.6.3 /usr/local/maven
WORKDIR /usr/local/rocketmq-dashboard-master
RUN mvn clean package -Dmaven.test.skip=true
WORKDIR /usr/local/rocketmq-dashboard-master/target
EXPOSE 8080
CMD ["nohup","java","-jar","rocketmq-dashboard-1.0.1-SNAPSHOT.jar","&"]

4:制作镜像并上传到Harbor仓库

docker build -t 127.0.0.1/rocketmq/rocketmq-dashboard:v4.9.3.1 .
docker push 127.0.0.1/rocketmq/rocketmq-dashboard:v4.9.3.1

准备配置文件 configmap

1:我的broker配置文件

[root config]# ll
total 16
-rw-rw-r--. 1 dotnet dotnet 638 May 15 15:53 broker-a.properties
-rw-rw-r--. 1 dotnet dotnet 630 May 15 15:53 broker-a-s.properties
-rw-rw-r--. 1 dotnet dotnet 636 May 15 15:53 broker-b.properties
-rw-rw-r--. 1 dotnet dotnet 632 May 15 15:53 broker-b-s.properties
[root config]# cat broker-a.properties
brokerClusterName=rocketmq-cluster
brokerName=broker-a
brokerId=0
namesrvAddr=mq-namesrv.romq.svc.cluster.local:20801
defaultTopicQueueNums=4
autoCreateTopicEnable=false
autoCreateSubscriptionGroup=true
brokerIP1=公网ip或是负载ip
listenPort=30811
deleteWhen=04
fileReservedTime=48
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
diskMaxUsedSpaceRatio=88
storePathRootDir=/data/rocketmq/store
maxMessageSize=65536
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
aclEnable=true
[root config]# cat broker-a-s.properties
brokerClusterName=rocketmq-cluster
brokerName=broker-a
brokerId=1
namesrvAddr=mq-namesrv.romq.svc.cluster.local:20801
defaultTopicQueueNums=4
autoCreateTopicEnable=false
autoCreateSubscriptionGroup=true
brokerIP1=公网ip或是负载ip
listenPort=30812
deleteWhen=04
fileReservedTime=48
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
diskMaxUsedSpaceRatio=88
storePathRootDir=/data/rocketmq/store
maxMessageSize=65536
brokerRole=SLAVE
flushDiskType=SYNC_FLUSH
aclEnable=true
[root config]# cat broker-b.properties
brokerClusterName=rocketmq-cluster
brokerName=broker-b
brokerId=0
namesrvAddr=mq-namesrv.romq.svc.cluster.local:20801
defaultTopicQueueNums=4
autoCreateTopicEnable=false
autoCreateSubscriptionGroup=true
brokerIP1=公网ip或是负载ip
listenPort=30813
deleteWhen=04
fileReservedTime=48
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
diskMaxUsedSpaceRatio=88
storePathRootDir=/data/rocketmq/store
maxMessageSize=65536
brokerRole=SYNC_MASTER
flushDiskType=SYNC_FLUSH
aclEnable=true
[root config]# cat broker-b-s.properties
brokerClusterName = rocketmq-cluster
brokerName=broker-b
brokerId=1
namesrvAddr=mq-namesrv.romq.svc.cluster.local:20801
defaultTopicQueueNums=4
autoCreateTopicEnable=false
autoCreateSubscriptionGroup=true
brokerIP1=公网ip或是负载ip
listenPort=30814
deleteWhen=04
fileReservedTime=48
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
diskMaxUsedSpaceRatio=88
storePathRootDir=/data/rocketmq/store
maxMessageSize=65536
brokerRole=SLAVE
flushDiskType=SYNC_FLUSH
aclEnable=true

2:创建CM

kubectl create configmap rocketmq-config --from-file=broker-a.properties --from-file=broker-b.properties --from-file=broker-a-s.properties --from-file=broker-b-s.properties -n romq

准备Deploy

1:我的deploy

[root rocketmqDeploy]# ll
total 24
-rw-rw-r--. 1 dotnet dotnet 2908 May 15 16:50 broker-a-deployment.yaml
-rw-rw-r--. 1 dotnet dotnet 3041 May 15 16:50 broker-a-s-deployment.yaml
-rw-rw-r--. 1 dotnet dotnet 2908 May 15 16:50 broker-b-deployment.yaml
-rw-rw-r--. 1 dotnet dotnet 3041 May 15 16:50 broker-b-s-deployment.yaml
-rw-rw-r--. 1 dotnet dotnet 1811 May 15 15:50 namesrv-deployment.yaml
-rw-rw-r--. 1 dotnet dotnet 1735 May 15 17:27 rocketmq-externals-deployment.yaml
[root rocketmqDeploy]# cat broker-a-deployment.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: broker-a
name: broker-a
spec:
type: NodePort
ports:
- port: 30811
targetPort: 30811
name: broker-port
nodePort: 30811
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: 127.0.0.1/rocketmq/rocketmq-4.9.3:1.0
imagePullPolicy: Always
command: ["sh","-c","/usr/local/rocketmq-all-4.9.4-bin-release/bin/mqbroker -c /usr/local/rocketmq-all-4.9.4-bin-release/conf/broker-a.properties"]
volumeMounts:
- mountPath: /root/logs
name: rocketmq-data-cluster
subPath: mq-brokeroptlogs
- mountPath: /data/rocketmq
name: rocketmq-data-cluster
subPath: mq-brokeroptstore
- name: broker-config
mountPath: /usr/local/rocketmq-all-4.9.4-bin-release/conf/broker-a.properties
subPath: broker-a.properties
- name: time
mountPath: /etc/localtime
env:
- name: JAVA_OPT_EXT
value: '-Xmx4096m -Xms4096m -Xmn1048m'
resources:
requests:
memory: 2024Mi
cpu: 1024m
limits:
memory: 6024Mi
cpu: 6000m
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: 30811
initialDelaySeconds: 15
timeoutSeconds: 5
periodSeconds: 20
volumes:
- name: broker-config
configMap:
name: rocketmq-config
- name: time
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
volumeClaimTemplates:
- metadata:
name: rocketmq-data-cluster
spec:
storageClassName: rook-ceph-block
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
[root rocketmqDeploy]# cat broker-a-s-deployment.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: broker-a-s
name: broker-a-s
spec:
type: NodePort
ports:
- port: 30812
targetPort: 30812
name: broker-port
nodePort: 30812
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: 127.0.0.1/rocketmq/rocketmq-4.9.3:1.0
imagePullPolicy: Always
command: ["sh","-c","/usr/local/rocketmq-all-4.9.4-bin-release/bin/mqbroker -c /usr/local/rocketmq-all-4.9.4-bin-release/conf/broker-a-s.properties"]
volumeMounts:
- mountPath: /root/logs
name: rocketmq-data-cluster
subPath: mq-brokeroptlogs
- mountPath: /data/rocketmq
name: rocketmq-data-cluster
subPath: mq-brokeroptstore
- name: broker-config
mountPath: /usr/local/rocketmq-all-4.9.4-bin-release/conf/broker-a-s.properties
subPath: broker-a-s.properties
- name: time
mountPath: /etc/localtime
env:
- name: JAVA_OPT_EXT
value: '-Xmx4096m -Xms4096m -Xmn1048m'
resources:
requests:
memory: 2024Mi
cpu: 1024m
limits:
memory: 6024Mi
cpu: 6000m
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: 30812
initialDelaySeconds: 15
timeoutSeconds: 5
periodSeconds: 20
volumes:
- name: broker-config
configMap:
name: rocketmq-config
items:
- key: broker-a-s.properties
path: broker-a-s.properties
- name: time
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
volumeClaimTemplates:
- metadata:
name: rocketmq-data-cluster
spec:
storageClassName: rook-ceph-block
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
[root rocketmqDeploy]# cat broker-b-deployment.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: broker-b
name: broker-b
spec:
type: NodePort
ports:
- port: 30813
targetPort: 30813
name: broker-port
nodePort: 30813
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: 127.0.0.1/rocketmq/rocketmq-4.9.3:1.0
imagePullPolicy: Always
command: ["sh","-c","/usr/local/rocketmq-all-4.9.4-bin-release/bin/mqbroker -c /usr/local/rocketmq-all-4.9.4-bin-release/conf/broker-b.properties"]
volumeMounts:
- mountPath: /root/logs
name: rocketmq-data-cluster
subPath: mq-brokeroptlogs
- mountPath: /data/rocketmq
name: rocketmq-data-cluster
subPath: mq-brokeroptstore
- name: broker-config
mountPath: /usr/local/rocketmq-all-4.9.4-bin-release/conf/broker-b.properties
subPath: broker-b.properties
- name: time
mountPath: /etc/localtime
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: 30813
initialDelaySeconds: 15
timeoutSeconds: 5
periodSeconds: 20
env:
- name: JAVA_OPT_EXT
value: '-Xmx4096m -Xms4096m -Xmn1048m'
resources:
requests:
memory: 2024Mi
cpu: 1024m
limits:
memory: 6024Mi
cpu: 6000m
volumes:
- name: broker-config
configMap:
name: rocketmq-config
- name: time
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
volumeClaimTemplates:
- metadata:
name: rocketmq-data-cluster
spec:
storageClassName: rook-ceph-block
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
[root rocketmqDeploy]# cat broker-b-s-deployment.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: broker-b-s
name: broker-b-s
spec:
type: NodePort
ports:
- port: 30814
targetPort: 30814
name: broker-port
nodePort: 30814
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: 127.0.0.1/rocketmq/rocketmq-4.9.3:1.0
imagePullPolicy: Always
command: ["sh","-c","/usr/local/rocketmq-all-4.9.4-bin-release/bin/mqbroker -c /usr/local/rocketmq-all-4.9.4-bin-release/conf/broker-b-s.properties"]
volumeMounts:
- mountPath: /root/logs
name: rocketmq-data-cluster
subPath: mq-brokeroptlogs
- mountPath: /data/rocketmq
name: rocketmq-data-cluster
subPath: mq-brokeroptstore
- name: broker-config
mountPath: /usr/local/rocketmq-all-4.9.4-bin-release/conf/broker-b-s.properties
subPath: broker-b-s.properties
- name: time
mountPath: /etc/localtime
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: 30814
initialDelaySeconds: 15
timeoutSeconds: 5
periodSeconds: 20
env:
- name: JAVA_OPT_EXT
value: '-Xmx4096m -Xms4096m -Xmn1048m'
resources:
requests:
memory: 2024Mi
cpu: 1024m
limits:
memory: 6024Mi
cpu: 6000m
volumes:
- name: broker-config
configMap:
name: rocketmq-config
items:
- key: broker-b-s.properties
path: broker-b-s.properties
- name: time
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
volumeClaimTemplates:
- metadata:
name: rocketmq-data-cluster
spec:
storageClassName: rook-ceph-block
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
[root rocketmqDeploy]# cat namesrv-deployment.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: mq-namesrv
name: mq-namesrv
spec:
type: NodePort
ports:
- port: 20801
targetPort: 20801
name: namesrv-port
nodePort: 30815
selector:
app: mq-namesrv
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mq-namesrv
spec:
serviceName: mq-namesrv
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: 127.0.0.1/rocketmq/rocketmq_namesrv:4.9.3.1
imagePullPolicy: Always
env:
- name: JAVA_OPT_EXT
value: '-Xmx2048m -Xms2048m -Xmn512m'
resources:
requests:
memory: 2024Mi
cpu: 1024m
limits:
memory: 4096Mi
cpu: 3000m
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: 20801
initialDelaySeconds: 15
timeoutSeconds: 5
periodSeconds: 20
[root rocketmqDeploy]# cat rocketmq-externals-deployment.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: mq-externals
name: mq-externals
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
name: console-port
nodePort: 30816
selector:
app: mq-externals
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mq-externals
spec:
replicas: 1
selector:
matchLabels:
app: mq-externals
template:
metadata:
labels:
app: mq-externals
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- mq-externals
topologyKey: "kubernetes.io/hostname"
containers:
- name: mq-externals
image: 127.0.0.1/rocketmq/rocketmq-dashboard:v4.9.3.1
imagePullPolicy: Always
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: 8080
initialDelaySeconds: 15
env:
- name: JAVA_OPT_EXT
value: '-Xmx1024m -Xms1024m -Xmn512m'
resources:
requests:
memory: 1024Mi
cpu: 1024m
limits:
memory: 4096Mi
cpu: 3000m

2: 部署deploy

kubectl apply  -f ./  -n  romq
[root rocketmqDeploy]# kubectl  get po  -n  romq
NAME READY STATUS RESTARTS AGE
broker-a-0 1/1 Running 0 65m
broker-a-s-0 1/1 Running 0 65m
broker-b-0 1/1 Running 0 65m
broker-b-s-0 1/1 Running 0 65m
mq-externals-6cfc5d9bc-w4cmp 1/1 Running 0 45s
mq-namesrv-0 1/1 Running 0 65m
[root rocketmqDeploy]# kubectl  get svc  -n  romq
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
broker-a NodePort 10.99.180.11 <none> 30811:30811/TCP 67m
broker-a-s NodePort 10.105.248.30 <none> 30812:30812/TCP 66m
broker-b NodePort 10.102.87.207 <none> 30813:30813/TCP 66m
broker-b-s NodePort 10.103.106.247 <none> 30814:30814/TCP 66m
mq-externals NodePort 10.96.128.101 <none> 8080:30816/TCP 66m
mq-namesrv NodePort 10.105.103.115 <none> 20801:30815/TCP 66m

3:访问dashboard: http://$NODE_IP:30816/

版权 本文为云录原创文章,转载无需和我联系,但请注明来自云录 https://www.yunzhuan.site

【云原生 | Kubernetes 系列】—K8S部署RocketMQ集群(双主双从+同步模式)的更多相关文章

  1. 云原生 • Kubernetes 认识 k8s、k8s 架构、核心概念点介绍

    云原生 • Kubernetes 认识 k8s.k8s 架构.核心概念点介绍 一.Kubernetes 简介Kubernetes 简称 k8s,是支持云原生部署的一个平台,起源于谷歌.谷歌早在十几年之 ...

  2. 教你在Kubernetes中快速部署ES集群

    摘要:ES集群是进行大数据存储和分析,快速检索的利器,本文简述了ES的集群架构,并提供了在Kubernetes中快速部署ES集群的样例:对ES集群的监控运维工具进行了介绍,并提供了部分问题定位经验,最 ...

  3. 日志分析系统 - k8s部署ElasticSearch集群

    K8s部署ElasticSearch集群 1.前提准备工作 1.1 创建elastic的命名空间 namespace编排文件如下: elastic.namespace.yaml --- apiVers ...

  4. K8S从入门到放弃系列-(3)部署etcd集群

    摘要:etcd 是k8s集群最重要的组件,用来存储k8s的所有服务信息, etcd 挂了,集群就挂了,我们这里把etcd部署在master三台节点上做高可用,etcd集群采用raft算法选举Leade ...

  5. Kubernetes(k8s)部署redis-cluster集群

    Redis Cluster 提供了一种运行 Redis 安装的方法,其中数据 在多个 Redis 节点之间自动分片. Redis Cluster 还在分区期间提供了一定程度的可用性,这实际上是在某些节 ...

  6. k8s部署etcd集群

    1.k8s部署高可用etcd集群时遇到了一些麻烦,这个是自己其中一个etcd的配置文件 例如: [Unit] Description=Etcd Server After=network.target ...

  7. kubernetes(k8s)容器集群管理

    Kubernetes介绍 Kubernetes是google在2014年6月开源的一个容器集群管理系统,使用go语言开发,Kubernetes也称k8s. k8s是google内部一个叫borg的容器 ...

  8. 阿里云k8s部署zookeeper集群

    1. 阿里云k8s创建有状态应用 StatefulSet ,  选择使用模板创建 可以创建自定义模板 apiVersion: apps/v1 kind: StatefulSet metadata: c ...

  9. k8s部署kafka集群

    一.概述 在k8s里面部署kafka.zookeeper这种有状态的服务,不能使用deployment和RC,k8s提供了一种专门用来部署这种有状态的服务的API--statefulset,有状态简单 ...

  10. k8s部署nginx集群

    环境: 两台虚拟机, 10.10.20.203 部署docker.etcd.flannel.kube-apiserver.kube-controller-manager.kube-scheduler ...

随机推荐

  1. 【SpringBoot实战】开发入门--快速创建springboot程序

    前言 本片博客记录快速创建springboot工程的使用spring initializr创建.开发环境JDK1.8.IDEA.maven. SpringBoot 优点 可快速构建spring应用 直 ...

  2. DBConvertStudio使用记录

    DBConvertStudio使用记录 前言 这篇文章是我在学习使用DBConvertStudio过程中的学习记录,以便日后遗忘查阅: 诸君也可跟随我的步伐了解一下DBConvertStudio 声明 ...

  3. C# 12 中的新增功能

    新的 C# 12 功能在预览版中已经引入. 您可以使用最新的 Visual Studio 预览版或最新的 .NET 8 预览版 SDK 来尝试这些功能.以下是一些新引入的功能: 主构造函数 集合表达式 ...

  4. Oracle11g安装教程(带安装包)

    找了半天没在官网上找到Oracle11g的安装包下载,又找了半天,终于在网上的一个教程里找到安装包的网盘链接.现在在这记一下防止以后重新找麻烦. 网盘链接 百度云盘链接:[https://pan.ba ...

  5. Mac OS安装Python的pip

    最近牛牛的同学在学习python,但当他使用numpy时出现了报错(。•́︿•̀。) 原因为他的python没有numpy这个库(这个故事很典).然鹅雪上加霜的是,他的电脑是Mac,没有Windows ...

  6. 最新 2023.2 版本 WebStorm 永久破解教程,WebStorm 破解补丁永久激活(亲测有效)

    最近 jetbrains 官方发布了 2023.2 版本的 IDEA,之前的激活方法并不支持这个新的版本. 下面是最新的激活教程,激活步骤和之前是类似的,只是换用了不同的补丁文件. 本教程支持 Jet ...

  7. [转载]R2: 已解释和未解释的方差

    估计值的方差与总体方差之间的差异就是回归方程对方差的解释率.试举一例,如图 1,身高与体重的回归线显示身高与体重之间呈正相关,Mr. Y身高76英寸体重220磅(图 1中插图.cdr的红点),他与体重 ...

  8. shell解析xml文档

    需要解析的源文件: /tmp/cameralist : <?xml version="1.0" encoding="UTF-8"?><came ...

  9. Session入门实例

    session对象(是JSP的9大内置对象之一): (1)session代表一次用户会话:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开为止,这个过程就是一次会话. (2)session作用 ...

  10. Ubuntu 编辑文件、安装、删除软件等常用命令(持续更新)

    一.编辑文件 1. sudo vi 文件名,进入文件页面,如图: 2. 按 i 键或者 o 键,进入编辑,左下角出现---------INSERT---------信息 3. 输入完毕后,按ESC退出 ...