redis-config.yaml (配置文件)
apiVersion: v1
kind: ConfigMap
metadata:name: redis-config
data:redis.conf: |# Redis general configuration bind 0.0.0.0
protected-mode no
port 6379
dir /data
appendonly yessentinel.conf: |sentinel monitor mymaster redis-master 6379 2sentinel down-after-milliseconds mymaster 5000sentinel failover-timeout mymaster 10000sentinel parallel-syncs mymaster 1
redis-master-statefulset.yaml (主)
apiVersion: apps/v1
kind: StatefulSet
metadata:name: redis-master
spec:serviceName: "redis-master"replicas: 1selector:matchLabels:app: redisrole: mastertemplate:metadata:labels:app: redisrole: masterspec:containers:- name: redisimage: redis:5.0.7command: ["redis-server", "/data/redis.conf"]volumeMounts:- name: redis-datamountPath: /data- name: configmountPath: /data/redis.confsubPath: redis.confvolumes:- name: configconfigMap:name: redis-configvolumeClaimTemplates:- metadata:name: redis-dataspec:storageClassName: "nfs-client-storageclass"accessModes: [ "ReadWriteOnce" ]resources:requests:storage: 1Gi
redis-slave-statefulset.yaml (从)
apiVersion: apps/v1
kind: StatefulSet
metadata:name: redis-slave
spec:serviceName: "redis-slave"replicas: 2selector:matchLabels:app: redisrole: slavetemplate:metadata:labels:app: redisrole: slavespec:containers:- name: redisimage: redis:5.0.7command: ["redis-server", "/data/redis.conf", "--slaveof", "redis-master", "6379"]volumeMounts:- name: redis-datamountPath: /data- name: configmountPath: /data/redis.confsubPath: redis.confvolumes:- name: configconfigMap:name: redis-configvolumeClaimTemplates:- metadata:name: redis-dataspec:accessModes: [ "ReadWriteOnce" ]storageClassName: "nfs-client-storageclass"resources:requests:storage: 1Gi
redis-service.yaml (端口)
apiVersion: v1
kind: Service
metadata:name: redis-master
spec:ports:- port: 6379targetPort: 6379selector:app: redisrole: master---apiVersion: v1
kind: Service
metadata:name: redis-slave
spec:ports:- port: 6379targetPort: 6379selector:app: redisrole: slave---apiVersion: v1
kind: Service
metadata:name: redis-sentinel
spec:ports:- port: 26379targetPort: 26379selector:app: redisrole: sentinel
redis-sentinel-statefulset.yaml (哨兵)
apiVersion: apps/v1
kind: Deployment
metadata:name: redis-sentinel
spec:replicas: 3selector:matchLabels:app: redisrole: sentineltemplate:metadata:labels:app: redisrole: sentinelspec:# 使用 initContainer 复制并修改权限initContainers:- name: copy-configimage: busybox:1.27command: ['sh', '-c', 'cp /data/sentinel.conf /tmp/sentinel.conf && chmod 644 /tmp/sentinel.conf']volumeMounts:- name: configmountPath: /data- name: sentinel-configmountPath: /tmp# Redis Sentinel 容器containers:- name: sentinelimage: redis:5.0.7command: ["redis-sentinel", "/tmp/sentinel.conf"]volumeMounts:- name: sentinel-configmountPath: /tmp# 卷定义volumes:- name: configconfigMap:name: redis-config- name: sentinel-configemptyDir: {}