在k8s集群上通过helm部署rocketmq:4.9.4
- 3节点集群
- 使用nodeport模式
- 部署命令使用helm upgrade –install
- namespace等其他参数都尽量在helm安装命令里指定
- 命令可复用(兼容install和upgrade场景)
env
rocketmq:4.9.4
k8s 1.24.6
dcoker 25.0.5
helm 3.19.2
安装
helm repo add rocketmq-repo https://helm-charts.itboon.top/rocketmq
helm repo update
收集values有助于判断正确的参数设置:
helm show values rocketmq-repo/rocketmq
helm upgrade --install rocketmq \
--namespace rocketmq \
--create-namespace \
--set nameserver.replicaCount=2 \
--set nameserver.service.type=NodePort \
--set nameserver.service.nodePort=30909 \
--set nameserver.resources.limits.cpu=1 \
--set nameserver.resources.limits.memory=2Gi \
--set nameserver.resources.requests.cpu=500m \
--set nameserver.resources.requests.memory=1Gi \
--set nameserver.jvm.maxHeapSize=1G \
\
--set broker.size.master=3 \
--set broker.size.replica=0 \
--set broker.master.brokerRole=ASYNC_MASTER \
--set broker.service.type=NodePort \
--set broker.service.nodePort=30911 \
--set broker.persistence.enabled=true \
--set broker.persistence.size=50Gi \
--set broker.persistence.storageClass="" \
--set broker.master.resources.limits.cpu=4 \
--set broker.master.resources.limits.memory=8Gi \
--set broker.master.resources.requests.cpu=2 \
--set broker.master.resources.requests.memory=4Gi \
--set broker.master.jvm.maxHeapSize=4G \
\
--set image.repository=apache/rocketmq \
--set image.tag=4.9.4 \
--set proxy.enabled=false \
\
--set dashboard.enabled=true \
--set dashboard.service.type=NodePort \
--set dashboard.service.nodePort=30888 \
rocketmq-repo/rocketmq
面对生产,强一致性场景,修改以下参数,达到2主2从,实时同步(数据强一致,牺牲性能):
# 只改这3个参数,其他全部不变
--set broker.size.master=2 \
--set broker.size.replica=2 \
--set broker.master.brokerRole=SYNC_MASTER \
为什么要 SYNC_MASTER?
因为有从节点,要等同步完成才返回成功,否则主挂了消息会丢
RocketMQ 4.9.4 不支持 proxy 组件
卸载重装
helm uninstall rocketmq -n rocketmq
kubectl delete pvc -n rocketmq --all
kubectl delete ns rocketmq
SVC信息
应用应该把两个nameserver的信息都填上,或者填svc地址(会自动负载均衡)
rocketmq-nameserver-0.rocketmq-nameserver-headless.rocketmq.svc:9876;rocketmq-nameserver-1.rocketmq-nameserver-headless.rocketmq.svc:9876
rocketmq-nameserver.rocketmq.svc:9876
运维用nodeport30888来看dashboard
root@k8s-master51:~# kg svc -n rocketmq
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
rocketmq-dashboard NodePort 10.96.2.142 <none> 8082:30888/TCP 2m15s
rocketmq-nameserver NodePort 10.96.2.168 <none> 9876:30909/TCP 2m15s
rocketmq-nameserver-headless ClusterIP None <none> 9876/TCP 2m15s
root@k8s-master51:~#
root@k8s-master51:~#
root@k8s-master51:~#
root@k8s-master51:~# kg pod -n rocketmq
NAME READY STATUS RESTARTS AGE
rocketmq-broker-master-0 1/1 Running 0 9m32s
rocketmq-broker-master-1 1/1 Running 0 8m52s
rocketmq-broker-master-2 1/1 Running 0 7m52s
rocketmq-dashboard-6b9856b86d-ftnhs 1/1 Running 0 9m32s
rocketmq-nameserver-0 1/1 Running 0 9m32s
rocketmq-nameserver-1 1/1 Running 0 9m32s
OUTPUT
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Nameserver Address:
rocketmq-nameserver.rocketmq.svc:9876Proxy Remoting Address:
rocketmq-proxy.rocketmq.svc:8080Proxy gRPC Address:
rocketmq-proxy.rocketmq.svc:8081RocketMQ Dashboard Auth:
username: admin password: admin
username: user01 password: userPass
Modify “rocketmq-dashboard-cm” configmap to change the password
离线安装
导出chart和images等必要资源以便后续离线安装
打包成tar,每个资源单独打包
查看所有镜像:broker 和 nameserver公用一个镜像
kubectl get pods -n rocketmq -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[0].image}{"\n"}{end}'
docker pull apache/rocketmq:4.9.4
docker pull apacherocketmq/rocketmq-dashboard:2.1.0
docker save -o apache_rocketmq_4.9.4.tar apache/rocketmq:4.9.4
docker save -o apacherocketmq_rocketmq-dashboard_2.1.0.tar apacherocketmq/rocketmq-dashboard:2.1.0
docker load -i apache_rocketmq_4.9.4.tar
docker load -i apacherocketmq_rocketmq-dashboard_2.1.0.tar