Redis持久化-k8s
概要
- 由于Redis在K8s上跑,随着容器重启或重建Redis的数据也会销毁,所以需要持久化配置把重建前的数据保存,随容器重启或重建自动导入新创建的容器中,本文采用Redis的混合模式作为持久化配置。
k8s-KubeSphere
k8s-configMap
- 创建k8s的配置字典(
redis-conf
),设置Redis的配置文件的持久化参数,开启混合模式作为持久化。
kind: ConfigMap
apiVersion: v1
metadata:name: redis-confnamespace: yyds-sys
data:redis.conf: |-##配置示例port 6379bind 0.0.0.0requirepass yyds-2025## 启用 AOF 持久化appendonly yes## 启用混合持久化 (Redis 4.0+)aof-use-rdb-preamble yes## AOF 同步策略appendfsync everysecappendfilename "appendonly.aof"## RDB 触发规则save 900 1save 300 10save 60 10000## 持久化文件存储目录dir /datadbfilename dump.rdb## AOF 重写配置auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb
k8s-pv
- 创建k8s的持久卷(
redis-data-pv
),用于保存Redis持久化的数据
kind: PersistentVolume
apiVersion: v1
metadata:name: redis-data-pvfinalizers:- kubernetes.io/pv-protection
spec:capacity:storage: 20GihostPath:path: /data/redis-data/type: DirectoryOrCreateaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: redisvolumeMode: Filesystem
k8s-pvc
- 创建k8s的持久卷声明(
redis-data-pvc
),用于挂载在Redis的pod中
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: redis-data-pvcnamespace: yyds-sysannotations:pv.kubernetes.io/bind-completed: 'yes'pv.kubernetes.io/bound-by-controller: 'yes'volume.beta.kubernetes.io/storage-provisioner: disk.csi.qingcloud.comvolume.kubernetes.io/selected-node: node2volume.kubernetes.io/storage-provisioner: disk.csi.qingcloud.com
spec:accessModes:- ReadWriteOnceresources:requests:storage: 20GivolumeName: redis-data-pvstorageClassName: redis-data-pvvolumeMode: Filesystem
k8s-pod
kind: Deployment
apiVersion: apps/v1
metadata:name: sys-redisnamespace: yyds-syslabels:app: sys-redisversion: v1
spec:replicas: 1selector:matchLabels:app: sys-redisversion: v1template:metadata:creationTimestamp: nulllabels:app: sys-redisversion: v1spec:volumes:- name: host-timehostPath:path: /etc/localtimetype: ''- name: volume-jvv272configMap:name: redis-confdefaultMode: 420- name: redis-datapersistentVolumeClaim:claimName: redis-data-pvccontainers:- name: sys-redisimage: 'docker.1ms.run/redis:alpine'command:- redis-serverargs:- /etc/redis/redis.confports:- name: tcp-sys-rediscontainerPort: 6379protocol: TCPresources:limits:cpu: '2'memory: 4000MivolumeMounts:- name: host-timereadOnly: truemountPath: /etc/localtime- name: volume-j2227qreadOnly: truemountPath: /etc/redis- name: redis-datamountPath: /dataterminationMessagePath: /dev/termination-logterminationMessagePolicy: FileimagePullPolicy: IfNotPresentrestartPolicy: AlwaysterminationGracePeriodSeconds: 30dnsPolicy: ClusterFirstserviceAccountName: defaultserviceAccount: defaultsecurityContext: {}schedulerName: default-schedulerstrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 25%maxSurge: 25%revisionHistoryLimit: 10progressDeadlineSeconds: 600
检验持久化
# 1)进入Redis容器中、连上Redis
redis-cli -a yourpassword -h 127.0.0.1 -p 6379
# 2) 查看数据大小
keys *
dbsize
# 3) 检查Redis的数据文件是否已经创建
# 4)删除k8s中的pod
# 5) 在k8s中重新创建Redis的pod,看是否会自动导入删除前的数据