Prepara un carico di lavoro ARM per il deployment


Questa pagina spiega come preparare un carico di lavoro da pianificare sui nodi ARM in un cluster GKE Standard. Per scoprire di più sulla pianificazione dei carichi di lavoro Arm 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:

Panoramica

Per impostazione predefinita, GKE pianifica i carichi di lavoro solo per nodi basati su x86, ovvero le serie di macchine Compute Engine con processori Intel o AMD, posizionando un'incompatibilità (kubernetes.io/arch=arm64:NoSchedule) su tutti i nodi ARM. Questa incompatibilità impedisce che carichi di lavoro compatibili con x86 vengano pianificati inavvertitamente sui nodi ARM. Se vuoi eseguire il deployment di un carico di lavoro in un nodo ARM, utilizza i campi descritti in questa pagina per indirizzare lo scheduler a inviare il carico di lavoro al tipo di nodo desiderato.

Utilizza uno dei seguenti campi:

Quando utilizzi un selettore dei nodi o una regola di affinità dei nodi, GKE pianifica i carichi di lavoro compatibili con Arm solo se hai dichiarato che l'immagine container 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 o con una regola di affinità dei nodi come descritto nelle sezioni seguenti, GKE aggiunge automaticamente una tollerazione 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 pianificazione del carico di lavoro sui nodi ARM.

In alcune situazioni, ad esempio quando hai immagini multi-architettura che possono essere eseguite su qualsiasi nodo, è consigliabile aggiungere manualmente questa tolleranza alla configurazione del carico di lavoro. Per le istruzioni, consulta Utilizzare la tolleranza per la pianificazione di carichi di lavoro multi-architettura in qualsiasi architettura.

Utilizza 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 sono presenti in tutti i nodi ARM sui cluster GKE.

Quando questo selettore di nodi è incluso nella configurazione del carico di lavoro, GKE aggiunge la tolleranza per abbinare l'incompatibilità al fine di consentire la pianificazione del carico di lavoro sui nodi ARM.

Utilizza una regola di affinità nodo per pianificare un carico di lavoro ARM

Puoi anche utilizzare l'affinità nodo per pianificare il carico di lavoro.

Pianifica il carico di lavoro su un'unica architettura

Aggiungi la seguente affinità nodo 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 per i nodi con l'etichetta arm64, presenti in tutti i nodi ARM sui cluster GKE.

Quando questa regola di affinità dei nodi viene inclusa nella configurazione del carico di lavoro, GKE aggiunge la tolleranza per abbinare l'incompatibilità al fine di consentire la pianificazione del carico di lavoro sui nodi ARM.

Pianifica il carico di lavoro per le architetture x86 e ARM

Se vuoi pianificare un carico di lavoro sulle architetture x86 (processori Intel e AMD) e ARM, puoi specificarlo in diversi modi.

Usa la tolleranza per pianificare carichi di lavoro multi-arch in qualsiasi architettura

Se hai un'immagine ad archi multipli 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 è necessario il selettore dei nodi o le regole di affinità dei nodi descritte in questa pagina, poiché il carico di lavoro 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 pianificare un carico di lavoro per i 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 la tolleranza arm64 nella configurazione del carico di lavoro, GKE può pianificare il carico di lavoro su tutti i pool di nodi.

Utilizza la regola di affinità nodo per pianificare carichi di lavoro multi-architettura per qualsiasi architettura

Se vuoi pianificare un carico di lavoro sui nodi di tutti i tipi di architettura, tra cui x86 e ARM, puoi utilizzare anche una regola di affinità dei nodi. Con le regole di affinità dei nodi, puoi specificare esattamente su quali tipi di architettura vuoi pianificare il carico di lavoro. Questo approccio è consigliato per pianificare i carichi di lavoro sui cluster Autopilot. Per saperne 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, regole di affinità dei nodi o tolleranze per la pianificazione del carico di lavoro. Se hai un'immagine che vuoi pianificare solo per i nodi x86, non è necessario utilizzare questi campi.

Per pianificare i carichi di lavoro per qualsiasi tipo di architettura, elenca sia arm64 che amd64 la sezione values del campo Affinità nodo. amd64 include tutti i nodi che utilizzano processori x86.

L'esempio seguente specifica che questo carico di lavoro potrebbe essere pianificato su nodi con processori Arm o processori x86:

  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/arch
            operator: In
            values:
            - arm64
            - amd64

Le etichette per ogni tipo di architettura sono:

Ad esempio, se hai un cluster con i seguenti pool di nodi e la determinata regola di affinità nodo:

  • 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 l'affinità dei nodi con arm64 incluso nell'elenco values, GKE aggiunge la tolleranza alla configurazione del carico di lavoro e può pianificare il carico di lavoro su 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 per qualsiasi altro carico di lavoro, purché tu abbia completato i passaggi preliminari. Per esempi di deployment dei carichi di lavoro, visualizza le seguenti pagine:

Risoluzione dei problemi

Per errori comuni e informazioni sulla risoluzione dei problemi, consulta Risoluzione dei problemi relativi ai carichi di lavoro ARM.

Passaggi successivi