问题:使用阿里云K8S部署的rabbitmq服务,在重新部署之后队列信息会清空
解决:
使用PersistentVolumeClaim (PVC)挂载进行持久化。
1.进行存储声明创建


注意:正常状态应为Bound
直接使用yaml创建
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: rabbitmq-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: alicloud-disk-essd # 根据您的环境选择合适的storage class
2.进行挂载

或者在yaml中增加挂载信息:
containers:
- name: rabbit-mq-prod2
...
volumeMounts:
- mountPath: /var/lib/rabbitmq/mnesia
name: rabbitmq-storage # 任意名字,对上即可
volumes:
- name: rabbitmq-storage
persistentVolumeClaim:
claimName: rabbitmq-pvc # 必须跟上面 PVC 名字一致
3.判断是否挂载成功
3.1.看Pod事件(最快)
kubectl -n jinduo-prod describe pod rabbit-mq-prod2-0 | grep -A5 "Mount*"
若看到
`Successfully mounted volume ... rabbitmq-pvc`
且没有 `FailedMount`/`timeout` 等报错,说明挂载阶段已 OK。
3.2.进容器写文件 → 重建 Pod → 再读文件(最准)
# ① 写个测试文件
kubectl -n jinduo-prod exec rabbit-mq-prod2-0 -- sh -c \
'echo hello-pvc > /var/lib/rabbitmq/mnesia/test.txt'
# ② 模拟故障:删除 Pod,STS 会自动重建
kubectl -n jinduo-prod delete pod rabbit-mq-prod2-0
# ③ 等 Ready 后再读
kubectl -n jinduo-prod exec rabbit-mq-prod2-0 -- cat /var/lib/rabbitmq/mnesia/test.txt
只要输出 hello-pvc,就证明云盘数据在 Pod 生命周期之外依然存在,持久化成功。
3.3.看 PVC 用量(辅助)
kubectl -n jinduo-prod exec rabbit-mq-prod2-0 -- df -h /var/lib/rabbitmq/mnesia
文件系统大小 ≈ 你申请的 20 Gi,且 USED 随消息量增加而上涨,说明真正写盘而非 tmpfs/emptyDir。
4.也可以不使用PVC,使用本地存储的方式

或者在yaml中进行配置
volumeMounts:
- mountPath: /var/lib/rabbitmq/mnesia # RabbitMQ 默认数据目录
name: rabbitmq-data
volumes:
- name: rabbitmq-data
hostPath:
path: /data/rabbitmq # 宿主机目录,需提前 mkdir 并 chmod 777
type: DirectoryOrCreate
但是会有个问题:需要固定 nodeName 或 nodeSelector,把 Pod 绑死在一台 ECS
可以直接固定节点名
template:
spec:
nodeName: cn-shenzhen.8vb9opx # 直接写节点名
1301

被折叠的 条评论
为什么被折叠?



