OT-CONTAINER-KIT / redis-operator

A golang based redis operator that will make/oversee Redis standalone/cluster/replication/sentinel mode setup on top of the Kubernetes.
https://ot-redis-operator.netlify.app/
Apache License 2.0
734 stars 207 forks source link

ClusterSize Parameter does not work #861

Open iamNoah1 opened 3 months ago

iamNoah1 commented 3 months ago

What version of redis operator are you using?

kubectl logs <_redis-operator_pod_name> -n <namespace>

{"level":"info","ts":1712133634.5022123,"logger":"controllers.RedisCluster","msg":"Reconciling opstree redis Cluster controller","Request.Namespace":"default","Request.Name":"redis-cluster"}
{"level":"info","ts":1712133634.529096,"logger":"controller_redis","msg":"Redis PodDisruptionBudget get action failed","Request.PodDisruptionBudget.Namespace":"default","Request.PodDisruptionBudget.Name":"redis-cluster-leader"}
{"level":"info","ts":1712133634.5774622,"logger":"controller_redis","msg":"Redis PodDisruptionBudget get action failed","Request.PodDisruptionBudget.Namespace":"default","Request.PodDisruptionBudget.Name":"redis-cluster-follower"}
{"level":"info","ts":1712133634.5798914,"logger":"controllers.RedisCluster","msg":"Creating redis cluster by executing cluster creation commands","Request.Namespace":"default","Request.Name":"redis-cluster","Leaders.Ready":"3","Followers.Ready":"3"}
{"level":"info","ts":1712133634.5862124,"logger":"controllers.RedisCluster","msg":"All leader are part of the cluster, adding follower/replicas","Request.Namespace":"default","Request.Name":"redis-cluster","Leaders.Count":3,"Instance.Size":3,"Follower.Replicas":3}
{"level":"error","ts":1712133640.6056287,"logger":"controller_redis","msg":"Could not execute command","Request.RedisManager.Namespace":"default","Request.RedisManager.Name":"redis-cluster","Command":["redis-cli","--cluster","add-node","redis-cluster-follower-0.redis-cluster-follower-headless.default.svc:6379","redis-cluster-leader-0.redis-cluster-leader-headless.default.svc:6379","--cluster-slave"],"Output":">>> Adding node redis-cluster-follower-0.redis-cluster-follower-headless.default.svc:6379 to cluster redis-cluster-leader-0.redis-cluster-leader-headless.default.svc:6379\n>>> Performing Cluster Check (using node redis-cluster-leader-0.redis-cluster-leader-headless.default.svc:6379)\nM: dbc39bcbc31843cddd7438fb9f886f7bad4e3ddf redis-cluster-leader-0.redis-cluster-leader-headless.default.svc:6379\n   slots:[0-5460] (5461 slots) master\n[OK] All nodes agree about slots configuration.\n>>> Check for open slots...\n>>> Check slots coverage...\n[ERR] Not all 16384 slots are covered by nodes.\n\n","Error":"Could not connect to Redis at 10.1.0.235:6379: Host is unreachable\nCould not connect to Redis at 10.1.0.236:6379: Host is unreachable\n","error":"command terminated with exit code 1","stacktrace":"github.com/OT-CONTAINER-KIT/redis-operator/k8sutils.ExecuteRedisReplicationCommand\n\t/workspace/k8sutils/redis.go:187\ngithub.com/OT-CONTAINER-KIT/redis-operator/controllers.(*RedisClusterReconciler).Reconcile\n\t/workspace/controllers/rediscluster_controller.go:196\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:114\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:311\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:266\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:227"}
{"level":"error","ts":1712133646.7414541,"logger":"controller_redis","msg":"Could not execute command","Request.RedisManager.Namespace":"default","Request.RedisManager.Name":"redis-cluster","Command":["redis-cli","--cluster","add-node","redis-cluster-follower-1.redis-cluster-follower-headless.default.svc:6379","redis-cluster-leader-1.redis-cluster-leader-headless.default.svc:6379","--cluster-slave"],"Output":">>> Adding node redis-cluster-follower-1.redis-cluster-follower-headless.default.svc:6379 to cluster redis-cluster-leader-1.redis-cluster-leader-headless.default.svc:6379\n>>> Performing Cluster Check (using node redis-cluster-leader-1.redis-cluster-leader-headless.default.svc:6379)\nM: 991fd770f85249f07b8a6d2a18ee60d2884ea8fa redis-cluster-leader-1.redis-cluster-leader-headless.default.svc:6379\n   slots:[5461-10922] (5462 slots) master\n[OK] All nodes agree about slots configuration.\n>>> Check for open slots...\n>>> Check slots coverage...\n[ERR] Not all 16384 slots are covered by nodes.\n\n","Error":"Could not connect to Redis at 10.1.0.236:6379: Host is unreachable\nCould not connect to Redis at 10.1.0.234:6379: Host is unreachable\n","error":"command terminated with exit code 1","stacktrace":"github.com/OT-CONTAINER-KIT/redis-operator/k8sutils.ExecuteRedisReplicationCommand\n\t/workspace/k8sutils/redis.go:187\ngithub.com/OT-CONTAINER-KIT/redis-operator/controllers.(*RedisClusterReconciler).Reconcile\n\t/workspace/controllers/rediscluster_controller.go:196\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:114\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:311\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:266\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:227"}
{"level":"error","ts":1712133652.8875878,"logger":"controller_redis","msg":"Could not execute command","Request.RedisManager.Namespace":"default","Request.RedisManager.Name":"redis-cluster","Command":["redis-cli","--cluster","add-node","redis-cluster-follower-2.redis-cluster-follower-headless.default.svc:6379","redis-cluster-leader-2.redis-cluster-leader-headless.default.svc:6379","--cluster-slave"],"Output":">>> Adding node redis-cluster-follower-2.redis-cluster-follower-headless.default.svc:6379 to cluster redis-cluster-leader-2.redis-cluster-leader-headless.default.svc:6379\n>>> Performing Cluster Check (using node redis-cluster-leader-2.redis-cluster-leader-headless.default.svc:6379)\nM: 36a22882bba992b881a56876b7609dc33477cb37 redis-cluster-leader-2.redis-cluster-leader-headless.default.svc:6379\n   slots:[10923-16383] (5461 slots) master\n[OK] All nodes agree about slots configuration.\n>>> Check for open slots...\n>>> Check slots coverage...\n[ERR] Not all 16384 slots are covered by nodes.\n\n","Error":"Could not connect to Redis at 10.1.0.235:6379: Host is unreachable\nCould not connect to Redis at 10.1.0.234:6379: Host is unreachable\n","error":"command terminated with exit code 1","stacktrace":"github.com/OT-CONTAINER-KIT/redis-operator/k8sutils.ExecuteRedisReplicationCommand\n\t/workspace/k8sutils/redis.go:187\ngithub.com/OT-CONTAINER-KIT/redis-operator/controllers.(*RedisClusterReconciler).Reconcile\n\t/workspace/controllers/rediscluster_controller.go:196\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:114\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:311\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:266\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:227"}
{"level":"info","ts":1712133652.8951461,"logger":"controllers.RedisCluster","msg":"Will reconcile redis cluster operator in again 10 seconds","Request.Namespace":"default","Request.Name":"redis-cluster"}
{"level":"error","ts":1712133652.906935,"logger":"controller_redis","msg":"Failed to update status","Request.Namespace":"default","Request.Name":"redis-cluster","error":"Operation cannot be fulfilled on redisclusters.redis.redis.opstreelabs.in \"redis-cluster\": the object has been modified; please apply your changes to the latest version and try again","stacktrace":"github.com/OT-CONTAINER-KIT/redis-operator/controllers.(*RedisClusterReconciler).Reconcile\n\t/workspace/controllers/rediscluster_controller.go:221\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:114\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:311\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:266\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:227"}
{"level":"error","ts":1712133652.9070776,"logger":"controller.rediscluster","msg":"Reconciler error","reconciler group":"redis.redis.opstreelabs.in","reconciler kind":"RedisCluster","name":"redis-cluster","namespace":"default","error":"Operation cannot be fulfilled on redisclusters.redis.redis.opstreelabs.in \"redis-cluster\": the object has been modified; please apply your changes to the latest version and try again","stacktrace":"sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:266\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:227"}
{"level":"info","ts":1712133652.9071612,"logger":"controllers.RedisCluster","msg":"Reconciling opstree redis Cluster controller","Request.Namespace":"default","Request.Name":"redis-cluster"}
{"level":"info","ts":1712133652.9334755,"logger":"controller_redis","msg":"Redis PodDisruptionBudget get action failed","Request.PodDisruptionBudget.Namespace":"default","Request.PodDisruptionBudget.Name":"redis-cluster-leader"}
{"level":"info","ts":1712133652.9495625,"logger":"controller_redis","msg":"Redis PodDisruptionBudget get action failed","Request.PodDisruptionBudget.Namespace":"default","Request.PodDisruptionBudget.Name":"redis-cluster-follower"}
{"level":"info","ts":1712133652.9511926,"logger":"controllers.RedisCluster","msg":"Creating redis cluster by executing cluster creation commands","Request.Namespace":"default","Request.Name":"redis-cluster","Leaders.Ready":"3","Followers.Ready":"3"}
{"level":"info","ts":1712133652.9745848,"logger":"controllers.RedisCluster","msg":"All leader are part of the cluster, adding follower/replicas","Request.Namespace":"default","Request.Name":"redis-cluster","Leaders.Count":3,"Instance.Size":3,"Follower.Replicas":3}
{"level":"error","ts":1712133659.0275304,"logger":"controller_redis","msg":"Could not execute command","Request.RedisManager.Namespace":"default","Request.RedisManager.Name":"redis-cluster","Command":["redis-cli","--cluster","add-node","redis-cluster-follower-0.redis-cluster-follower-headless.default.svc:6379","redis-cluster-leader-0.redis-cluster-leader-headless.default.svc:6379","--cluster-slave"],"Output":">>> Adding node redis-cluster-follower-0.redis-cluster-follower-headless.default.svc:6379 to cluster redis-cluster-leader-0.redis-cluster-leader-headless.default.svc:6379\n>>> Performing Cluster Check (using node redis-cluster-leader-0.redis-cluster-leader-headless.default.svc:6379)\nM: dbc39bcbc31843cddd7438fb9f886f7bad4e3ddf redis-cluster-leader-0.redis-cluster-leader-headless.default.svc:6379\n   slots:[0-5460] (5461 slots) master\n[OK] All nodes agree about slots configuration.\n>>> Check for open slots...\n>>> Check slots coverage...\n[ERR] Not all 16384 slots are covered by nodes.\n\n","Error":"Could not connect to Redis at 10.1.0.235:6379: Host is unreachable\nCould not connect to Redis at 10.1.0.236:6379: Host is unreachable\n","error":"command terminated with exit code 1","stacktrace":"github.com/OT-CONTAINER-KIT/redis-operator/k8sutils.ExecuteRedisReplicationCommand\n\t/workspace/k8sutils/redis.go:187\ngithub.com/OT-CONTAINER-KIT/redis-operator/controllers.(*RedisClusterReconciler).Reconcile\n\t/workspace/controllers/rediscluster_controller.go:196\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:114\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:311\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:266\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:227"}
{"level":"error","ts":1712133665.192103,"logger":"controller_redis","msg":"Could not execute command","Request.RedisManager.Namespace":"default","Request.RedisManager.Name":"redis-cluster","Command":["redis-cli","--cluster","add-node","redis-cluster-follower-1.redis-cluster-follower-headless.default.svc:6379","redis-cluster-leader-1.redis-cluster-leader-headless.default.svc:6379","--cluster-slave"],"Output":">>> Adding node redis-cluster-follower-1.redis-cluster-follower-headless.default.svc:6379 to cluster redis-cluster-leader-1.redis-cluster-leader-headless.default.svc:6379\n>>> Performing Cluster Check (using node redis-cluster-leader-1.redis-cluster-leader-headless.default.svc:6379)\nM: 991fd770f85249f07b8a6d2a18ee60d2884ea8fa redis-cluster-leader-1.redis-cluster-leader-headless.default.svc:6379\n   slots:[5461-10922] (5462 slots) master\n[OK] All nodes agree about slots configuration.\n>>> Check for open slots...\n>>> Check slots coverage...\n[ERR] Not all 16384 slots are covered by nodes.\n\n","Error":"Could not connect to Redis at 10.1.0.236:6379: Host is unreachable\nCould not connect to Redis at 10.1.0.234:6379: Host is unreachable\n","error":"command terminated with exit code 1","stacktrace":"github.com/OT-CONTAINER-KIT/redis-operator/k8sutils.ExecuteRedisReplicationCommand\n\t/workspace/k8sutils/redis.go:187\ngithub.com/OT-CONTAINER-KIT/redis-operator/controllers.(*RedisClusterReconciler).Reconcile\n\t/workspace/controllers/rediscluster_controller.go:196\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:114\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:311\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:266\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:227"}
{"level":"error","ts":1712133671.3250766,"logger":"controller_redis","msg":"Could not execute command","Request.RedisManager.Namespace":"default","Request.RedisManager.Name":"redis-cluster","Command":["redis-cli","--cluster","add-node","redis-cluster-follower-2.redis-cluster-follower-headless.default.svc:6379","redis-cluster-leader-2.redis-cluster-leader-headless.default.svc:6379","--cluster-slave"],"Output":">>> Adding node redis-cluster-follower-2.redis-cluster-follower-headless.default.svc:6379 to cluster redis-cluster-leader-2.redis-cluster-leader-headless.default.svc:6379\n>>> Performing Cluster Check (using node redis-cluster-leader-2.redis-cluster-leader-headless.default.svc:6379)\nM: 36a22882bba992b881a56876b7609dc33477cb37 redis-cluster-leader-2.redis-cluster-leader-headless.default.svc:6379\n   slots:[10923-16383] (5461 slots) master\n[OK] All nodes agree about slots configuration.\n>>> Check for open slots...\n>>> Check slots coverage...\n[ERR] Not all 16384 slots are covered by nodes.\n\n","Error":"Could not connect to Redis at 10.1.0.235:6379: Host is unreachable\nCould not connect to Redis at 10.1.0.234:6379: Host is unreachable\n","error":"command terminated with exit code 1","stacktrace":"github.com/OT-CONTAINER-KIT/redis-operator/k8sutils.ExecuteRedisReplicationCommand\n\t/workspace/k8sutils/redis.go:187\ngithub.com/OT-CONTAINER-KIT/redis-operator/controllers.(*RedisClusterReconciler).Reconcile\n\t/workspace/controllers/rediscluster_controller.go:196\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:114\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:311\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:266\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:227"}
{"level":"info","ts":1712133671.341761,"logger":"controllers.RedisCluster","msg":"Will reconcile redis cluster operator in again 10 seconds","Request.Namespace":"default","Request.Name":"redis-cluster"}
{"level":"info","ts":1712133671.3742952,"logger":"controllers.RedisCluster","msg":"Reconciling opstree redis Cluster controller","Request.Namespace":"default","Request.Name":"redis-cluster"}
{"level":"info","ts":1712133671.412522,"logger":"controller_redis","msg":"Redis PodDisruptionBudget get action failed","Request.PodDisruptionBudget.Namespace":"default","Request.PodDisruptionBudget.Name":"redis-cluster-leader"}
{"level":"info","ts":1712133671.434149,"logger":"controller_redis","msg":"Redis PodDisruptionBudget get action failed","Request.PodDisruptionBudget.Namespace":"default","Request.PodDisruptionBudget.Name":"redis-cluster-follower"}
{"level":"info","ts":1712133671.436379,"logger":"controllers.RedisCluster","msg":"Creating redis cluster by executing cluster creation commands","Request.Namespace":"default","Request.Name":"redis-cluster","Leaders.Ready":"3","Followers.Ready":"3"}
{"level":"info","ts":1712133671.4738774,"logger":"controllers.RedisCluster","msg":"All leader are part of the cluster, adding follower/replicas","Request.Namespace":"default","Request.Name":"redis-cluster","Leaders.Count":3,"Instance.Size":3,"Follower.Replicas":3}
{"level":"error","ts":1712133677.4801137,"logger":"controller_redis","msg":"Could not execute command","Request.RedisManager.Namespace":"default","Request.RedisManager.Name":"redis-cluster","Command":["redis-cli","--cluster","add-node","redis-cluster-follower-0.redis-cluster-follower-headless.default.svc:6379","redis-cluster-leader-0.redis-cluster-leader-headless.default.svc:6379","--cluster-slave"],"Output":">>> Adding node redis-cluster-follower-0.redis-cluster-follower-headless.default.svc:6379 to cluster redis-cluster-leader-0.redis-cluster-leader-headless.default.svc:6379\n>>> Performing Cluster Check (using node redis-cluster-leader-0.redis-cluster-leader-headless.default.svc:6379)\nM: dbc39bcbc31843cddd7438fb9f886f7bad4e3ddf redis-cluster-leader-0.redis-cluster-leader-headless.default.svc:6379\n   slots:[0-5460] (5461 slots) master\n[OK] All nodes agree about slots configuration.\n>>> Check for open slots...\n>>> Check slots coverage...\n[ERR] Not all 16384 slots are covered by nodes.\n\n","Error":"Could not connect to Redis at 10.1.0.235:6379: Host is unreachable\nCould not connect to Redis at 10.1.0.236:6379: Host is unreachable\n","error":"command terminated with exit code 1","stacktrace":"github.com/OT-CONTAINER-KIT/redis-operator/k8sutils.ExecuteRedisReplicationCommand\n\t/workspace/k8sutils/redis.go:187\ngithub.com/OT-CONTAINER-KIT/redis-operator/controllers.(*RedisClusterReconciler).Reconcile\n\t/workspace/controllers/rediscluster_controller.go:196\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:114\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:311\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:266\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.0/pkg/internal/controller/controller.go:227"}

