Install Kloudfuse with Multiple Zone Availability

The Kloudfuse platform supports pods deployment across multiple availability zones (multi-AZ) to ensure high availability and fault tolerance. Each zone must have at least one pod to run the supported components.

Current support for multi-AZ is limited to:

  • Ingress-NGINX

  • Redis (primary/secondary architecture)

  • Ingester

This configuration helps maintain service continuity in the event of a zone-level failure, by distributing workloads across multiple zones.

Specify these values in your custom-values.yaml file:

Configuration for Multi-AZ Cluster Setup
ingester:
# For multi-AZ cluster setup, replica 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 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