原创地址https://bxv0uu2bxxa.feishu.cn/wiki/Tlrcw4cnMiUWIpkTMFocBjYznwg

6418c8080381441588e1c16a8127f3ab.png

 

一、克隆 RocketMQ Operator 项目

# 版本 rocketmq-operator-0.3.0

git clone -b 0.3.0 https://github.com/apache/rocketmq-operator.git

# 加速地址

cd && git clone -b 0.3.0 https://kgithub.com/apache/rocketmq-operator.git

cd ~/rocketmq-operato

二、制作镜像

cd ~/rocketmq-operator/images/broker/alpine

# 第 20 行(修改源地址为国内源)

sed -i '20s/.*/RUN sed -i '\''s\/dl-cdn.alpinelinux.org\/mirrors.tuna.tsinghua.edu.cn\/g'\'' \/etc\/apk\/repositories \&\& \\\n apk add --no-cache bash gettext nmap-ncat openssl busybox-extras/' Dockerfile

 

# 第 20 行(修改源地址为国内源)

# 修改前

RUN apk add --no-cache bash gettext nmap-ncat openssl busybox-extras

 

# 修改后

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories && \

    apk add --no-cache bash gettext nmap-ncat openssl busybox-extras

 

sed -i 's#apacherocketmq#192.168.1.112/apacherocketmq#g' build-broker-image.sh

 

# ./build-broker-image.sh 4.9.4

 

./build-broker-image.sh 5.1.0

三、制作 RocketMQ Name Server Image

cd ~/rocketmq-operator/images/namesrv/alpine

 

# 第 20 行(修改源地址为国内源)

sed -i '20s/.*/RUN sed -i '\''s\/dl-cdn.alpinelinux.org\/mirrors.tuna.tsinghua.edu.cn\/g'\'' \/etc\/apk\/repositories \&\& \\\n apk add --no-cache bash gettext nmap-ncat openssl busybox-extras/' Dockerfile

 

# 第 20 行(修改源地址为国内源)

# 修改前

RUN apk add --no-cache bash gettext nmap-ncat openssl busybox-extras

 

# 修改后

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories && \

    apk add --no-cache bash gettext nmap-ncat openssl busybox-extras

 

# 修改镜像仓库地址为内网地址

 

sed -i 's#apacherocketmq#192.168.1.112/apacherocketmq#g' build-namesrv-image.sh

 

# ./build-namesrv-image.sh 4.9.4

 

./build-namesrv-image.sh 5.1.0

四、修改 RocketMQ Operator 部署yml文件

sed -i 'N;8 a \ namespace: rocketmq' deploy/crds/rocketmq.apache.org_brokers.yaml

sed -i 'N;8 a \ namespace: rocketmq' deploy/crds/rocketmq.apache.org_consoles.yaml

sed -i 'N;8 a \ namespace: rocketmq' deploy/crds/rocketmq.apache.org_nameservices.yaml

sed -i 'N;8 a \ namespace: rocketmq' deploy/crds/rocketmq.apache.org_topictransfers.yaml

sed -i 'N;18 a \ namespace: rocketmq' deploy/operator.yaml

sed -i 'N;18 a \ namespace: rocketmq' deploy/role_binding.yaml

sed -i 's/namespace: default/namespace: rocketmq/g' deploy/role_binding.yaml

sed -i 'N;18 a \ namespace: rocketmq' deploy/service_account.yaml

sed -i 'N;20 a \ namespace: rocketmq' deploy/role.yaml

 

 