redis-operator version: redis-operator-0.15.9

Does this issue reproduce with the latest release? This is the latest helm chart I could get

What operating system and processor architecture are you using (kubectl version)?

kubectl version Output
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.2", GitCommit:"7f6f68fdabc4df88cfea2dcf9a19b2b830f1e647", GitTreeState:"clean", BuildDate:"2023-05-17T14:20:07Z", GoVersion:"go1.20.4", Compiler:"gc", Platform:"darwin/arm64"}
Kustomize Version: v5.0.1
Server Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.2", GitCommit:"7f6f68fdabc4df88cfea2dcf9a19b2b830f1e647", GitTreeState:"clean", BuildDate:"2023-05-17T14:13:28Z", GoVersion:"go1.20.4", Compiler:"gc", Platform:"linux/arm64"}

What did you do?

What did you expect to see? A cluster with one leader and one failover node

What did you see instead? A cluster with three leader and three failover nodes

wkd-woo commented 3 months ago

I think 'clusterSize' should be the same value as 'leader.replicas' + 'follower.replicas'.

'RedisCluster' doesn't mean "a set" of Redis cluster. This means one member, as a 'Custom Resource' in itself called the 'RedisCluster'.

Try clusterSize=6.

and as you already know, redis cluster 'one set' configuration requires at least three master leaders.

