Multi-Availability Zone (AZ) setup for Kfuse-Pipeline
Our platform supports deploying pods across multiple availability zones to ensure high availability and fault tolerance. Each zone will have at least one pod running for supported components.
Currently, this multi-AZ support is available for the following components:
Ingress-NGINX
Redis (Master-Slave setup)
Ingester
Prerequisites:
Ensure that you are using
kfuse-pipeline-3.0
or a later version.
This setup helps maintain service continuity even in the event of a zone-level failure by distributing workloads across zones.
Configuration for multi-AZ cluster setup that needs to be done in custom-values.yaml
file:
ingester:
# For multi-AZ cluster setup, replica counts counts should be k * (number of different zones in the cluster) where k= 1,2,3...
replicaCount: 1
service:
annotations:
service.kubernetes.io/topology-mode: Auto
ingress-nginx:
controller:
service:
annotations:
service.kubernetes.io/topology-mode: Auto
# replicaCount should be equal to k * (number of different zones in the cluster) where k= 1,2,3... for multi-AZ setup
replicaCount: 3
# This is needed to allow restarts with strict podAntiAffinity (one pod can be destroyed so that a new one is created on the same node)
updateStrategy:
rollingUpdate:
maxUnavailable: 1
type: RollingUpdate
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/component: controller
# This should be the same as the release name
app.kubernetes.io/instance: kfuse-pipeline
topologyKey: "kubernetes.io/zone"
redis:
replica:
# replicaCount - Specify the number of postgres replicas to deploy
replicaCount: 1 # For multi-AZ cluster setup, replica counts counts should be k * (number of different zones in the cluster) where k= 1,2,3... , otherwise 1
updateStrategy:
rollingUpdate:
maxUnavailable: 1
type: RollingUpdate
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
app.kubernetes.io/name: kfuse-redis
app.kubernetes.io/component: replica
# This should be the same as the release name
app.kubernetes.io/instance: kfuse-pipeline
topologyKey: "kubernetes.io/zone"
sentinel:
service:
annotations:
service.kubernetes.io/topology-mode: Auto