K8s上Redis集群持久化要同时解决两个层面的问题:Redis自身的持久化配置 + K8s的存储卷绑定。
一、Redis持久化机制选择
生产环境建议RDB+AOF同时开启:
redis.conf关键配置:
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec
dir /data
二、K8s持久化存储配置
核心是用StatefulSet而不是Deployment,配合volumeClaimTemplates让每个Pod拿到独立的PVC:
StatefulSet配置要点:
如果用Bitnami Redis Cluster Helm Chart,values.yaml里这样配:
persistence.enabled: true
persistence.storageClass: "你的SC名"
persistence.size: 10Gi
persistence.accessModes: ["ReadWriteOnce"]
volumeClaimTemplates会自动给6个Pod各分一个PVC
三、集群模式特别注意
Redis Cluster每个节点独立持久化自己的slot范围数据,不需要共享存储。slave节点可以开AOF也可以不开——开了容灾恢复更快,不开节省IO。建议至少master开AOF,slave看性能需求。
如果恢复时集群需要从持久化文件重建,先启动各节点让它们各自从AOF/RDB恢复本地数据,再组成集群拓扑。注意K8s的Pod重启顺序——StatefulSet会按序号从0开始逐个启动,可以利用这个特性确保master先于slave就绪。
四、验证
部署后exec进Pod验证:redis-cli执行BGSAVE或BGREWRITEAOF,检查/data目录下是否生成dump.rdb和appendonly.aof文件。K8s层面用kubectl get pvc确认6个PVC都是BOUND状态。