Πώς να κατανείμετε ομοιόμορφα τα 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.
Αυτή η κατανομή αυξάνει την ανθεκτικότητα της εφαρμογής, καθώς η αποτυχία μιας ζώνης διαθεσιμότητας δεν θα οδηγήσει σε πλήρη μη διαθεσιμότητα της υπηρεσίας.