Sobes.tech
Middle

Πώς να κατανείμετε ομοιόμορφα τα pods στις ζώνες διαθεσιμότητας;

sobes.tech AI

Απάντηση από AI

Χρησιμοποιήστε το topologySpreadConstraints στο manifest του pod ή της ανάπτυξης.

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 # Αν η κατανομή δεν είναι δυνατή, το pod δεν θα προγραμματιστεί
        labelSelector:
          matchLabels:
            app: my-app # Ο περιορισμός εφαρμόζεται σε pods με αυτό το ετικέτα

Το maxSkew ορίζει τον μέγιστο αριθμό pods που επιτρέπεται να υπερβαίνουν το μέσο σε οποιονδήποτε τοπολογικό τομέα (ζώνη). Στην περίπτωση αυτή, maxSkew: 1 σημαίνει ότι η διαφορά στον αριθμό pods μεταξύ οποιωνδήποτε δύο ζωνών δεν θα υπερβαίνει το 1.

Το topologyKey: topology.kubernetes.io/zone δείχνει ότι η κατανομή πρέπει να βασίζεται στις ετικέτες των ζωνών διαθεσιμότητας των κόμβων.

Το whenUnsatisfiable: DoNotSchedule σημαίνει ότι αν ο προγραμματιστής δεν μπορεί να ικανοποιήσει τον περιορισμό topologySpreadConstraints, το pod δεν θα προγραμματιστεί. Μια εναλλακτική επιλογή είναι το ScheduleAnyway, που θα προσπαθήσει να προγραμματίσει το pod, αλλά μπορεί να παραβιάσει τον περιορισμό.

Το labelSelector ορίζει το σύνολο των pods στα οποία εφαρμόζεται αυτός ο περιορισμός.

Για ομοιόμορφη κατανομή pods σε τρεις ζώνες (π.χ., us-east-1a, us-east-1b, us-east-1c) με 9 αντίγραφα, κάθε ζώνη θα λάβει 3 pods.

Αυτή η κατανομή αυξάνει την ανθεκτικότητα της εφαρμογής, καθώς η αποτυχία μιας ζώνης διαθεσιμότητας δεν θα οδηγήσει σε πλήρη μη διαθεσιμότητα της υπηρεσίας.