Sobes.tech
Middle

Как равномерно да разпределите подовете в зоните за достъпност?

sobes.tech AI

Отговор от AI

Използвайте topologySpreadConstraints в манифест на пода или разгръщане.

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 # Ключ, който определя разпределението в зони
        whenUnsatisfiable: DoNotSchedule # Ако разпределението е невъзможно, подът няма да бъде планиран
        labelSelector:
          matchLabels:
            app: my-app # Ограничението се прилага към подове с този етикет

maxSkew определя максималния брой подове, които могат да превишават средното в който и да е домейн на топологията (зона). В този случай, maxSkew: 1 означава, че разликата в броя подове между всяка двойка зони няма да надвишава 1.

topologyKey: topology.kubernetes.io/zone указва, че разпределението трябва да се базира на етикетите на зоните за достъп на възлите.

whenUnsatisfiable: DoNotSchedule означава, че ако планировчикът не може да изпълни ограничението topologySpreadConstraints, подът няма да бъде планиран. Друг вариант е ScheduleAnyway, който ще се опита да планира пода, но може да наруши ограничението.

labelSelector определя набора от подове, към които се прилага това ограничение.

За равномерно разпределение на подовете в три зони (например, us-east-1a, us-east-1b, us-east-1c) с 9 реплики, всяка зона ще получи по 3 пода.

Тази разпределение увеличава устойчивостта на приложението, тъй като отказът на една зона не ще доведе до пълна недостъпност на услугата.