iamNoah1 commented 3 months ago

Thanks for the reply @wkd-woo. I cannot confirm that clusterSize is equal to leader.replicas + follower.replicas. It does not matter if I configure it to 1, 3 or 6, it always remains 3 leaders and 3 followers.

According to different information sources like this it should work like I expected which is when I set ClusterSize to 5 having 5 leader and 5 follower nodes. But it does not :) ...

wkd-woo commented 3 months ago

@iamNoah1 Oh, I understand your situation. I've been wandering around with the same problem before.

I'll give you the test manifest I'm using. I recommend override the .yaml file with '-f' rather than 'set'

helm install redis-cluster helm/chart/redis-cluster -f values.yaml

---
redisCluster:
  name: ""
  clusterSize: 6
  clusterVersion: v7
  persistenceEnabled: false
  image: quay.io/opstree/redis
  tag: v7.0.12
  imagePullPolicy: IfNotPresent
  imagePullSecrets: {}
  redisSecret:
    secretName: ""
    secretKey: ""
  resources:
    limits:
      cpu: 101m
      memory: 512Mi
  leader:
    replicas: 3
    serviceType: ClusterIP
    affinity:
    tolerations: []
    nodeSelector:
      kubernetes.io/os: linux
      dbservice: redis
      topology: cluster

    securityContext: {}
    pdb:
      enabled: false
      maxUnavailable: 1
      minAvailable: 1

  follower:
    replicas: 3
    serviceType: ClusterIP
    affinity:
    tolerations: []
    nodeSelector:
      dbservice: redis
      topology: cluster
    securityContext: {}
    pdb:
      enabled: false
      maxUnavailable: 1
      minAvailable: 1

