Sobes.tech
Middle

Hogyan oszd el egyenletesen a podokat a rendelkezésre állási zónákban?

sobes.tech MI

Válasz az MI-től

Használja a topologySpreadConstraints-t a pod vagy a telepítési manifesztumban.

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 # Kulcs, amely meghatározza a terjesztést zónák szerint
        whenUnsatisfiable: DoNotSchedule # Ha a terjesztés nem lehetséges, a pod nem lesz ütemezve
        labelSelector:
          matchLabels:
            app: my-app # Ez a korlátozás azokra a podokra vonatkozik, amelyek ezzel a címkével rendelkeznek

A maxSkew meghatározza a maximális pod számot, amely meghaladja az átlagot bármely topológiai doménben (zónában). Ebben az esetben, maxSkew: 1 azt jelenti, hogy a podok száma közötti különbség két zóna között nem haladhatja meg az 1-et.

A topologyKey: topology.kubernetes.io/zone azt jelzi, hogy a terjesztést a csomópontok zónacímkéi alapján kell végrehajtani.

A whenUnsatisfiable: DoNotSchedule azt jelenti, hogy ha a ütemező nem tudja teljesíteni a topologySpreadConstraints korlátozást, akkor a pod nem lesz ütemezve. Alternatívaként a ScheduleAnyway próbálja ütemezni a podot, de megsértheti a korlátozást.

A labelSelector meghatározza azokat a podokat, amelyekre ez a korlátozás vonatkozik.

Az egyenletes pod-elosztás három zónába (például us-east-1a, us-east-1b, us-east-1c) 9 replikával, minden zónában 3 pod lesz.

Ez az elosztás növeli az alkalmazás hibatűrő képességét, mivel egy zóna kiesése nem eredményez teljes szolgáltatáskimaradást.