Sobes.tech
Middle

Ako rovnomerne rozložiť pody v zónach dostupnosti?

sobes.tech AI

Odpoveď od AI

Použite topologySpreadConstraints v manifeste podu alebo nasadení.

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 # Kľúč, ktorý určuje rozloženie v zónach
        whenUnsatisfiable: DoNotSchedule # Ak rozloženie nie je možné, pod nebude naplánovaný
        labelSelector:
          matchLabels:
            app: my-app # Obmedzenie sa vzťahuje na pod-y s týmto štítkom

maxSkew určuje maximálny počet podov, ktoré môžu prekročiť priemerný v akomkoľvek doméne topológie (zóna). V tomto prípade, maxSkew: 1 znamená, že rozdiel v počte podov medzi akoukoľvek dvojicou zón nebude presahovať 1.

topologyKey: topology.kubernetes.io/zone indikuje, že rozloženie by malo byť založené na štítkoch zón dostupnosti uzlov.

whenUnsatisfiable: DoNotSchedule znamená, že ak plánovač nemôže splniť obmedzenie topologySpreadConstraints, pod nebude naplánovaný. Alternatívne môže byť použitý ScheduleAnyway, ktorý sa pokúsi naplánovať pod, ale môže porušiť obmedzenie.

labelSelector definuje množinu podov, na ktoré sa toto obmedzenie vzťahuje.

Pre rovnomerné rozloženie podov do troch zón (napríklad us-east-1a, us-east-1b, us-east-1c) s 9 replikami, každá zóna dostane po 3 podoch.

Takéto rozloženie zvyšuje odolnosť aplikácie, pretože zlyhanie jednej zóny nevedie k úplnej nedostupnosti služby.