Here is my Statefulset:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis-cluster
namespace: redis
spec:
serviceName: redis-cluster
replicas: 6
selector:
matchLabels:
app: redis-cluster
template:
metadata:
labels:
app: redis-cluster
spec:
schedulerName: redisScheduler
initContainers:
- name: config
image: redis:6.0.16
command: [ "sh", "-c" ]
args: ["cp -a \"/data/files/.\" \"/etc/redis/\""]
volumeMounts:
- name: redis-config
mountPath: /etc/redis/
- name: config
mountPath: /data/files/
containers:
- name: redis
image: redis:latest
ports:
- containerPort: 6379
name: client
- containerPort: 16379
name: gossip
command: [ "sh", "-c" ]
args: ["/etc/redis/update-node.sh;redis-server /etc/redis/redis.conf"]
volumeMounts:
- name: pv-data-redis
mountPath: /data
readOnly: false
- name: redis-config
mountPath: /etc/redis/
volumes:
- name: redis-config
emptyDir: {}
- name: config
configMap:
name: redis-config
defaultMode: 0744
volumeClaimTemplates:
- metadata:
name: pv-data-redis
spec:
accessModes:
- ReadWriteOnce
storageClassName: "local-storage"
resources:
requests:
storage: 500Mi
update-node.sh does a “meet” to the other instances up. I think its only required if an instance falls and its IP changes.
redisScheduler its a custom scheduler that just set each intance to a concrete worker-node of my convenience
At bootsrap I run a job that make sure the cluster its created and each instance has its role. Something like this:
redis-cli -h `dig +short redis-cluster-0.redis-cluster.redis.svc.cluster.local` -p 6379 PING;
redis-cli --cluster create \
`dig +short redis-cluster-0.redis-cluster.redis.svc.cluster.local`:6379 \
`dig +short redis-cluster-1.redis-cluster.redis.svc.cluster.local`:6379 \
`dig +short redis-cluster-2.redis-cluster.redis.svc.cluster.local`:6379 --cluster-yes; \
redis-cli -h `dig +short redis-cluster-0.redis-cluster.redis.svc.cluster.local` -p 6379 --cluster add-node \
`dig +short redis-cluster-3.redis-cluster.redis.svc.cluster.local`:6379 \
`dig +short redis-cluster-0.redis-cluster.redis.svc.cluster.local`:6379 --cluster-slave; \
redis-cli -h `dig +short redis-cluster-0.redis-cluster.redis.svc.cluster.local` -p 6379 --cluster add-node \
`dig +short redis-cluster-4.redis-cluster.redis.svc.cluster.local`:6379 \
`dig +short redis-cluster-1.redis-cluster.redis.svc.cluster.local`:6379 --cluster-slave; \
redis-cli -h `dig +short redis-cluster-0.redis-cluster.redis.svc.cluster.local` -p 6379 --cluster add-node \
`dig +short redis-cluster-5.redis-cluster.redis.svc.cluster.local`:6379 \
`dig +short redis-cluster-2.redis-cluster.redis.svc.cluster.local`:6379 --cluster-slave;
Thank you very much