Priorità e preemption dei Pod
Impari come le PriorityClass stabiliscano l'ordine di priorità dei Pod e come lo scheduler possa espropriare i Pod a priorità inferiore per fare spazio ai carichi di lavoro critici.
Priorità e preemption dei Pod è una lezione DevOps Bootcamp gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento DevOps Bootcamp, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso DevOps Bootcamp include 4 lezioni in totale.
Non tutti i Pod sono uguali
Quando il cluster è al completo, alcuni workload sono più importanti di altri. La priorità dei Pod permette di indicare a Kubernetes quali Pod devono avere la precedenza nella contesa per le risorse.
Che cos'è una PriorityClass?
Una PriorityClass è un oggetto a livello di cluster che associa un nome a un valore intero. I numeri più alti indicano una priorità maggiore.
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority
value: 1000000
globalDefault: false
description: 'For critical production workloads'Assegnare una priorità a un Pod
Un Pod usa una classe tramite priorityClassName. Lo scheduler legge il valore numerico dalla classe indicata.
apiVersion: v1
kind: Pod
metadata:
name: critical-app
spec:
priorityClassName: high-priority
containers:
- name: app
image: myapp:1.0Come la priorità influisce sulla pianificazione
Quando diversi Pod sono in attesa, lo scheduler cerca di pianificare prima quelli con priorità più alta. La priorità influisce sull'ordine in cui i Pod vengono pianificati.
Che cos'è la preemption?
Se un Pod con priorità elevata non può essere pianificato perché il cluster è al completo, lo scheduler può effettuare la preemption, cioè espellere i Pod con priorità inferiore per liberare spazio.
I Pod espulsi tornano nello stato Pending e possono essere ripianificati altrove.
La preemption in azione
Immagini che un nodo sia pieno di Pod con priorità 100 e che arrivi un Pod con priorità 1000000. Lo scheduler può rimuovere un numero sufficiente di Pod a bassa priorità per fare spazio a quello critico.
kubectl get events --field-selector reason=Preempted
# Pod default/batch-job was preempted by critical-appDisabilitare la preemption
Una PriorityClass può disabilitare la preemption degli altri con preemptionPolicy: Never. Tali Pod vengono comunque pianificati in ordine di priorità, ma non espellono alcun Pod.
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-no-preempt
value: 1000000
preemptionPolicy: NeverIl valore predefinito globale
L'impostazione di globalDefault: true su una PriorityClass applica il relativo valore a qualsiasi Pod che non ne specifichi uno. Solo una classe può essere il valore predefinito globale.
Classi di sistema integrate
Kubernetes include classi riservate come system-cluster-critical e system-node-critical per i componenti essenziali. Non le riutilizzi per le sue app.
kubectl get priorityclass
# system-node-critical 2000001000
# system-cluster-critical 2000000000Procedure consigliate
- Definire un numero ridotto di livelli chiari, ad esempio critico, normale e batch
- Riservare la preemption ai workload realmente importanti
- Combinare la priorità con le richieste di risorse, così che le decisioni di pianificazione siano accurate
- Evitare di assegnare una priorità elevata a tutto, perché vanificherebbe lo scopo della priorità
Priorità e QoS
La priorità controlla la pianificazione e la preemption. Le classi Quality-of-Service (derivate da requests/limits) controllano l'espulsione sotto pressione del nodo. Sono meccanismi correlati, ma distinti.
Verifica rapida
Verifichi la sua comprensione della preemption.
Riepilogo
Ha imparato che una PriorityClass ordina i Pod in base a un valore intero, influenzando l'ordine di pianificazione. La preemption permette ai Pod critici di espellere quelli con priorità inferiore quando il cluster è al completo. Utilizzi pochi livelli chiari e combini la priorità con richieste di risorse accurate.
Domande Frequenti
La lezione «Priorità e preemption dei Pod» è gratuita?
Sì — il testo completo di «Priorità e preemption dei Pod» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso DevOps Bootcamp, passa a CoddyKit PRO. Il corso DevOps Bootcamp include 4 lezioni in totale.
Cosa imparerò in «Priorità e preemption dei Pod»?
Impari come le PriorityClass stabiliscano l'ordine di priorità dei Pod e come lo scheduler possa espropriare i Pod a priorità inferiore per fare spazio ai carichi di lavoro critici. Eserciti DevOps Bootcamp con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare DevOps Bootcamp?
Non è richiesta alcuna esperienza precedente. DevOps Bootcamp su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Priorità e preemption dei Pod»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione DevOps Bootcamp?
Sì. Ogni lezione DevOps Bootcamp include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Richieste e limiti delle risorse
- Selettori e affinità dei nodi
- Taint e toleration
- Priorità e preemption dei Pod