Questa pagina spiega come preparare un workload per la pianificazione sui nodi Arm in un cluster GKE Standard. Per scoprire di più sulla pianificazione dei workload Arm con Autopilot, consulta Eseguire il deployment dei workload Autopilot sull'architettura Arm.
Per pianificare correttamente un workload su un nodo Arm, devi disporre di quanto segue:
- Un'immagine container compatibile con Arm. Per indicazioni su come verificare, vedi Il mio carico di lavoro è pronto per Arm?
- Nodi Arm in cui è possibile pianificare i carichi di lavoro compatibili con Arm. Per creare le risorse necessarie, consulta Creare cluster e node pool con nodi Arm.
- Un cluster in una Trusted Cloud regione o zona che dispone di macchine virtuali (VM) Arm disponibili. Per una tabella filtrabile dei tipi di macchine e delle piattaforme, consulta Regioni e zone disponibili.
Panoramica
Per impostazione predefinita, GKE pianifica i workload solo su nodi basati su x86, ovvero serie di macchine Compute Engine con processori Intel o AMD, inserendo un taint (kubernetes.io/arch=arm64:NoSchedule
) su tutti i nodi Arm. Questa contaminazione impedisce la pianificazione involontaria dei workload compatibili con x86 sui nodi Arm. Se vuoi eseguire il deployment di un workload su
un nodo Arm, utilizza i campi descritti in questa pagina per indicare allo scheduler di
inviare il workload al tipo di nodo desiderato.
Utilizza uno dei seguenti campi:
- Un selettore di nodi.
- Una regola di affinità nodo.
Quando utilizzi un selettore di nodi o una regola di affinità dei nodi, GKE pianifica solo i carichi di lavoro compatibili con Arm quando hai dichiarato che l'immagine container del carico di lavoro può essere eseguita sull'architettura del nodo.
Se pianifichi un workload compatibile con Arm con un selettore di nodi o con una regola di affinità dei nodi come descritto nelle sezioni seguenti, GKE aggiunge automaticamente una tolleranza alla configurazione del workload in modo che i pod possano essere eseguiti sui nodi Arm.
Questa tolleranza aggiunta al workload corrisponde all'incompatibilità (kubernetes.io/arch=arm64:NoSchedule
)
aggiunta a tutti i nodi Arm per consentire la pianificazione del workload sui nodi Arm.
In alcune situazioni, ad esempio quando hai immagini multi-architettura che possono essere eseguite su qualsiasi nodo, potresti voler aggiungere manualmente questa tolleranza alla configurazione del workload. Per istruzioni, consulta Utilizzare la tolleranza per pianificare carichi di lavoro multi-architettura su qualsiasi architettura.
Utilizza un selettore di nodi per pianificare un workload Arm
Aggiungi il seguente selettore di nodi alla specifica:
nodeSelector:
kubernetes.io/arch: arm64
Il selettore dei nodi specifica che questo workload deve essere pianificato solo per
i nodi con l'etichetta arm64
, che hanno tutti i nodi Arm sui cluster GKE.
Quando questo selettore di nodi è incluso nella configurazione del workload, GKE aggiunge la tolleranza per corrispondere all'incompatibilità e consentire la pianificazione del workload sui nodi Arm.
Utilizza una regola di affinità dei nodi per pianificare un workload Arm
Puoi anche utilizzare l'affinità dei nodi per pianificare il carico di lavoro.
Pianificare il carico di lavoro per una singola architettura
Aggiungi la seguente affinità dei nodi alla specifica:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
La regola di affinità dei nodi specifica che il workload deve essere pianificato solo per i nodi con l'etichetta arm64
, che hanno tutti i nodi Arm sui cluster GKE.
Quando questa regola di affinità nodo è inclusa nella configurazione del workload, GKE aggiunge la tolleranza per corrispondere all'incompatibilità e consentire la pianificazione del workload sui nodi Arm.
Pianifica il workload per le architetture x86 e Arm
Se vuoi pianificare un carico di lavoro su architetture x86 (processori Intel e AMD) e Arm, puoi specificarlo in diversi modi.
Utilizza la tolleranza per pianificare i workload multi-architettura su qualsiasi architettura
Se hai un'immagine multi-architettura che vuoi pianificare per qualsiasi tipo di architettura disponibile in un cluster Standard, devi solo aggiungere la tolleranza alla specifica del carico di lavoro. Non hai bisogno del selettore di nodi o delle regole di affinità dei nodi descritte in questa pagina, poiché il workload può essere pianificato per tutti i tipi di architettura.
Aggiungi la tolleranza:
tolerations:
- key: kubernetes.io/arch
operator: Equal
value: arm64
effect: NoSchedule
Utilizzando questa tolleranza, GKE potrebbe programmare un workload per i nodi con qualsiasi tipo di architettura.
Ad esempio, se hai un cluster con i seguenti pool di nodi:
- my-c4a-node-pool, utilizzando VM c4a-standard-16 (
arm64
). - my-c2-node-pool, utilizzando VM c2-standard-8 (
amd64
). - my-t2d-node-pool, utilizzando VM t2-standard-48 (
amd64
).
Se esegui il deployment in questo cluster di un workload che utilizza un'immagine multi-architettura e la tolleranza arm64
nella configurazione del workload, GKE potrebbe pianificare il workload in tutti i pool di nodi.
Utilizza la regola di affinità dei nodi per pianificare i workload multarchitettura su qualsiasi architettura
Se vuoi che un carico di lavoro venga pianificato sui nodi in base ai tipi di architettura, inclusi x86 e Arm, puoi anche utilizzare una regola di affinità nodo. Con le regole di affinità dei nodi, puoi specificare esattamente i tipi di architettura su cui vuoi pianificare il workload. Questo approccio è consigliato per la pianificazione dei carichi di lavoro sui cluster Autopilot. Per scoprire di più, consulta Eseguire il deployment dei workload Autopilot sull'architettura Arm.
Con i workload basati su x86, non hai bisogno di questi selettori di nodi, regole di affinità dei nodi o tolleranze per la pianificazione del workload. Se hai un'immagine che vuoi pianificare solo per i nodi basati su x86, non devi utilizzare questi campi.
Per pianificare i workload per qualsiasi tipo di architettura, elenca sia arm64
che amd64
nella sezione values
del campo Affinità nodo. amd64
include tutti i nodi
che utilizzano processori x86.
Il seguente esempio specifica che questo workload può essere pianificato su nodi con processori Arm o x86:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
- amd64
Le etichette per ogni tipo di architettura sono:
arm64
per i nodi che utilizzano processori Arm (ad esempio C4A).amd64
per nodi che utilizzano processori AMD (ad esempio Tau T2D) o nodi che utilizzano processori Intel (ad esempio C2).
Ad esempio, se hai un cluster con i seguenti pool di nodi e la seguente regola di affinità dei nodi:
- my-c4a-node-pool, utilizzando VM c4a-standard-16 (
arm64
). - my-c2-node-pool, utilizzando VM c2-standard-8 (
amd64
). - my-t2d-node-pool, utilizzando VM t2-standard-48 (
amd64
).
Se esegui il deployment in questo cluster di un workload che utilizza un'immagine multi-architettura e l'affinità dei nodi con arm64
inclusa nell'elenco values
, GKE aggiunge la tolleranza nella configurazione del workload e potrebbe pianificare il workload in tutti i pool di nodi.
Esegui il deployment del carico di lavoro
Ora che hai specificato dove devono essere pianificati i carichi di lavoro compatibili con Arm, puoi eseguire il deployment del carico di lavoro.
Quando esegui il deployment di un carico di lavoro in un cluster GKE, le istruzioni sono le stesse per tutti i tipi di architettura. Puoi eseguire il deployment di un carico di lavoro compatibile con Arm come faresti con qualsiasi altro carico di lavoro, a condizione che tu abbia completato i passaggi preliminari. Per visualizzare esempi di deployment dei carichi di lavoro, consulta le seguenti pagine:
- Deployment di un'applicazione Linux stateless.
- Deployment di un'applicazione stateful.
- Esecuzione di un job.
Risoluzione dei problemi
Per informazioni sugli errori comuni e sulla risoluzione dei problemi, consulta Risoluzione dei problemi dei carichi di lavoro Arm.
Passaggi successivi
- Carichi di lavoro Arm su GKE
- Esegui la migrazione dell'applicazione x86 su GKE all'architettura multi-arch con Arm