Esegui il deployment dei carichi di lavoro Autopilot sull'architettura Arm


Questa pagina mostra come configurare Google Kubernetes Engine (GKE) Deployment Autopilot per richiedere nodi supportati da ARM dell'architettura.

Informazioni sull'architettura Arm in Autopilot

I cluster Autopilot offrono classi di computing per carichi di lavoro con requisiti hardware specifici. Alcuni di questi classi di calcolo supportano più architetture CPU, ad esempio amd64 e arm64.

Casi d'uso per i nodi ARM

I nodi con architettura ARM offrono prestazioni più convenienti rispetto a servizi simili nodi x86. Dovresti selezionare ARM per i tuoi carichi di lavoro Autopilot in situazioni come le seguenti:

  • Il tuo ambiente si basa sull'architettura Arm per la compilazione e i test.
  • Stai sviluppando applicazioni per dispositivi Android che funzionano su CPU Arm.
  • Utilizzi immagini multi-architettura e vuoi ottimizzare i costi durante l'esecuzione dei carichi di lavoro.

Come richiedere nodi Arm in Autopilot

Per richiedere nodi Arm per i tuoi pod, devi richiedere nodi con l'ARM e richiedere una classe di computing che supporti i nodi Arm. Le seguenti mostrano come richiedere la classe di computing e l'architettura ARM utilizzando un selettore di nodi o una regola di affinità dei nodi nella specifica del pod.

Per un elenco delle classi di computing che supportano l'architettura ARM, consulta Classi di calcolo in Autopilot.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Attiva l'API Google Kubernetes Engine.
  • Abilita l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, ottieni la versione più recente eseguendo gcloud components update.
  • Assicurati di avere un cluster GKE Autopilot che esegue GKE versione 1.24.1-gke.1400 o successiva. Per impostare la versione, utilizza il flag --cluster-version nel comando create o upgrade.
  • Assicurati di disporre della quota per il tipo di macchina T2A Compute Engine.
  • Assicurati di avere un pod con un'immagine container creata per l'architettura Arm.

Richiedere una classe di calcolo e un'architettura Arm

Per indicare ad Autopilot di posizionare i pod in una classe di calcolo che supporta l'architettura Arm, specifica entrambe le seguenti etichette in una regola nodeSelector o node affinity:

cloud.google.com/compute-class: COMPUTE_CLASS
kubernetes.io/arch: arm64

Sostituisci COMPUTE_CLASS con il nome di una classe di calcolo che supporta l'architettura ARM, ad esempio Scale-Out.

Quando esegui il deployment del carico di lavoro, Autopilot esegue le seguenti operazioni:

  1. Esegue il provisioning automatico dei nodi Arm per l'esecuzione dei pod.
  2. Contamina automaticamente i nuovi nodi per impedire la pianificazione di pod non Arm su questi nodi.
  3. Aggiunge automaticamente una tolleranza ai pod Arm per consentire la pianificazione sui nuovi nodi.

Puoi anche richiedere l'architettura Arm per i pod Spot.

Esempio di richiesta per l'architettura ARM

Le seguenti specifiche di esempio mostrano come utilizzare un selettore di nodi o un regola di affinità dei nodi per richiedere l'architettura ARM in Autopilot.

nodeSelector

Il seguente esempio di manifest mostra come richiedere nodi ARM in una nodeSelector:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-arm
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-arm
  template:
    metadata:
      labels:
        app: nginx-arm
    spec:
      nodeSelector:
        cloud.google.com/compute-class: Scale-Out
        kubernetes.io/arch: arm64
      containers:
      - name: nginx-arm
        image: nginx
        resources:
          requests:
            cpu: 2000m
            memory: 2Gi

nodeAffinity

Puoi utilizzare la modalità affinità nodo per richiedere nodi ARM. Puoi anche specificare il tipo di affinità dei nodi da utilizzare:

  • requiredDuringSchedulingIgnoredDuringExecution: deve utilizzare la classe e l'architettura di calcolo specificate.
  • preferredDuringSchedulingIgnoredDuringExecution: utilizza la classe di calcolo e l'architettura specificate secondo il criterio del massimo impegno. Ad esempio, se un nodo x86 esistente è allocabile, GKE posiziona il pod il nodo x86 invece di eseguire il provisioning di un nuovo nodo Arm. A meno che tu non stia utilizzando un manifest dell'immagine multi-arch, il pod si arresta in modo anomalo. Ti consigliamo vivamente di richiedere esplicitamente l'architettura specifica che ti interessa.

Il manifest di esempio seguente richiede la classe Scale-Out e ARM nodi:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-arm
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-arm
  template:
    metadata:
      labels:
        app: nginx-arm
    spec:
      terminationGracePeriodSeconds: 25
      containers:
      - name: nginx-arm
        image: nginx
        resources:
          requests:
            cpu: 2000m
            memory: 2Gi
            ephemeral-storage: 1Gi
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: cloud.google.com/compute-class
                operator: In
                values:
                - Scale-Out
              - key: kubernetes.io/arch
                operator: In
                values:
                - arm64

Consigli

  • Crea e utilizza immagini multi-architettura come parte della tua pipeline. Le immagini multi-architettura assicurano che i pod vengano eseguiti anche se sono posizionati su nodi x86.
  • Richiedi esplicitamente le classi di architettura e di calcolo nei manifest del carico di lavoro. In caso contrario, Autopilot utilizza l'architettura predefinita la classe di computing selezionata, che potrebbe non essere Arm.

Disponibilità

Puoi eseguire il deployment dei carichi di lavoro Autopilot sull'architettura ARM nei seguenti Regioni di Google Cloud:

  • us-central1
  • europe-west4
  • asia-southeast1

Risoluzione dei problemi

Per gli errori comuni e le informazioni sulla risoluzione dei problemi, consulta Risolvere i problemi relativi ai carichi di lavoro Arm.

Passaggi successivi