Sobes.tech
Middle

Hoe verdeel je de pods gelijkmatig over de beschikbaarheidszones?

sobes.tech AI

Antwoord van AI

Gebruik topologySpreadConstraints in het manifest van de pod of deployment.

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 # Sleutel die de verspreiding in zones definieert
        whenUnsatisfiable: DoNotSchedule # Als de verdeling niet mogelijk is, wordt de pod niet gepland
        labelSelector:
          matchLabels:
            app: my-app # De beperking geldt voor pods met dit label

maxSkew bepaalt het maximale aantal pods dat de gemiddelde in elk topologiedomein (zone) mag overschrijden. In dit geval betekent maxSkew: 1 dat het verschil in het aantal pods tussen elk paar zones niet meer dan 1 zal zijn.

topologyKey: topology.kubernetes.io/zone geeft aan dat de verdeling gebaseerd moet zijn op de labels van de zones van de knooppunten.

whenUnsatisfiable: DoNotSchedule betekent dat als de scheduler de beperking topologySpreadConstraints niet kan naleven, de pod niet wordt gepland. Een alternatief is ScheduleAnyway, dat probeert de pod te plannen, maar de beperking kan overtreden.

labelSelector definieert de set pods waarop deze beperking van toepassing is.

Voor een gelijke verdeling van pods over drie zones (bijvoorbeeld us-east-1a, us-east-1b, us-east-1c) met 9 replicas, krijgt elke zone 3 pods.

Deze verdeling verhoogt de fouttolerantie van de applicatie, omdat het falen van één zone niet leidt tot volledige onbeschikbaarheid van de service.