Come distribuire uniformemente i pod nelle zone di disponibilità?
sobes.tech AI
Risposta dell'AI
Utilizzare topologySpreadConstraints nel manifesto del pod o del deployment.
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 # Chiave che definisce la distribuzione in zone
whenUnsatisfiable: DoNotSchedule # Se la distribuzione non è possibile, il pod non verrà pianificato
labelSelector:
matchLabels:
app: my-app # La restrizione si applica ai pod con questa etichetta
maxSkew definisce il numero massimo di pod che può superare la media in qualsiasi dominio di topologia (zona). In questo caso, maxSkew: 1 significa che la differenza nel numero di pod tra qualsiasi coppia di zone non supererà 1.
topologyKey: topology.kubernetes.io/zone indica che la distribuzione si basa sulle etichette delle zone di disponibilità dei nodi.
whenUnsatisfiable: DoNotSchedule significa che se il pianificatore non può soddisfare la restrizione topologySpreadConstraints, il pod non verrà pianificato. Un'altra opzione è ScheduleAnyway, che tenterà di pianificare il pod ma potrebbe violare la restrizione.
labelSelector definisce l'insieme di pod a cui si applica questa restrizione.
Per distribuire uniformemente i pod su tre zone (ad esempio, us-east-1a, us-east-1b, us-east-1c) con 9 repliche, ogni zona riceverà 3 pod.
Questo tipo di distribuzione aumenta la tolleranza ai guasti dell'applicazione, poiché il fallimento di una zona di disponibilità non renderà il servizio completamente inaccessibile.