Distribuzione delle app ai pool di nodi di lavoro in cui è abilitato il ridimensionamento automatico
Per limitare una distribuzione di pod a uno specifico pool di nodi di lavoro gestito dal cluster autoscaler, utilizza una combinazione di etichette e nodeSelector o nodeAffinity per distribuire le applicazioni solo ai
pool di nodi di lavoro ridimensionati automaticamente. Con nodeAffinity, hai più controllo sulla modalità di funzionamento della pianificazione per mettere in corrispondenza i pod con i nodi di lavoro. Quindi, utilizza taint e tolleranze
in modo che solo queste applicazioni possano essere eseguite sui tuoi pool di nodi di lavoro ridimensionati automaticamente.
Per ulteriori informazioni, vedi i seguenti documenti di Kubernetes:
Prima di iniziare:
Per limitare l'esecuzione dei pod su determinati pool di nodi di lavoro ridimensionati automaticamente:
-
Assicurati di aver etichettato e applicato i taint ai tuoi pool di nodi di lavoro ridimensionati automaticamente come descritto in Preparazione del tuo cluster per il ridimensionamento automatico.
-
Nel tuo template delle specifiche del pod, metti in corrispondenza
nodeSelectoronodeAffinitycon l'etichetta che hai utilizzato nel tuo pool di nodi di lavoro.Esempio di
nodeSelector:... spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent nodeSelector: app: nginx ...Esempio di
nodeAffinity:spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: use operator: In values: - autoscale -
Nel tuo template delle specifiche del pod, metti in corrispondenza la
tolerationcon il taint impostato nel tuo pool di nodi di lavoro.Tolleranza
NoExecutedi esempio:tolerations: - key: use operator: "Exists" effect: "NoExecute" -
Distribuisci il pod. A causa dell'etichetta corrispondente, il pod viene pianificato su un nodo di lavoro che si trova nel pool di nodi di lavoro etichettato. Grazie alla tolleranza di corrispondenza, il pod può essere eseguito sul pool di lavoratori contaminati.
oc apply -f pod.yaml
Ampliamento dei nodi di lavoro prima che il pool di nodi abbia risorse insufficienti
Come descritto nell'argomento Comprendere il funzionamento dell'autoscaler cluster e nelle FAQ di Kubernetes Cluster Autoscaler, l'autoscaler cluster scala i pool di lavoratori in risposta alle risorse richieste dal carico di lavoro rispetto alle risorse disponibili del pool di lavoratori. Tuttavia, potresti volere che il cluster autoscaler esegua l'ampliamento dei nodi di lavoro prima che il pool di nodi di lavoro esaurisca le risorse. In questo caso, il tuo carico di lavoro non deve attendere il provisioning dei nodi di lavoro perché il pool di nodi di lavoro è già stato ampliato per soddisfare le richieste di risorse.
Il cluster autoscaler non supporta il ridimensionamento anticipato (overprovisioning) dei pool di nodi di lavoro. Tuttavia, puoi configurare altre risorse Kubernetes per lavorare con il cluster autoscaler per ottenere un ridimensionamento anticipato.
Sospendi pod
È possibile creare un'installazione che distribuisca i contenitori di pausa in pod con richieste di risorse specifiche e assegnare all'installazione una bassa priorità di pod. Quando queste risorse sono necessarie per carichi di lavoro con priorità più elevata, il pod di pausa viene prerilasciato e diventa un pod in sospeso. Questo evento attiva il cluster autoscaler per eseguire l'ampliamento.
Per ulteriori informazioni sull'impostazione di una distribuzione di pod in pausa, consultare le FAQ di Kubernetes. È possibile utilizzare questo file di configurazione di esempio di overprovisioning per creare la classe di priorità, l'account di servizio e le distribuzioni.
Se utilizzi questo metodo, assicurati di comprendere il funzionamento della priorità dei pod e come impostarla per le tue distribuzioni. Ad esempio, se il pod di pausa non dispone di
risorse sufficienti per un pod con priorità più alta, il pod non viene prerilasciato. Il carico di lavoro con priorità più alta rimane in sospeso, quindi il cluster autoscaler viene attivato per l'ampliamento. Tuttavia, in questo caso, l'azione
di scalata non è anticipata perché il carico di lavoro che si desidera eseguire non può essere pianificato a causa di risorse insufficienti. Il pod di pausa deve avere la corrispondenza nodeAffinity o nodeSelector e le tolleranze di corrispondenza che hai impostato per il tuo pool di nodi di lavoro.
Ridimensionamento automatico pod orizzontale (HPA)
Poiché il ridimensionamento automatico pod orizzontale si basa sull'utilizzo medio della CPU dei pod, il limite di utilizzo della CPU che hai impostato viene raggiunto prima che il pool di nodi di lavoro esaurisca le risorse.
Sono richiesti più pod, il che attiva quindi il cluster autoscaler per l'ampliamento del pool di nodi di lavoro. Per ulteriori informazioni sull'impostazione di HPA, consultare i documenti di Kubernetes.