grep -r 'namespace: rocketmq' deploy/* |grep -n '.*'

# 备份

cp example/rocketmq_v1alpha1_rocketmq_cluster.yaml example/rocketmq_v1alpha1_rocketmq_cluster.yaml-bak

 

 

# 命名空间

sed -i 's/namespace: default/namespace: rocketmq/g' example/rocketmq_v1alpha1_rocketmq_cluster.yaml

 

 

# 替换镜像地址

sed -i 's#apacherocketmq#192.168.1.112/apacherocketmq#g' example/rocketmq_v1alpha1_rocketmq_cluster.yaml

sed -i 's/4.5.0/5.1.0/g' example/rocketmq_v1alpha1_rocketmq_cluster.yaml

 

 

# 禁用 hostNetwork 模式

sed -i 's/hostNetwork: true/hostNetwork: false/g' example/rocketmq_v1alpha1_rocketmq_cluster.yaml 

sed -i 's/dnsPolicy: ClusterFirstWithHostNet/dnsPolicy: ClusterFirst/g' example/rocketmq_v1alpha1_rocketmq_cluster.yaml

 

 

# pvc

sed -i 's/storageClassName: rocketmq-storage/storageClassName: nfs-storage/g' example/rocketmq_v1alpha1_rocketmq_cluster.yaml

sed -i 's/storageMode: EmptyDir/storageMode: StorageClass/g' example/rocketmq_v1alpha1_rocketmq_cluster.yaml

sed -i 's/storage: 8Gi/storage: 2Ti/g' example/rocketmq_v1alpha1_rocketmq_cluster.yaml

sed -i 's/storage: 1Gi/storage: 2Ti/g' example/rocketmq_v1alpha1_rocketmq_cluster.yaml

 

 

# 修改 nameServers 为域名的形式

sed -i 's/nameServers: ""/nameServers: "name-server-service.rocketmq:9876"/g' example/rocketmq_v1alpha1_rocketmq_cluster.yaml

 

 

# cpu

sed -i 's/cpu: "500m"/cpu: "8"/g' example/rocketmq_v1alpha1_rocketmq_cluster.yaml

sed -i 's/cpu: "250m"/cpu: "2"/g' example/rocketmq_v1alpha1_rocketmq_cluster.yaml

 

 

# memory

sed -i 's/memory: "1024Mi"/memory: "8Gi"/g' example/rocketmq_v1alpha1_rocketmq_cluster.yaml

sed -i 's/memory: "512Mi"/memory: "2Gi"/g' example/rocketmq_v1alpha1_rocketmq_cluster.yaml

 

 

# 部署2个broker

sed -i '41s/1/2/' example/rocketmq_v1alpha1_rocketmq_cluster.yaml

 

 

# 命名空间

sed -i 'N;18 a \ namespace: rocketmq' example/rocketmq_v1alpha1_cluster_service.yaml

 

 

# NodePort

sed -i 's/nodePort: 30000/nodePort: 31080/g' example/rocketmq_v1alpha1_cluster_service.yaml

 

 

# 打开注释

sed -i '32,46s/^#//g' example/rocketmq_v1alpha1_cluster_service.yaml

sed -i 's/namespace: default/namespace: rocketmq/g' example/rocketmq_v1alpha1_cluster_service.yaml

sed -i 's/nodePort: 30001/nodePort: 31081/g' example/rocketmq_v1alpha1_cluster_service.yaml

五、部署其他依赖

- 控制角色

- Operator 任务等

kubectl create -f deploy/crds/rocketmq.apache.org_brokers.yaml

kubectl create -f deploy/crds/rocketmq.apache.org_nameservices.yaml

kubectl create -f deploy/crds/rocketmq.apache.org_consoles.yaml

kubectl create -f deploy/crds/rocketmq.apache.org_topictransfers.yaml

kubectl create -f deploy/service_account.yaml

kubectl create -f deploy/role.yaml

kubectl create -f deploy/role_binding.yaml

kubectl create -f deploy/operator.yaml

 

kubectl get crd | grep rocketmq.apache.org

 

kubectl get po -n rocketmq

六、部署 RocketMQ 集群

kubectl apply -f example/rocketmq_v1alpha1_cluster_service.yaml

kubectl apply -f example/rocketmq_v1alpha1_rocketmq_cluster.yaml

 

 

[root@master ~/rocketmq-operator]# kubectl get po -n rocketmq

NAME READY STATUS RESTARTS AGE

broker-0-master-0 1/1 Running 0 47s

broker-0-replica-1-0 1/1 Running 0 47s

broker-1-master-0 1/1 Running 0 47s

broker-1-replica-1-0 1/1 Running 0 47s

console-dfbc6445d-w9k75 1/1 Running 0 47s

name-service-0 1/1 Running 0 47s

rocketmq-operator-79bd8cf9dd-b55zt 1/1 Running 0 42m

 

 

[root@master ~/rocketmq-operator]# kubectl get svc -n rocketmq

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

console-service NodePort 10.97.145.235 <none> 8080:31080/TCP 39m

name-server-service NodePort 10.108.83.191 <none> 9876:31081/TCP 39m

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