Sobes.tech
Middle

Kaip tolygiai paskirstyti podus prieinamumo zonose?

sobes.tech AI

Atsakymas iš AI

Naudokite topologySpreadConstraints podui ar diegimo manifeste.

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 # Raktas, apibrėžiantis paskirstymo sritį
        whenUnsatisfiable: DoNotSchedule # Jei paskirstymas neįmanomas, pod'as nebus suplanuotas
        labelSelector:
          matchLabels:
            app: my-app # Apribojimas taikomas šiam žymekliui priklausantiems podams

maxSkew nustato maksimalų leidžiamą podų skaičiaus viršijimą vidutiniame skaičiuje bet kurioje topologijos srityje (zonoje). Šiuo atveju, maxSkew: 1 reiškia, kad zonų skirtumas podų skaičiuje neviršys 1.

topologyKey: topology.kubernetes.io/zone nurodo, kad paskirstymas turi būti atliekamas pagal zonų žymas.

whenUnsatisfiable: DoNotSchedule reiškia, kad jei planuotojas negali patenkinti topologySpreadConstraints apribojimo, pod'as nebus suplanuotas. Kitas variantas yra ScheduleAnyway, kuris bandys suplanuoti pod'ą, bet gali pažeisti apribojimą.

labelSelector apibrėžia podų rinkinį, kuriems taikomas šis apribojimas.

Norint tolygiai paskirstyti podus per tris zonas (pavyzdžiui, us-east-1a, us-east-1b, us-east-1c) su 9 replikomis, kiekviena zona gaus po 3 podus.

Toks paskirstymas padidina programos atsparumą gedimams, nes viena zonos išjungimas nesukels viso paslaugos nepasiekiamumo.