Skip to main content

Overview

Redis is a high-performance in-memory data store. This template deploys a Redis master-replica cluster with Redis Sentinel for automatic failover and leader election.
This template does not create a GVC. You must deploy it into an existing GVC.

What Gets Created

  • Stateful Redis Workload — (RELEASE_NAME-redis): a master-replica cluster. Replica 0 starts as the primary; all others replicate from it.
  • Stateful Sentinel Workload — (RELEASE_NAME-sentinel): monitors the Redis cluster and orchestrates automatic failover when the primary becomes unavailable.
  • Secret — An opaque secret containing the Redis server configuration (redis.conf), mounted into each Redis container.
  • Secret — An opaque secret containing the Sentinel configuration (sentinel.conf), mounted into each Sentinel container.
  • Secret (optional) — A dictionary secret holding the Redis auth password, created when redis.auth.password.enabled is true.
  • Secret (optional) — A dictionary secret holding the Sentinel auth password, created when sentinel.auth.password.enabled is true.
  • Identity & Policy — Separate identities and policies for the Redis and Sentinel workloads, each with reveal access to their respective secrets, and cloud storage access when backup is enabled.
  • Volume Set (optional) — Persistent storage for Redis data, created when redis.persistence.enabled is true.
  • Volume Set (optional) — Persistent storage for Sentinel state, created when sentinel.persistence.enabled is true.
  • Domain (optional) — External domain resources for Redis and/or Sentinel when publicAccess.enabled is true.
  • Backup Cron Workload (optional) — A scheduled backup job that writes Redis snapshots to AWS S3 or GCS.

Installation

This template has no external prerequisites unless backup or public access is enabled. To install, follow the instructions for your preferred method:

UI

Browse, install, and manage templates visually

CLI

Manage templates from your terminal

Terraform

Declare templates in your Terraform configurations

Pulumi

Declare templates in your Pulumi programs

Configuration

The default values.yaml for this template:

Authentication

Authentication is disabled by default. Both the Redis workload and the Sentinel workload support independent auth configuration. Only one method can be enabled at a time per workload. Option 1 — Inline password (creates a secret automatically):
Option 2 — Reference an existing secret:
Sentinel can be configured with a separate password for Sentinel-to-Sentinel communication using the same options under sentinel.auth.

Redis Cluster

  • redis.replicas — Number of Redis replicas. Defaults to 3. Replica 0 is always the initial primary.
  • redis.resources.cpu / redis.resources.memory — Maximum CPU and memory per replica.
  • redis.resources.minCpu / redis.resources.minMemory — Minimum CPU and memory guaranteed per replica.
  • redis.multiZone — Spread replicas across availability zones within the location.
  • redis.extraArgs — Additional Redis server arguments (e.g. --maxmemory 200mb --maxmemory-policy allkeys-lru).

Sentinel

Sentinel monitors the Redis cluster and automatically promotes a replica when the primary fails.
  • sentinel.replicas — Number of Sentinel replicas. A minimum of 3 is required for a majority quorum.
  • sentinel.quorumAutoCalculation — When true, the quorum is calculated automatically as (replicas / 2) + 1. Set to false to use sentinel.quorumOverride.
  • sentinel.quorumOverride — Manual quorum value, used only when quorumAutoCalculation is false.
  • sentinel.resources.cpu / sentinel.resources.memory — Maximum CPU and memory per Sentinel replica.
  • sentinel.resources.minCpu / sentinel.resources.minMemory — Minimum CPU and memory guaranteed per Sentinel replica.
  • sentinel.multiZone — Spread Sentinel replicas across availability zones.

Replication Tuning

The redis.replication block controls low-level replication behavior. The defaults are sized for production workloads and typically do not need adjustment.
  • replication.backlogSize — Replication backlog size. The default 1gb covers ~5 minutes of disconnect at ~3 MB/s of writes. The Redis default of 1mb will trigger a full RDB resync on any brief disconnect.
  • replication.timeout — Timeout in seconds for full-resync transfers. The default 300s covers datasets up to ~30 GB. The Redis default of 60s is too low for large datasets.
  • replication.slaveOutputBufferLimit — Format: <hard> <soft> <seconds>. The default "2gb 512mb 300" sustains full resyncs of large datasets at high write rates. The Redis default "256mb 64mb 60" can cause the master to kill a replica mid-stream.

Health Checks

Probe settings for the Redis workload are configurable under redis.probes. This is most useful when persistence is enabled and large datasets require additional time to load before the replica is ready. The startup probe window is derived from the readiness probe settings:
The default (10 + 30×5 = 160s) is sufficient for small datasets. If AOF load takes longer, increase periodSeconds:

Metrics

A redis_exporter sidecar can be enabled to expose Prometheus metrics. When enabled, Control Plane scrapes :9121/metrics automatically every 30 seconds and makes the metrics available in the console.
  • redis.exporter.enabled — Set to true to add the exporter sidecar to each Redis replica.
  • redis.exporter.image — Exporter image (default: oliver006/redis_exporter:v1.67.0-alpine).
  • redis.exporter.resources — CPU and memory limits/requests for the sidecar container.
  • redis.exporter.dropMetrics — List of regex patterns matched against metric names. Use to filter high-cardinality series before they are stored.

Grafana Dashboard

