Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come creare un bin pack dei nodi per migliorare l'utilizzo dei nodi per i cluster del servizio Azure Kubernetes usando il plug-in di pianificazione nell'albero, NodeResourcesFit. L'utilità di pianificazione predefinita del servizio Azure Kubernetes opera in una modalità NodeResourcesFit:LeastAllocated, che assegna priorità ai nodi con un utilizzo inferiore durante la pianificazione dei pod. I profili dell'utilità di pianificazione configurabili nel servizio Azure Kubernetes consentono di modificare questo comportamento predefinito e ottimizzare la configurazione per classificare in ordine di priorità i nodi con un utilizzo maggiore. Questa documentazione illustra tre diversi profili di pianificazione personalizzati, evidenziando allo stesso tempo le migliori pratiche raccomandate per migliorare l'utilizzo e ridurre gli hot spot dei nodi.
La compattazione del nodo è una strategia di pianificazione che ottimizza l'utilizzo delle risorse aumentando la densità dei pod nei nodi anziché distribuendo i pod in un pool di nodi o ridimensionando automaticamente i nodi in modo anomalo. La compressione dei contenitori consente di ridurre al minimo le risorse sprecate e può ridurre il costo operativo della gestione dei nodi inattive o sottoutilizzati. Il miglioramento dell'utilizzo dei nodi è fondamentale perché i dati mostrano che la CPU e la memoria sono in genere risorse sovra richieste. Inoltre, man mano che l'adozione della GPU aumenta, l'utilizzo efficiente degli acceleratori diventa altrettanto critico a causa della relativa scarsità e dei costi.
Limitazioni
- AKS attualmente non gestisce la distribuzione di unità di pianificazione di terze parti o di plug-in di pianificazione esterni.
- Il servizio Azure Kubernetes non supporta plug-in di pianificazione interni destinati all'unità di pianificazione di terze parti
aks-system. Questa restrizione è stata abilitata per evitare modifiche impreviste ai componenti aggiuntivi del servizio Azure Kubernetes abilitati nel cluster. Inoltre, non è possibile definire unprofiledenominatoaks-system.
Prerequisiti
- Versione dell'interfaccia della riga di comando
2.76.0di Azure o successiva. Eseguireaz --versionper trovare la versione ed eseguireaz upgradeper aggiornare la versione. Se è necessario installare o aggiornare, vedere Installare Azure CLI. - Versione
1.33di Kubernetes o successiva in esecuzione nel cluster AKS. - L'estensione dell'interfaccia della riga di comando di Azure
aks-previewversione18.0.0b27o successiva. - Registrare il flag della funzionalità
UserDefinedSchedulerConfigurationPreviewnella sottoscrizione di Azure.
Abilitare la configurazione del profilo dello scheduler in un cluster AKS di Azure
È possibile abilitare la configurazione del profilo di pianificazione in un cluster del servizio Azure Kubernetes nuovo o esistente.
Creare un cluster AKS con la configurazione del profilo dello scheduler abilitata utilizzando il comando
az aks createcon il flag--enable-upstream-kubescheduler-user-configuration.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<aks-cluster-name> # Create an AKS cluster with schedule profile configuration enabled az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-upstream-kubescheduler-user-configuration \ --generate-ssh-keysAl termine del processo di creazione, connettersi al cluster usando il
az aks get-credentialscomando .az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Verificare l'installazione del controller del pianificatore
Dopo aver abilitato la funzionalità sul cluster AKS, verificare che la definizione di risorsa personalizzata del controller del programmatore (CRD)sia stata installata correttamente usando il comando
kubectl get.kubectl get crd schedulerconfigurations.aks.azure.comAnnotazioni
Questo comando non riesce se la funzionalità non è stata abilitata correttamente nella sezione precedente.
Configurare la compattazione dei nodi con il plug-in RequestedtoCapacity
Tra i tre profili, RequestedToCapacityRatio fornisce il controllo utente più granulare per il mapping dei nodi a un utilizzo esplicito. Ad esempio, questo profilo di pianificazione è stato configurato per favorire i nodi all'interno di una banda di utilizzo di 50-85%, evitare nodi vuoti e deprioritizzare gravemente nodi quasi completi a 90% utilizzo o più, lasciando un po 'di spazio. Dato questo livello di dettaglio, RequestedtoCapacity è la strategia di assegnazione del punteggio consigliata per la compattazione dei nodi su AKS per i cluster di produzione.
Questa configurazione rende l'utilizzo della CPU il fattore dominante nella selezione dei nodi, la compressione dei nodi evitando al tempo stesso la saturazione per le applicazioni con utilizzo elevato della CPU. Infine, è necessario disabilitare il plug-in PodTopologySpread perché può eseguire l'override del punteggio ponderato da NodeResourcesFit se lasciato abilitato per impostazione predefinita.
-
NodeResourcesFitcontrolla come il gestore di pianificazione valuta se un nodo dispone di risorse sufficienti per eseguire un pod. -
scoringStrategy: RequestedToCapacityRatioassegna punteggi ai nodi in base al rapporto tra le risorse richieste e la capacità totale dei nodi dopo che il pod viene posizionato ipoteticamente. -
Resourcesspecifica cheCPUeMemorysono le risorse primarie considerate per l'assegnazione dei punteggi. Con un peso pari a8, i nodi con utilizzo della CPU ottengono un punteggio 8 volte superiore rispetto alla memoria durante il ciclo di pianificazione dei pod. Ciò aumenta la probabilità che i nodi con utilizzo elevato siano selezionati. -
shape:mappa l'utilizzo dei nodi al punteggio del pianificatore. Ogni punto rappresenta una percentuale di utilizzo e il relativo punteggio corrispondente, con un punteggio lineare tra i punti.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
name: upstream
spec:
rawConfig: |
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: cpu-binpack-scheduler-RtC
plugins:
multiPoint:
enabled:
- name: NodeResourcesFit
disabled:
- name: PodTopologySpread
pluginConfig:
- name: NodeResourcesFit
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesFitArgs
scoringStrategy:
type: RequestedToCapacityRatio
resources:
- name: cpu
weight: 8
- name: memory
weight: 1
requestedToCapacityRatio:
shape:
- utilization: 0
score: 0
- utilization: 30
score: 9
- utilization: 50
score: 10
- utilization: 85
score: 10
- utilization: 90
score: 5
- utilization: 100
score: 0
Configurare il bin-packing dei nodi con il MostAllocated Plugin
La configurazione del pianificatore con MostAllocated prioritizza esclusivamente i nodi in base all'utilizzo delle risorse. Maggiore è l'utilizzo delle risorse, maggiore è il punteggio di un nodo, evitando nodi inutilizzati o ridimensionamento fino a quando necessario. In isolamento, questa configurazione rischia di saturare i nodi superando i limiti consentiti, causando rallentamenti e colli di bottiglia aggiuntivi.
Questa configurazione rende l'utilizzo della CPU il fattore dominante nella selezione dei nodi. Per garantire un comportamento coerente, è necessario disabilitare il plug-in PodTopologySpread perché può eseguire l'override del punteggio ponderato da NodeResourcesFit se lasciato abilitato per impostazione predefinita.
-
NodeResourcesFitcontrolla come il gestore di pianificazione valuta se un nodo dispone di risorse sufficienti per eseguire un pod. -
scoringStrategy: MostAllocatedpunteggi in base alle richieste dei pod.MostAllocatedindica al programmatore di preferire i nodi con un elevato utilizzo delle risorse. Questa strategia promuove il posizionamento di pod densi e consente di ottenere un migliore utilizzo dei nodi. -
Resourcesspecifica cheCPUeMemorysono le risorse primarie considerate per l'assegnazione dei punteggi. Con un peso pari a8, i nodi con utilizzo della CPU ottengono un punteggio 8 volte superiore rispetto alla memoria durante il ciclo di pianificazione dei pod. Ciò aumenta la probabilità che i nodi con utilizzo elevato siano selezionati.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
name: upstream
spec:
rawConfig: |
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: cpu-binpack-scheduler-mA
plugins:
multiPoint:
enabled:
- name: NodeResourcesFit
disabled:
- name: PodTopologySpread
pluginConfig:
# NodeResourcesFit configuration
- name: NodeResourcesFit
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesFitArgs
scoringStrategy:
type: MostAllocated
resources:
- name: cpu
weight: 8
- name: memory
weight: 1
Configurare la compattazione dei nodi con i plug-in MostAllocated e NodeResourcesBalancedAllocation
Questa configurazione cerca di aggiungere alcune protezioni alla strategia MostAllocated semplice ed efficiente tramite l'assegnazione di punteggi ai nodi in base all'utilizzo bilanciato delle risorse di destinazione.
NodeResourcesBalancedAllocation incoraggia il posizionamento dei pod nei nodi con un utilizzo proporzionale definito dall'utente, aumentando l'efficienza complessiva, evitando colli di bottiglia causati dalla pressione asimmetrica delle risorse. Ad esempio, i nodi associati alla CPU con abbondante memoria inutilizzata vengono assegnati punteggi inferiori a favore dei nodi con un migliore bilanciamento dell'utilizzo della CPU e della memoria.
-
NodeResourcesBalancedAllocationassegna punteggi ai nodi in base a quanto è bilanciato l'utilizzo delle risorse tra più risorse. Anziché ottimizzare l'utilizzo di una singola risorsa, questo plug-in preferisce i nodi in cui il consumo di risorse è proporzionale. -
Resourcesspecifica quali risorse vengono considerate durante la valutazione del saldo. Con cpu e memoria ponderata equamente, i nodi vengono assegnati punteggi superiori quando entrambe le risorse vengono utilizzate a livelli simili.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
name: upstream
spec:
rawConfig: |
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: cpu-binpack-scheduler-mA-BalancedAllocation
plugins:
multiPoint:
enabled:
- name: NodeResourcesFit
- name: NodeResourcesBalancedAllocation
disabled:
- name: PodTopologySpread
pluginConfig:
# NodeResourcesFit configuration
- name: NodeResourcesFit
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesFitArgs
scoringStrategy:
type: MostAllocated
resources:
- name: cpu
weight: 8
- name: memory
weight: 1
- name: NodeResourcesBalancedAllocation
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesBalancedAllocationArgs
resources:
- name: cpu
weight: 1
- name: memory
weight: 1
Assegnare un profilo di pianificazione a un intero cluster AKS
Creare un file denominato
cpu-bin-packing-scheduler.yamlcon un CRD denominatoupstreamApplica il manifest della configurazione di pianificazione usando il comando
kubectl apply.kubectl apply -f cpu-bin-packing-scheduler.yamlPer impostare come destinazione questo meccanismo di pianificazione per carichi di lavoro specifici, aggiornare le distribuzioni dei pod con quanto segue
schedulerName:... ... spec: schedulerName: binpacking-scheduler ... ...
Passaggi successivi
Per ulteriori informazioni sul pianificatore AKS, sulle configurazioni e best practice, vedere le risorse seguenti.