RocketMQ on Kubernetes 运维面试题
3 道题- 分类
- Kubernetes
- 子分类
- middleware-ops
- 题目数
- 3 道
已阅读 0 / 3 题
7 RocketMQ Operator 的架构与 Kubernetes 部署流程是怎样的
答案:
RocketMQ Operator 基于 Kubernetes Operator 模式实现 RocketMQ 集群的自动化部署、扩缩容与生命周期管理,通过 CRD 定义 NameServer、Broker 等资源并以自定义调度逻辑编排 Pod 的创建与更新。
[分层展开]
- Operator 架构:基于 controller-runtime 框架;通过 Custom Resource(CR)描述 RocketMQ 集群拓扑;Controller 监听 CR 变更并执行 Reconcile 循环将实际状态调整为目标状态。
- 核心 CRD:
NameService定义 NameServer 集群;Broker定义 Broker 组(主从关系);TopicTransfer定义 Topic 自动创建与负载均衡;Console部署 RocketMQ 控制台。 - Controller 职责:NameServer Controller 管理 NameServer Pod 的创建、更新、滚动升级;Broker Controller 管理 Broker StatefulSet 的扩缩容与镜像升级。
- 部署流程:安装 Operator(Helm Chart 或 YAML);创建 NameServer CR 拉起 NameServer 集群;创建 Broker CR 拉起 Broker StatefulSet;Topic 经 CR 或 API 创建;Producer/Consumer 通过 K8s Service 访问。
# NameService CR 示例
apiVersion: rocketmq.apache.org/v1alpha1
kind: NameService
metadata:
name: name-service
spec:
size: 2
image: apache/rocketmq:5.3.0
hostNetwork: false
resources:
requests:
memory: 512Mi
cpu: 250m
limits:
memory: 1Gi
cpu: 500m
# Broker CR 示例
apiVersion: rocketmq.apache.org/v1alpha1
kind: Broker
metadata:
name: broker
spec:
size: 2
clusterName: DefaultCluster
brokerImage: apache/rocketmq:5.3.0
nameServers: name-service:9876
replicationMode: DLedger
storage:
size: 100Gi
storageClassName: ssd
8 RocketMQ 在 Kubernetes 上的 StatefulSet 配置有哪些关键要点
答案:
RocketMQ Broker 与 NameServer 以 StatefulSet 形式部署在 Kubernetes 上,关键配置包括稳定网络标识、持久化存储绑定、反亲和性调度与资源限制。
[分层展开]
- 稳定网络标识:StatefulSet 为每个 Pod 分配固定网络标识(如
broker-0.broker-svc.default.svc.cluster.local);Dledger 模式依赖固定标识进行 Raft 通信。 - PodManagementPolicy:使用
OrderedReady策略确保 Pod 顺序启动,Dledger 场景下确保 n0 先启动以完成选举。 - PVC 模板:通过
volumeClaimTemplates为每个 Pod 自动创建 PVC;Pod 重调度后 PVC 自动重新挂载,数据不丢失。 - 反亲和性(anti-affinity):通过
podAntiAffinity将同一 Broker Group 的 Pod 分散到不同节点,避免单点故障。 - Headless Service:配置
clusterIP: None的 Headless Service,为 StatefulSet 提供 DNS 解析;Dledger 节点通过 DNS 发现彼此。
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: broker
spec:
serviceName: broker-svc
replicas: 3
podManagementPolicy: OrderedReady
selector:
matchLabels:
app: broker
template:
metadata:
labels:
app: broker
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- broker
topologyKey: kubernetes.io/hostname
containers:
- name: broker
image: apache/rocketmq:5.3.0
command:
- sh
- mqbroker
args:
- -n
- name-service:9876
- -c
- /home/rocketmq/conf/broker.conf
ports:
- containerPort: 10911
name: remoting
- containerPort: 40911
name: dledger
resources:
requests:
memory: 2Gi
cpu: 1
limits:
memory: 4Gi
cpu: 2
volumeMounts:
- name: data
mountPath: /home/rocketmq/store
- name: config
mountPath: /home/rocketmq/conf
volumes:
- name: config
configMap:
name: broker-config
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: ssd
resources:
requests:
storage: 200Gi
30 RocketMQ on Kubernetes 生产环境有哪些最佳实践
答案:
RocketMQ on Kubernetes 生产环境最佳实践涵盖集群拓扑规划、资源配置、持久化存储、高可用架构、监控告警、安全加固与运维自动化七个方面。
[分层展开]
集群拓扑规划
| 组件 | 推荐数量 | 部署形式 | 说明 |
|---|---|---|---|
| NameServer | 3 | Deployment(无状态) | 独立于 Broker 部署,避免共享故障域 |
| Broker Master | 2+(每个 Group) | StatefulSet(有状态) | Dledger 模式每个 Group 3 副本 |
| Proxy | 3 | Deployment | RocketMQ 5.x 启用 gRPC 协议,端口 8080/8443承载客户端连接(替代部分 10911 流量) |
| Controller | 3 | StatefulSet | RocketMQ 5.0 自动主从切换 |
持久化存储
# 使用高性能 SSD StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rocketmq-ssd
provisioner: pd.csi.storage.gke.io # 以 GCP 为例
parameters:
type: pd-ssd
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
资源配置
resources:
requests:
memory: 4Gi
cpu: 2
limits:
memory: 8Gi
cpu: 4
高可用架构
- 反亲和性:同一 Broker Group 的 Pod 分散在不同可用区/节点。
- PodDisruptionBudget:设置
maxUnavailable: 1阻止维护期间 Broker 全部下线。 - 健康检查:Liveness Probe 检查进程存活、Readiness Probe 检查 Broker 是否可注册。
livenessProbe:
exec:
command:
- sh
- -c
- /home/rocketmq/bin/mqadmin clusterList -n localhost:9876 | grep BROKER
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
tcpSocket:
port: 10911
initialDelaySeconds: 20
periodSeconds: 5
监控告警
- Prometheus Exporter + Grafana Dashboard;
- 关键告警规则:消费者堆积超过 10 万条;Consumer 全部离线(心跳丢失);磁盘使用率超过 80%;Broker 组件宕机;Broker 5xx 错误率突增
# PrometheusRule 示例
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: rocketmq-alerts
spec:
groups:
- name: rocketmq
rules:
- alert: RocketMQConsumerLagHigh
expr: (rocketmq_broker_offset - rocketmq_consumer_offset) > 100000
for: 5m
labels:
severity: warning
annotations:
summary: "Consumer Group {{ $labels.consumer_group }} 堆积超过 10 万"
安全加固
- 启用 ACL 基于 AK/SK 认证授权;
- NetworkPolicy 限制 Broker 仅被指定标签的 Pod 访问;
- NameServer 不对外暴露,仅集群内访问;
- Secret 管理 AK/SK。
运维自动化
- 基于 CronJob 的定期备份(VolumeSnapshot + CommitLog 文件备份);
- 使用 ArgoCD / Flux 进行 GitOps 管理 CR 声明;
- Helm Chart 版本化管理组件配置;
- HPA 自动扩缩容 Consumer 实例;
- 定期演练主从切换与灾备恢复。
# NetworkPolicy 限制 Broker 访问
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: broker-access
spec:
podSelector:
matchLabels:
app: broker
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchExpressions:
- key: app
operator: In
values:
- proxy
- name-server
ports:
- port: 10911
protocol: TCP