A pre-built Grafana dashboard can be provisioned automatically via the Grafana Operator. This is opt-in and intended for Kubernetes clusters running the Grafana Operator — on Control Plane’s managed platform where no operator is present, leave this disabled.
Enabling the dashboard requires redis.exporter.enabled: true for the Redis-specific panels. CPU and memory panels are always available.
Included panels: The dashboard includes template variables for datasource, GVC, workload, and replica so you can filter by deployment without editing the dashboard. Prerequisites:
  1. The Grafana Operator must be installed in your cluster with a Kubernetes secret containing your Grafana service account token:
  2. A Grafana CR with a label matching grafana.instanceSelector.matchLabels:
Configuration:
  • grafana.dashboard.enabled — Set to true to provision the GrafanaDashboard CRD.
  • grafana.folder — Grafana folder the dashboard appears in (default: Redis).
  • grafana.datasource — Name of the Prometheus datasource configured in your Grafana instance (default: metrics).
  • grafana.instanceSelector.matchLabels — Label selector that must match the label on your Grafana CR.

Storage

Persistence is disabled by default. When enabled, a Volume Set is created to store data across restarts. Redis persistence:
  • redis.persistence.enabled — Enable persistent storage for Redis data.
  • redis.persistence.volumes.data.initialCapacity — Initial volume size in GiB. Minimum 1000 GiB for high-throughput-ssd.
  • redis.persistence.volumes.data.performanceClassgeneral-purpose-ssd or high-throughput-ssd.
  • redis.persistence.volumes.data.fileSystemTypeext4 or xfs.
  • redis.persistence.volumes.data.snapshots.retentionDuration — How long to retain volume snapshots.
  • redis.persistence.volumes.data.snapshots.schedule — Cron expression for snapshot frequency.
  • redis.persistence.volumes.data.autoscaling.maxCapacity — Maximum volume size in GiB.
  • redis.persistence.volumes.data.autoscaling.minFreePercentage — Trigger scaling when free space drops below this percentage.
  • redis.persistence.volumes.data.autoscaling.scalingFactor — Multiply current capacity by this factor when scaling up.
Sentinel persistence uses the same options under sentinel.persistence.

Firewall

Both Redis and Sentinel firewall settings are configured independently.
  • redis.firewall.internal_inboundAllowType / sentinel.firewall.internal_inboundAllowType:
  • redis.firewall.inboundAllowWorkload — List of specific workload links when using workload-list.
  • redis.firewall.external_inboundAllowCIDR — Comma-separated CIDR ranges for external inbound access.
  • redis.firewall.external_outboundAllowCIDR — Comma-separated CIDR ranges for external outbound access.

Public Access

Redis and Sentinel can be exposed over the internet via TCP using Control Plane’s domain resource with per-replica port routing.

Prerequisites

  1. Enable Dedicated Load Balancer on your GVC — This is required for arbitrary TCP port routing. Navigate to your GVC settings in the Control Plane console and enable the Dedicated Load Balancer option.
  2. Add DNS records before deploying — Control Plane verifies domain ownership when the domain resource is first created. If the records are not in place, the deploy will fail with an Unable to apply domain error. Add the following records in your DNS provider for each address you configure, and disable any proxy (TCP must pass through directly):
Your GVC alias is visible under GVC settings in the Control Plane console.

Configuration

Enable public access for Redis and/or Sentinel, set the subdomain address, and open the external firewall:
external_inboundAllowCIDR must be set when public access is enabled — without it, inbound traffic from the internet will be blocked even though the domain is configured.

Port Mapping

Each replica is assigned its own external port. Port numbers increment per replica starting at:
  • Redis: 6380, 6381, 6382, … (replica 0, 1, 2, …)
  • Sentinel: 26380, 26381, 26382, … (replica 0, 1, 2, …)

Connecting Externally

After deploying, verify the domain is resolving correctly:

Connecting to Redis

Connect to Redis internally from within the same GVC:
For Sentinel-aware clients, connect through Sentinel to always reach the current primary:
The Sentinel master name is mymaster.

Ports

Backup

Backup is disabled by default. When enabled, a cron workload runs on the configured schedule and uploads a Redis snapshot to AWS S3 or GCS. The backup image is compatible with all Redis versions.
  • backup.enabled — Enable scheduled backups.
  • backup.schedule — Cron expression for backup frequency (default: daily at 2am UTC).
  • backup.provideraws or gcp.
  • backup.resources.cpu / backup.resources.memory — Resources for the backup cron container.

AWS S3

Before enabling backup with provider: aws, complete the following in your AWS account:
  1. Create an S3 bucket. Set backup.aws.bucket to its name and backup.aws.region to its region.
  2. If you do not have a Cloud Account set up, refer to the docs to Create a Cloud Account. Set backup.aws.cloudAccountName to its name.
  3. Create an IAM policy with the following JSON, replacing YOUR_BUCKET_NAME:
  1. Set backup.aws.policyName to the name of the policy created in step 3.
  2. Set backup.aws.prefix to the folder path where backups will be stored.

GCS

Before enabling backup with provider: gcp, complete the following in your GCP account:
  1. Create a GCS bucket. Set backup.gcp.bucket to its name.
  2. If you do not have a Cloud Account set up, refer to the docs to Create a Cloud Account. Set backup.gcp.cloudAccountName to its name.
  3. Add the Storage Admin role to the GCP service account associated with the Cloud Account.
  4. Set backup.gcp.prefix to the folder path where backups will be stored.

Restoring a Backup

Download the .rdb backup file from your bucket and restore it into a running Redis instance. For GCS, replace aws s3 cp s3://... with gsutil cp gs://....

External References

Redis Documentation

Official Redis documentation

Redis Sentinel Documentation

Redis Sentinel setup and client configuration

Backup Image Source

Source code for the Redis backup container image

Redis Template

View the source files, default values, and chart definition