Impostazione della priorità dei pod
Grazie alle funzionalità di priorità e preclusione dei pod, è possibile configurare classi di priorità per indicare la priorità relativa dei pod che compongono il carico di lavoro del proprio cluster Red Hat OpenShift. Il controller “ Red Hat OpenShift ” tiene conto della priorità di un pod e può persino preemptare (rimuovere) i pod con priorità inferiore per fare spazio su un nodo di lavoro ai pod con priorità superiore. Per ulteriori informazioni, consultare il sito Red Hat OpenShift documentazione.
- Perché devo impostare la priorità dei pod?
- Come amministratore del cluster, vuoi controllare quali pod sono più critici per il carico di lavoro del tuo cluster. Le classi di priorità possono aiutarti a controllare le decisioni del controller Red Hat OpenShift, in modo da privilegiare i pod con priorità più alta rispetto a quelli con priorità più bassa. Il controller Red Hat OpenShift può persino preemptare (rimuovere) i pod in esecuzione con priorità inferiore, in modo da consentire la pianificazione dei pod in attesa con priorità superiore.
Impostando la priorità dei pod, puoi aiutare a evitare che carichi di lavoro con priorità più bassa abbiano delle ripercussioni sui carichi di lavoro critici nel tuo cluster, in particolare nei casi in cui il cluster inizi a raggiungere la sua capacità di risorse.
Assicurati di avere configurato un accesso utente appropriato al tuo cluster e, se applicabile, i vincoli del contesto di sicurezza (SCC, security context constraint). Le politiche di accesso e gli SCC possono aiutare a evitare che utenti non ritenuti attendibili distribuiscano pod con alta priorità che impediscono la pianificazione di altri pod.
Come funzionano la pianificazione prioritaria e la preclusione?
In generale, i pod in sospeso che hanno una priorità più elevata sono pianificati prima dei pod a cui è stata data una priorità più bassa. Se le risorse disponibili nei nodi di lavoro non sono sufficienti, il controller Red Hat OpenShift può preemptare (rimuovere) i pod per liberare risorse sufficienti a consentire la pianificazione dei pod con priorità più alta. Il prerilascio è anche influenzato dai periodi di terminazione non forzata, dai PDB (Pod Disruption Budget) e dall'affinità dei nodi di lavoro.
Se non si specifica una priorità per la distribuzione del pod, il valore predefinito è la classe di priorità impostata come " globalDefault ". Se non hai una classe di priorità globalDefault, la priorità predefinita
per tutti i pod è zero (0). Per impostazione predefinita, Red Hat OpenShift on IBM Cloud non imposta un globalDefault, quindi la priorità predefinita del pod è zero.
Per comprendere come la priorità dei pod e il controller “ Red Hat OpenShift ” interagiscano tra loro, si considerino gli scenari illustrati nella figura seguente. Devi posizionare i pod prioritari sui nodi di lavoro con le risorse disponibili. In caso contrario, i pod ad alta priorità nel cluster possono rimanere in sospeso nello stesso momento in cui vengono rimossi i pod esistenti, come nello scenario 3.
- Tre pod con priorità alta, media e bassa sono con la pianificazione in sospeso. Il controller Red Hat OpenShift individua un nodo di lavoro disponibile con spazio sufficiente per tutti e tre i pod e li pianifica in ordine di priorità, assegnando per primo il pod con la priorità più alta.
- Tre pod con priorità alta, media e bassa sono con la pianificazione in sospeso. Il controller “ Red Hat OpenShift ” individua un nodo worker disponibile, ma tale nodo dispone di risorse sufficienti solo per supportare i pod con priorità alta e media. Il pod con bassa priorità non viene pianificato e rimane in sospeso.
- Due pod con priorità alta e media sono in attesa di pianificazione. Un terzo pod con bassa priorità è presente su un nodo di lavoro disponibile. Tuttavia, il nodo di lavoro non ha risorse sufficienti per pianificare nessuno dei pod in sospeso. Il controller “ Red Hat OpenShift ” esclude, ovvero rimuove, il pod a bassa priorità, riportandolo così allo stato “pending”. A questo punto, il controller " Red Hat OpenShift " cerca di pianificare il pod ad alta priorità. Tuttavia, il nodo di lavoro non dispone di risorse sufficienti per pianificare l'esecuzione del pod ad alta priorità e, di conseguenza, il controller Red Hat OpenShift pianifica l'esecuzione del pod a media priorità.
Per ulteriori informazioni, consultare la documentazione di Kubernetes relativa alla priorità dei pod e alla preclusione.
- Posso disattivare il controller di ammissione con priorità dei pod?
- Num. Se non vuoi utilizzare la priorità dei pod, non impostare un’
globalDefaulte né includere una classe di priorità nelle tue distribuzioni dei pod. Ogni pod viene automaticamente impostato su zero, fatta eccezione per i pod critici per il cluster che IBM distribuisce con le classi di priorità predefinite. Poiché la priorità dei pod è relativa, questa configurazione di base garantisce che ai pod critici per il cluster venga data una priorità per le risorse e pianifica qualsiasi altro pod rispettando le politiche di pianificazione esistenti implementate.
Descrizione delle classi di priorità predefinite
I tuoi cluster Red Hat® OpenShift® on IBM Cloud® sono dotati di alcune classi di priorità per impostazione predefinita.
Non modificare le classi predefinite, che sono utilizzate per gestire in modo appropriato il tuo cluster. Puoi utilizzare queste classi nelle tue distribuzioni di applicazioni oppure creare delle tue classi di priorità.
La seguente tabella descrive le classi di priorità presenti nel tuo cluster per impostazione predefinita e perché sono utilizzate.
| Nome | Impostata da | Valore priorità | Scopo |
|---|---|---|---|
system-node-critical |
Kubernetes | 2000001000 | I pod che, al momento della creazione del cluster, vengono distribuiti in spazi dei nomi di sistema privilegiati utilizzano questa classe di priorità per proteggere le funzionalità critiche dei nodi di lavoro, quali i pod relativi a rete, archiviazione, registrazione, monitoraggio e metriche. |
system-cluster-critical |
Kubernetes | 2000000000 | Seleziona questa classe di priorità per i pod distribuiti nei namespace di sistema privilegiati al momento della creazione del cluster, al fine di proteggere le funzionalità critiche del cluster, quali i pod relativi a rete, archiviazione, registrazione, monitoraggio e metriche. |
ibm-app-cluster-critical |
IBM | 900000000 | I pod distribuiti nei namespace di sistema privilegiati al momento della creazione del cluster utilizzano questa classe di priorità per proteggere le funzionalità critiche delle applicazioni, come ad esempio i pod del bilanciatore di carico. |
Puoi controllare quali pod utilizzano le classi di priorità eseguendo questo comando.
oc get pods --all-namespaces -o custom-columns=NAME:.metadata.name,PRIORITY:.spec.priorityClassName
Creazione di una classe di priorità
Per impostare la priorità dei pod, devi utilizzare una classe di priorità.
Prima di cominciare:
- Accedi al tuo cluster Red Hat OpenShift.
- Assicurati di disporre del ruolo di accesso al servizio IAM “ IBM Cloud ”(Writer o Manager ) per lo spazio dei nomi
default.
-
Elenca le classi di priorità esistenti. È possibile utilizzare una classe di priorità esistente come modello per la nuova classe.
oc get priorityclasses -
Scegli la classe di priorità che vuoi copiare e crea un file YAML locale.
oc get priorityclass <priority_class> -o yaml > Downloads/priorityclass.yaml -
Crea il tuo file YAML di classe di priorità.
apiVersion: scheduling.k8s.io/v1alpha1 kind: PriorityClass metadata: name: <priority_class_name> value: <1000000> globalDefault: <false> description: "Use this class for XYZ service pods only."Descrizione dei componenti del file YAML Componenti Descrizione nameObbligatorio: il nome della classe di priorità che vuoi creare. valueObbligatorio: immetti un numero intero inferiore o uguale a 1 miliardo (1000000000). Più è alto il valore e più è alta la priorità, I valori sono relativi ai valori delle altre classi di priorità nel cluster. Riservate numeri molto elevati ai pod critici per il sistema che non volete vengano preemptati (rimossi). Ad esempio, i valori delle classi di priorità predefinite "cluster-critical " vanno da 900000000 a 2000001000; pertanto, per le nuove classi di priorità, inserisci un valore inferiore a questi numeri, in modo che nessun pod abbia una priorità superiore a quella di questi pod.
globalDefaultFacoltativo: imposta il campo su trueper rendere questa classe di priorità il valore predefinito globale che viene applicato a ogni pod che viene pianificato senza un valorepriorityClassName. Solo una classe di priorità nel tuo cluster può essere impostata come valore predefinito globale. Se non esiste un valore predefinito globale, i pod senzapriorityClassNamespecificati hanno una priorità di zero (0). \n \n Le classi di priorità predefinite non impostano unglobalDefault. Se nel cluster sono state create altre classi di priorità, è possibile verificare che non abbiano impostato un valore per il parametroglobalDefaulteseguendo il comandooc describe priorityclass``. descriptionFacoltativo: indica agli utenti perché utilizzare questa classe di priorità. Racchiudi la stringa tra virgolette ( ""). -
Crea la classe di priorità nel tuo cluster.
oc apply -f filepath/priorityclass.yaml -
Verifica che la classe di priorità venga creata.
oc get priorityclasses
Bene! Hai creato una classe di priorità. Lascia che i membri del tuo team sappiano della classe di priorità e quale eventuale classe di priorità devono utilizzare per le loro distribuzioni di pod.
Assegnazione di priorità ai tuoi pod
Assegna una classe di priorità alla tua specifica di pod per impostare la priorità del pod all'interno del tuo cluster Red Hat OpenShift on IBM Cloud.
Prima di cominciare:
- Accedi al tuo cluster Red Hat OpenShift.
- Assicurati di disporre del ruolo di accesso al servizio IAM “ IBM Cloud ”(Autore o Responsabile ) nello spazio dei nomi in cui desideri distribuire i pod.
- Comprendi come funziona la pianificazione delle priorità, poiché la priorità può prerilasciare i pod esistenti e influenzare il modo in cui vengono utilizzate le risorse del tuo cluster.
Segui i passaggi riportati di seguito per verificare l'importanza degli altri pod già distribuiti, in modo da poter scegliere la classe di priorità corretta per i tuoi pod in relazione a quelli già distribuiti.
-
Visualizza le classi di priorità utilizzate dagli altri pod nello spazio dei nomi.
oc get pods -n <namespace> -o custom-columns=NAME:.metadata.name,PRIORITY:.spec.priorityClassName -
Ottieni i dettagli della classe di priorità e prendi nota del numero del valore. Per i pod con numeri più elevati è indicata una priorità che precede quella dei pod con numeri più bassi. Ripeti questo passo per ogni classe di priorità che vuoi esaminare.
oc describe priorityclass <priorityclass_name> -
Ottieni la classe di priorità che vuoi utilizzare oppure crea la tua classe di priorità.
oc get priorityclasses -
Nella tua specifica del pod, aggiungi il campo
priorityClassNamecon il nome della classe di priorità che hai richiamato nel passo precedente.apiVersion: apps/v1 kind: Deployment metadata: name: ibmliberty spec: replicas: 1 selector: matchLabels: app: ibmliberty template: metadata: labels: app: ibmliberty spec: containers: - name: ibmliberty image: icr.io/ibm/liberty:latest ports: - containerPort: 9080 priorityClassName: <priorityclass_name> -
Crea i pod con indicazione della priorità nello spazio di nomi in cui vuoi distribuirli.
oc apply -f filepath/pod-deployment.yaml