labels:
  topology: cluster
  dbservice: redis

externalConfig:
  enabled: true
  data: |
     #### YOUR CONFIGURATION FOR REDIS ####

externalService:
  enabled: true
  # annotations:
  #   foo: bar
  serviceType: NodePort
  port: 6379

serviceMonitor:
  enabled: false
  interval: 30s
  scrapeTimeout: 10s
  namespace: monitoring

redisExporter:
  enabled: true
  image: quay.io/opstree/redis-exporter
  tag: v1.44.0
  imagePullPolicy: IfNotPresent
  resources:
    limits:
      cpu: 100m
      memory: 128Mi
  env: []

sidecars:
  name: ""
  image: ""
  imagePullPolicy: "IfNotPresent"
  resources:
    limits:
      cpu: "100m"
      memory: "128Mi"
    requests:
      cpu: "50m"
      memory: "64Mi"
  env: {}

initContainer:
  enabled: false
  image: ""
  imagePullPolicy: "IfNotPresent"
  resources: {}
  env: []
  command: []
  args: []

priorityClassName: ""

storageSpec:
  volumeClaimTemplate:
    spec:
      # storageClassName: local-storage
      storageClassName: csi-cinder-sc-delete
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 10Gi
      # selector:
      #   matchLabels:
      #     dbservice: redis
      #     topology: cluster
  nodeConfVolume: true
  nodeConfVolumeClaimTemplate:
    spec:
      # storageClassName: local-storage
      storageClassName: csi-cinder-sc-delete
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 10Gi
      # selector:
      #   matchLabels:
      #     dbservice: redis
      #     topology: cluster

podSecurityContext:
  runAsUser: 1000
  fsGroup: 1000

TLS:
  ca: ca.key
  cert: tls.crt
  key: tls.key
  secret:
    secretName: ""
acl:
  secret:
    secretName: ""
#env:

serviceAccountName: "redis-operator"