阿里云K8S的rabbitmq实现持久化

问题:使用阿里云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   # 直接写节点名

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值