Questa pagina spiega come preparare un carico di lavoro da pianificare sui nodi Arm in un cluster GKE Standard. Per scoprire di più sulla programmazione Arma i carichi di lavoro con Autopilot, consulta Eseguire il deployment dei carichi di lavoro Autopilot sull'architettura ARM.
Per pianificare correttamente un carico di lavoro su un nodo Arm, devi disporre di quanto segue:
- Un'immagine container compatibile con ARM. Per indicazioni su come verificare questa opzione, consulta Il mio carico di lavoro è pronto per Arm?
- Nodi ARM in cui è possibile pianificare carichi di lavoro compatibili con Arm. Per creare le risorse necessarie, consulta Creare cluster e pool di nodi con nodi Arm.
- Un cluster in una regione o zona Google Cloud in cui è disponibile ARM di macchine virtuali (VM). Per una tabella filtrabile dei tipi di macchine e delle piattaforme, consulta Regioni e zone disponibili.
Panoramica
Per impostazione predefinita, GKE pianifica i carichi di lavoro solo in base a x86
nodi: serie di macchine Compute Engine con Intel
o processori AMD, posizionando
incompatibilità (kubernetes.io/arch=arm64:NoSchedule
)
su tutti i nodi ARM. Questo inquinamento impedisce la pianificazione involontaria dei carichi di lavoro compatibili con x86 sui nodi Arm. Se vuoi eseguire il deployment di un carico di lavoro su un nodo Arm, utilizza i campi descritti in questa pagina per indicare allo scheduler di inviare il carico di lavoro al tipo di nodo desiderato.
Utilizza uno dei seguenti campi:
- Un selettore di nodi.
- Un'affinità nodo personalizzata.
Quando utilizzi un selettore di nodi o una regola di affinità dei nodi, GKE pianifica i carichi di lavoro compatibili con ARM solo se hai dichiarato che l'immagine del contenitore del carico di lavoro può essere eseguita sull'architettura del nodo.
Se pianifichi un carico di lavoro compatibile con Arm con un selettore di nodi oppure con una regola di affinità nodo come descritto in nelle sezioni seguenti, GKE aggiunge automaticamente tolleranza alla configurazione del carico di lavoro, in modo che i pod possano essere eseguiti sui nodi ARM.
Questa tolleranza aggiunta al carico di lavoro corrisponde all'incompatibilità (kubernetes.io/arch=arm64:NoSchedule
)
aggiunta a tutti i nodi Arm per consentire la programmazione del carico di lavoro sui nodi Arm.
In alcune situazioni, ad esempio quando hai immagini multi-architettura che possono essere eseguite su qualsiasi nodo, ti consigliamo di aggiungere manualmente questa tolleranza alla configurazione del carico di lavoro. Per istruzioni, consulta Utilizza la tolleranza per pianificare carichi di lavoro multi-arch per qualsiasi architettura.
Usa un selettore di nodi per pianificare un carico di lavoro ARM
Aggiungi il seguente selettore di nodi alla specifica:
nodeSelector:
kubernetes.io/arch: arm64
Il selettore di nodi specifica che questo carico di lavoro deve essere pianificato solo per i nodi con l'etichetta arm64
, che è presente su tutti i nodi Arm dei cluster GKE.
Quando questo selettore di nodi è incluso nella configurazione del carico di lavoro, GKE aggiunge la tolleranza per soddisfare l'incompatibilità per consentire la pianificazione del carico di lavoro sui nodi Arm.
Usa una regola di affinità nodo per pianificare un carico di lavoro ARM
Puoi anche utilizzare l'affinità dei nodi per pianificare il carico di lavoro.
Pianifica il carico di lavoro in un'unica 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 carico di lavoro deve essere pianificato solo in
nodi con l'etichetta arm64
, che corrispondono a tutti i nodi Arm nei cluster GKE
avere.
Quando questa regola di affinità dei nodi è inclusa nella configurazione del carico di lavoro, GKE aggiunge la tolleranza per soddisfare l'incompatibilità per consentire la pianificazione del carico di lavoro sui nodi Arm.
Pianificare il carico di lavoro per le architetture x86 e Arm
Se vuoi pianificare un carico di lavoro sia su architetture x86 (processori Intel e AMD) sia su architetture Arm, puoi specificarlo in diversi modi.
Utilizza la tolleranza per pianificare i carichi di lavoro multi-arch su qualsiasi architettura
Se hai un'immagine multi-arch che vuoi programmare in qualsiasi versione disponibile di architettura in un cluster Standard, devi solo aggiungere rispetto alla specifica del carico di lavoro. Non hai bisogno del selettore di nodi le regole di affinità dei nodi descritte in questa pagina quando è possibile pianificare il carico di lavoro 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 pianificare un carico di lavoro sui nodi con qualsiasi tipo di architettura.
Ad esempio, se hai un cluster con i seguenti pool di nodi:
- my-t2a-node-pool, utilizzando le VM t2a-standard-16 (
arm64
). - my-c2-node-pool, utilizzando le VM c2-standard-8 (
amd64
). - my-t2d-node-pool, utilizzando le VM t2-standard-48 (
amd64
).
Se esegui il deployment in questo cluster di un carico di lavoro che utilizza un'immagine multi-arch e
tolleranza di arm64
nella configurazione dei carichi di lavoro, GKE potrebbe
di pianificare il carico di lavoro su tutti i pool di nodi.
Utilizza la regola di affinità dei nodi per pianificare i carichi di lavoro multi-architettura su qualsiasi architettura
Se vuoi che un carico di lavoro venga pianificato su nodi di diversi tipi di architettura inclusi x86 e Arm, puoi anche usare una regola di affinità nodo. Con le regole di affinità dei nodi, puoi specificare esattamente su quali tipi di architettura pianificare il carico di lavoro. Questo approccio è consigliato per la programmazione carichi di lavoro standard sui cluster Autopilot. Per scoprire di più, consulta Eseguire il deployment dei carichi di lavoro Autopilot sull'architettura Arm.
Con i carichi di lavoro basati su x86, non sono necessari questi selettori dei nodi, queste regole di affinità dei nodi o queste tolleranze per la pianificazione del carico di lavoro. Se hai un'immagine che vuoi pianificare solo per i nodi basati su x86, non devi utilizzare questi campi.
Per pianificare carichi di lavoro per qualsiasi tipo di architettura, elenca sia arm64
che amd64
la sezione values
del campo di affinità nodo. amd64
include tutti i nodi
che utilizzano processori x86.
L'esempio seguente specifica che questo carico di lavoro può essere pianificato su nodi con i 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 es. Tau T2A).amd64
per i nodi che utilizzano processori AMD (ad esempio Tau T2D) o i nodi che utilizzano processori Intel (ad esempio C2).
Ad esempio, se hai un cluster con i seguenti pool di nodi e i regola di affinità dei nodi:
- my-t2a-node-pool, utilizzando le VM t2a-standard-16 (
arm64
). - my-c2-node-pool, utilizzando le VM c2-standard-8 (
amd64
). - my-t2d-node-pool, utilizzando VM t2-standard-48 (
amd64
).
Se esegui il deployment in questo cluster di un carico di lavoro che utilizza un'immagine multi-architettura e l'affinità dei nodi con arm64
inclusa nell'elenco values
, GKE
aggiunge la tolleranza nella configurazione del carico di lavoro e può
pianificare il carico di lavoro 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 eseguirne il deployment.
Quando esegui il deployment di un carico di lavoro in un cluster GKE, le istruzioni sono uguali per tutti i tipi di architettura. Puoi eseguire il deployment di un carico di lavoro compatibile con Arm eseguirai il deployment di qualsiasi altro carico di lavoro, purché tu abbia completato passaggi preliminari. Per vedere 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 gli errori comuni e le informazioni sulla risoluzione dei problemi, consulta Risoluzione dei problemi dei carichi di lavoro ARM.
Passaggi successivi
- Carichi di lavoro ARM su GKE
- Esegui la migrazione di un'applicazione x86 su GKE a multi-arch con Arm