Skip to content

Instantly share code, notes, and snippets.

@williamcaban
Last active June 3, 2022 03:55
Show Gist options
  • Save williamcaban/c25c99cbf3208aa2708470b6b5cb27f6 to your computer and use it in GitHub Desktop.
Save williamcaban/c25c99cbf3208aa2708470b6b5cb27f6 to your computer and use it in GitHub Desktop.
  • Installing the Redis Operator
# create namespace for operator
oc create ns redis-operator

# register Helm repo
helm repo add ot-helm https://ot-container-kit.github.io/helm-charts/

# install redis-operator using helm
helm upgrade redis-operator ot-helm/redis-operator \
--install --namespace redis-operator

# validate operator is running
oc get pods -n redis-operator
NAME                              READY   STATUS    RESTARTS   AGE
redis-operator-78c6c95b78-4w5qp   1/1     Running   0          86m
  • The redis cluster has as pre-requisite for the cluster to have persistent storage. For lab setup with external NFS server.
# create PVs
oc create -f 02-redis-pvs.yaml

# example verificaton
oc get pv
NAME   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                    STORAGECLASS   REASON   AGE
pv1    5Gi        RWO            Retain           Available                            slow                    10m
pv2    5Gi        RWO            Retain           Available                            slow                    10m
pv3    5Gi        RWO            Retain           Available                            slow                    10m
pv4    5Gi        RWO            Retain           Available                            slow                    10m
pv5    5Gi        RWO            Retain           Available                            slow                    10m
pv6    5Gi        RWO            Retain           Available                            slow                    10m
  • Deploy redis cluster in redis-cluster namespace
# create CR definition
oc create -f 03-redis-cluster.yaml

# NOTE: it will bring one leader and follower at a time and
# only when those are sync, it will proceed with the next one.
# It may take several minutes for all the pods to become available.

# Sample validation
oc get pvc
NAME                                              STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
redis-cluster-follower-redis-cluster-follower-0   Bound    pv2      5Gi        RWO            slow           22m
redis-cluster-follower-redis-cluster-follower-1   Bound    pv1      5Gi        RWO            slow           22m
redis-cluster-follower-redis-cluster-follower-2   Bound    pv4      5Gi        RWO            slow           21m
redis-cluster-leader-redis-cluster-leader-0       Bound    pv5      5Gi        RWO            slow           22m
redis-cluster-leader-redis-cluster-leader-1       Bound    pv6      5Gi        RWO            slow           22m
redis-cluster-leader-redis-cluster-leader-2       Bound    pv3      5Gi        RWO            slow           21m
oc get pods
NAME                       READY   STATUS    RESTARTS   AGE
redis-cluster-follower-0   2/2     Running   0          23m
redis-cluster-follower-1   2/2     Running   0          22m
redis-cluster-follower-2   2/2     Running   0          22m
redis-cluster-leader-0     2/2     Running   0          23m
redis-cluster-leader-1     2/2     Running   0          22m
redis-cluster-leader-2     2/2     Running   0          22m
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv1
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: slow
nfs:
path: /kvm-nfs/pv1
server: 192.168.1.15
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv2
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: slow
nfs:
path: /kvm-nfs/pv2
server: 192.168.1.15
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv3
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: slow
nfs:
path: /kvm-nfs/pv3
server: 192.168.1.15
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv4
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: slow
nfs:
path: /kvm-nfs/pv4
server: 192.168.1.15
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv5
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: slow
nfs:
path: /kvm-nfs/pv5
server: 192.168.1.15
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv6
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: slow
nfs:
path: /kvm-nfs/pv6
server: 192.168.1.15
# Redis Cluster
---
apiVersion: v1
kind: Namespace
metadata:
name: redis-cluster
spec: {}
---
apiVersion: redis.redis.opstreelabs.in/v1beta1
kind: RedisCluster
metadata:
name: redis-cluster
namespace: redis-cluster
spec:
redisLeader:
serviceType: ClusterIP
replicas: 3
kubernetesConfig:
resources:
limits:
cpu: 150m
memory: 128Mi
requests:
cpu: 150m
memory: 128Mi
image: 'quay.io/opstree/redis:v6.2.5'
imagePullPolicy: IfNotPresent
serviceType: ClusterIP
redisFollower:
serviceType: ClusterIP
replicas: 3
storage:
volumeClaimTemplate:
spec:
storageClassName: slow
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
redisExporter:
enabled: true
image: 'quay.io/opstree/redis-exporter:1.0'
clusterSize: 3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment