Distribuisci i pod sul cluster
Utilizzo attuale della policy di scalabilità automatica di AWS per avviare i nodi di lavoro EKS (minimo+desiderato 10, massimo 15) a un orario fisso ogni giorno. Sono disponibili 120 pod e 30 distribuzioni.
Ovviamente, solo un nodo sarà attivo per primo. Quindi il secondo nodo. Dopo che l'ultimo nodo sarà attivo. Per questo motivo, Kubernetes aggiunge tutti i pod nei primi nodi. Esiste un modo per distribuire uniformemente i pod nello scenario?
Risposte
Dai un'occhiata al Descheduler . Questo progetto viene eseguito come processo Kubernetes che mira a eliminare i pod quando ritiene che il cluster sia sbilanciato.
La LowNodeUtilizationstrategia sembra adattarsi al tuo caso:
Questa strategia trova i nodi sottoutilizzati ed elimina i pod, se possibile, da altri nodi nella speranza che la ricreazione dei pod eliminati venga pianificata su questi nodi sottoutilizzati.
Un'altra opzione consiste nell'applicare manualmente un po' di ingegneria del caos, forzando un aggiornamento continuo sulla distribuzione e, si spera, lo scheduler risolverà il problema di bilanciamento quando i pod verranno ricreati.
Puoi usare il kubectl rollout restart my-deployment
. È molto meglio che eliminare semplicemente i pod con kubectl delete pod
, poiché l'implementazione garantirà la disponibilità durante il "ribilanciamento" (sebbene l'eliminazione del tutto dei pod aumenti le possibilità di un migliore ribilanciamento).
Dovresti esaminare l'affinità e l'anti-affinità in quanto ciò ti consente di controllare quali pod vanno su quale nodo. Puoi averlo in modo che con l'anti-affinità ci sia solo 1 pod di ogni distribuzione su un nodo. Questo è un po 'eccessivo e non funzionerebbe esattamente per te anche se IIRC puoi avere più pod su un nodo solo con un limite.
https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/