Sobes.tech
Middle

Kako ravnomerno rasporediti podove u zonama dostupnosti?

sobes.tech АИ

Одговор од АИ

Koristite topologySpreadConstraints u manifestu pod-a ili implementacije.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 9
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app-container
        image: my-app:latest
      topologySpreadConstraints:
      - maxSkew: 1
        topologyKey: topology.kubernetes.io/zone # Ključ koji definiše raspodelu u zonama
        whenUnsatisfiable: DoNotSchedule # Ako raspodela nije moguća, pod neće biti planiran
        labelSelector:
          matchLabels:
            app: my-app # Ograničenje se primenjuje na podove sa ovim etiketama

maxSkew definiše maksimalni broj podova koji mogu premašiti prosečan u bilo kojoj domeni topologije (zoni). U ovom slučaju, maxSkew: 1 znači da razlika u broju podova između bilo koje dve zone neće preći 1.

topologyKey: topology.kubernetes.io/zone ukazuje da se raspodela vrši na osnovu etiketa zona dostupnosti čvorova.

whenUnsatisfiable: DoNotSchedule znači da ako planifier ne može da ispuni ograničenje topologySpreadConstraints, pod neće biti planiran. Alternativno, može se koristiti ScheduleAnyway, koji će pokušati da planira pod, ali može prekršiti ograničenje.

labelSelector definiše skup podova na koje se primenjuje ovo ograničenje.

Za ravnomernu raspodelu podova u tri zone (npr. us-east-1a, us-east-1b, us-east-1c) sa 9 replika, svaka zona će dobiti po 3 podova.

Ovakva raspodela povećava otpornost aplikacije, jer pad jedne zone neće dovesti do potpune nedostupnosti servisa.