Kubernetes operator for easy Redis Cluster
management
based on undermoon
using operator-sdk.
Usage
Build Helm Charts
make build-helm
Then you can see the following packages in the current directory:
- undermoon-operator-0.4.1.tgz
- undermoon-cluster-0.4.1.tgz
- undermoon-scheduler-0.4.1.tgz
Run the Operator
Run the undermoon-operator
:
Note that you can change the name my-undermoon-operator
.
helm install my-undermoon-operator undermoon-operator-0.4.1.tgz
Create an Undermoon Cluster
Create an undermoon cluster by installing helm charts package:
helm install \
--set 'cluster.clusterName=my-cluster-name' \
--set 'cluster.chunkNumber=1' \
--set 'cluster.maxMemory=2048' \
--set 'cluster.port=5299' \
my-cluster \
-n my-namespace \
undermoon-cluster-0.4.1.tgz
Fields here:
clusterName
: Name of the cluster. Should be less than 30 bytes. This can't be modifed.chunkNumber
: Used to specify the node number of the cluster. One chunk always consists of 2 masters and 2 replicas. Modify this to scale the cluster.maxMemory
: Specifies themaxmemory
config for each Redis node in MBs. Modify this will trigger rolling upgrade.port
: The service port your redis clients connect to. This can't be modifed.
Then you can access the service through my-cluster:5299
inside the Kubernetes cluster:
# This can only be run inside the Kubernetes cluster.
redis-cli -h my-cluster.my-namespace.svc.cluster.local -p 5299 -c get mykey
Scale the Cluster
kubectl edit undermoon/my-cluster
# Change the `chunkNumber`, save, and exit.
Then the cluster will automatically scale the cluster.
Using undermoon-scheduler
By default, undermoon does not guarantee master and replica redis instances in the same shard are not in the same node.
We need to use undermoon-scheduler
based on scheduler framework to achieve that.
This will install undermoon-scheduler
as a second scheduler.
You may want to replace the default scheduler instead.
See the docs from scheduler-plugins for more details.
helm install example-scheduler -n my-namespace "undermoon-scheduler-0.4.1.tgz"
Then specify the schedulerName
when installing undermoon-cluster
:
helm install \
--set 'cluster.clusterName=my-cluster-name' \
--set 'cluster.chunkNumber=1' \
--set 'cluster.maxMemory=2048' \
--set 'cluster.port=5299' \
--set "schedulerName=undermoon-scheduler" \
my-cluster \
-n my-namespace \
undermoon-cluster-0.4.1.tgz