rocketmq_k8s

rocketmq_k8s

在k8s集群上通过helm部署rocketmq:4.9.4

  1. 3节点集群
  2. 使用nodeport模式
  3. 部署命令使用helm upgrade –install
  4. namespace等其他参数都尽量在helm安装命令里指定
  5. 命令可复用(兼容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:9876

Proxy Remoting Address:
rocketmq-proxy.rocketmq.svc:8080

Proxy gRPC Address:
rocketmq-proxy.rocketmq.svc:8081

RocketMQ 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

igozhang 2021