Prerequisites
Before installing Redis Operator, ensure you have:
Kubernetes 1.25 or later
kubectl configured to access your cluster
Helm 3.8 or later (for Helm installation)
Cluster-admin permissions to install CRDs and RBAC resources
The operator requires cluster-wide permissions to manage RedisCluster resources across namespaces.
Installation Methods
Install CRDs
Install the Custom Resource Definitions for RedisCluster, RedisBackup, and RedisScheduledBackup: kubectl apply -f https://raw.githubusercontent.com/howl-cloud/redis-operator/main/config/crd/bases/redis.io_redisclusters.yaml
kubectl apply -f https://raw.githubusercontent.com/howl-cloud/redis-operator/main/config/crd/bases/redis.io_redisbackups.yaml
kubectl apply -f https://raw.githubusercontent.com/howl-cloud/redis-operator/main/config/crd/bases/redis.io_redisscheduledbackups.yaml
Verify the CRDs are installed: kubectl get crds | grep redis.io
Expected output: redisbackups.redis.io 2026-02-28T10:30:00Z
redisclusters.redis.io 2026-02-28T10:30:00Z
redisscheduledbackups.redis.io 2026-02-28T10:30:00Z
Install the Operator
Install the operator using Helm: helm upgrade --install redis-operator oci://ghcr.io/howl-cloud/charts/redis-operator \
--namespace redis-operator-system \
--create-namespace \
--version 0.1.0
The operator runs as a single replica with leader election enabled by default. For production, this provides high availability if the pod is rescheduled.
Verify Installation
Check that the operator is running: kubectl get pods -n redis-operator-system
Expected output: NAME READY STATUS RESTARTS AGE
redis-operator-7d4b9c5f6b-xyz12 1/1 Running 0 30s
Check the operator logs: kubectl logs -n redis-operator-system -l app.kubernetes.io/name=redis-operator
Helm Configuration
The Helm chart exposes the following configuration values from charts/redis-operator/Chart.yaml:
Chart Metadata:
Version : 0.1.0
App Version : 0.1.0
Description : A Kubernetes operator for managing Redis 7.2 clusters with automatic failover, rolling updates, and backup support
Common Configuration Options
values.yaml (Default)
values.yaml (Production)
values.yaml (Custom Image)
# Number of operator replicas (usually 1 with leader election)
replicaCount : 1
image :
repository : redis-operator
pullPolicy : IfNotPresent
tag : "" # Defaults to chart appVersion
resources :
limits :
cpu : 500m
memory : 256Mi
requests :
cpu : 100m
memory : 128Mi
leaderElection :
enabled : true
metrics :
enabled : true
port : 9090
webhook :
enabled : true
port : 9443
Install with Custom Values
Create a values.yaml file with your configuration:
image :
repository : ghcr.io/howl-cloud/redis-operator
tag : "0.1.0"
resources :
limits :
cpu : 1000m
memory : 512Mi
requests :
cpu : 200m
memory : 256Mi
metrics :
enabled : true
serviceMonitor :
enabled : true
monitoring :
alertingRules :
enabled : true
grafanaDashboard :
enabled : true
podMonitor :
enabled : true
Install with custom values:
helm upgrade --install redis-operator oci://ghcr.io/howl-cloud/charts/redis-operator \
--namespace redis-operator-system \
--create-namespace \
--values values.yaml
Monitoring Setup
Prometheus Metrics
The operator exposes Prometheus metrics on port 9090 by default:
Controller metrics : Reconciliation duration, queue depth, error rates
Instance metrics : Redis instance health, replication lag, memory usage
# Enable ServiceMonitor for operator controller metrics
metrics :
enabled : true
serviceMonitor :
enabled : true
interval : 30s
scrapeTimeout : 10s
labels :
prometheus : kube-prometheus
Alerting Rules
Enable default Prometheus alerting rules:
monitoring :
alertingRules :
enabled : true
# Replication lag threshold (10MB default)
replicationLagThresholdBytes : 10485760
# Memory usage threshold (85% default)
memoryUsageThresholdRatio : 0.85
# Backup age threshold (24 hours default)
backupMissingSeconds : 86400
Default alerts include:
RedisReplicationLagHigh: Replica lag exceeds threshold
RedisMemoryUsageHigh: Memory usage above threshold
RedisBackupMissing: No successful backup in threshold period
RedisClusterDegraded: Cluster not in Healthy phase
Grafana Dashboard
Enable the default Grafana dashboard:
monitoring :
grafanaDashboard :
enabled : true
labels :
grafana_dashboard : "1"
The dashboard includes:
Cluster health and phase transitions
Replication lag and topology
Memory usage and eviction rates
Operations per second and latency
Backup success rates
Webhook Configuration
The operator includes admission webhooks for validation and defaulting. The PKI is self-managed and does not require cert-manager.
Webhooks are enabled by default:
webhook :
enabled : true
port : 9443
# Leave empty to auto-generate and rotate certificates
certSecretName : ""
The operator automatically:
Generates a self-signed CA
Issues a server certificate for the webhook service
Rotates certificates before expiration
Updates ValidatingWebhookConfiguration and MutatingWebhookConfiguration with the CA bundle
Disable Webhooks
Disabling webhooks removes validation and defaulting. Invalid configurations may be accepted and cause reconciliation failures.
To disable webhooks:
helm upgrade --install redis-operator oci://ghcr.io/howl-cloud/charts/redis-operator \
--namespace redis-operator-system \
--create-namespace \
--set webhook.enabled= false
RBAC and Security
The operator requires cluster-wide permissions defined in config/rbac/role.yaml:
Cluster-scoped : CRDs, ClusterRoles, ClusterRoleBindings
Namespace-scoped : Pods, PVCs, Services, Secrets, ConfigMaps, Events
Leader election : Leases in the operator namespace
All resources are created with:
podSecurityContext :
runAsNonRoot : true
seccompProfile :
type : RuntimeDefault
Security Context (Container)
containerSecurityContext :
allowPrivilegeEscalation : false
readOnlyRootFilesystem : true
runAsNonRoot : true
capabilities :
drop :
- ALL
Upgrade the Operator
Upgrade to a new version:
helm upgrade redis-operator oci://ghcr.io/howl-cloud/charts/redis-operator \
--namespace redis-operator-system \
--version 0.2.0
Upgrading the operator does not automatically upgrade existing Redis clusters. You must update the spec.imageName field in each RedisCluster resource to trigger a rolling update.
Uninstall
Uninstall the operator:
helm uninstall redis-operator --namespace redis-operator-system
Uninstalling the operator does NOT delete existing RedisCluster resources or their data. The CRDs and custom resources remain in the cluster.
To completely remove the operator and CRDs:
# Delete all RedisCluster resources first
kubectl delete redisclusters --all --all-namespaces
# Uninstall the operator
helm uninstall redis-operator --namespace redis-operator-system
# Delete CRDs (this deletes all custom resources)
kubectl delete crd redisclusters.redis.io
kubectl delete crd redisbackups.redis.io
kubectl delete crd redisscheduledbackups.redis.io
Next Steps
Quick Start Deploy your first Redis cluster
API Reference Explore RedisCluster configuration options