content/operate/kubernetes/reference/yaml/rack-awareness.md
This page provides YAML examples for deploying Redis Enterprise with [rack awareness]({{< relref "/operate/kubernetes/recommendations/node-selection#using-rack-awareness" >}}). Rack awareness distributes Redis Enterprise nodes and database shards across different availability zones or failure domains to improve high availability and fault tolerance.
topology.kubernetes.io/zonekubectl get nodes -o custom-columns="name:metadata.name","rack\\zone:metadata.labels.topology\.kubernetes\.io/zone"For complete deployment instructions, see [Deploy on Kubernetes]({{< relref "/operate/kubernetes/deployment" >}}).
The service account for rack-aware deployments is the same as [basic deployments]({{< relref "/operate/kubernetes/reference/yaml/basic-deployment#service-account" >}}).
{{<embed-yaml "k8s/service_account.md" "service-account.yaml">}}
Rack awareness requires additional permissions to read node labels across the cluster.
{{<embed-yaml "k8s/rack_aware_cluster_role.md" "rack-aware-cluster-role.yaml">}}
Cluster role configuration:
name: ClusterRole name for rack awareness permissionsrules: Permissions to read nodes and their labels cluster-wideresources: Access to nodes resource for zone label discoveryKey permissions:
nodes: Read access to discover node zone labelsget, list, watch: Monitor node changes and zone assignmentsThe ClusterRoleBinding grants cluster-wide permissions to the service account.
{{<embed-yaml "k8s/rack_aware_cluster_role_binding.md" "rack-aware-cluster-role-binding.yaml">}}
Cluster role binding configuration:
subjects.name: Must match the service account namesubjects.namespace: Namespace where the operator is deployedroleRef.name: Must match the cluster role nameThe rack-aware [REC configuration]({{< relref "/operate/kubernetes/reference/api/redis_enterprise_cluster_api" >}}) includes the rackAwarenessNodeLabel field.
{{<embed-yaml "k8s/rack_aware_rec.md" "rack-aware-cluster.yaml">}}
Rack-aware cluster configuration:
metadata.name: Cluster name (cannot be changed after creation)spec.rackAwarenessNodeLabel: Node label used for zone identificationspec.nodes: Minimum 3 nodes, ideally distributed across zonesEdit the values in the downloaded YAML file based on your environment, such as increasing nodes for better zone distribution, using custom zone labels, adding resource specifications, or enabling persistent storage.
Different Kubernetes distributions use different zone labels:
Standard: topology.kubernetes.io/zoneLegacy: failure-domain.beta.kubernetes.io/zoneCustom: Your organization's specific labeling schemeVerify the correct label on your nodes:
kubectl get nodes -o custom-columns="name:metadata.name","rack\\zone:metadata.labels.topology\.kubernetes\.io/zone"
Database configuration for rack-aware clusters is the same as [basic deployments]({{< relref "/operate/kubernetes/reference/yaml/basic-deployment#redis-enterprise-database" >}}).
Important: For rack awareness to be effective, ensure your database has replication enabled. Rack awareness distributes primary and replica shards across zones, so databases without replication will not benefit from zone distribution.
{{<embed-yaml "k8s/redb.md" "redis-enterprise-database.yaml">}}
To deploy rack-aware Redis Enterprise clusters, follow [Deploy on Kubernetes]({{< relref "/operate/kubernetes/deployment" >}}) and ensure your Kubernetes nodes have proper zone labels. For detailed rack awareness configuration, see the [node selection recommendations]({{< relref "/operate/kubernetes/recommendations/node-selection" >}}).
rackAwarenessNodeLabel matches actual node labels