Implementa cargas de trabajo de Autopilot en la arquitectura Arm


En esta página, se muestra cómo configurar las implementaciones de Google Kubernetes Engine (GKE) Autopilot para solicitar nodos que están respaldados por la arquitectura Arm.

Acerca de la arquitectura Arm en Autopilot

Los clústeres de Autopilot ofrecen clases de procesamiento para las cargas de trabajo que tienen requisitos de hardware específicos. Algunas de estas clases de procesamiento admiten varias arquitecturas de CPU, como amd64 y arm64.

Casos de uso para nodos Arm

Los nodos con arquitectura Arm ofrecen un rendimiento más rentable que los nodos x86 similares. Debes seleccionar Arm para tus cargas de trabajo de Autopilot en situaciones como las siguientes:

  • Tu entorno depende de la arquitectura Arm para la compilación las pruebas.
  • Estás desarrollando aplicaciones para dispositivos Android que se ejecutan en CPU Arm.
  • Usas imágenes multiarquitectura y deseas optimizar los costos mientras ejecutas las cargas de trabajo.

Cómo solicitar nodos Arm en Autopilot

Para solicitar nodos Arm para tus Pods, debes solicitar nodos con la arquitectura de Arm y solicitar una clase de procesamiento que admita nodos Arm. En las siguientes secciones, se muestra cómo solicitar la clase de procesamiento y la arquitectura Arm mediante un selector de nodos o una regla de afinidad de nodos en la especificación del Pod.

Para obtener una lista de las clases de procesamiento que admiten la arquitectura Arm, consulta Clases de procesamiento en Autopilot.

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Kubernetes Engine de Google.
  • Habilitar la API de Kubernetes Engine de Google
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente.
  • Asegúrate de tener un clúster de GKE Autopilot que ejecute la versión 1.24.1-gke.1400 o posterior de GKE. Para configurar la versión, usa la marca --cluster-version en el comando create o upgrade.
  • Asegúrate de tener una cuota para el tipo de máquina T2A de Compute Engine.
  • Asegúrate de tener un Pod con una imagen de contenedor compilada para la arquitectura Arm.

Solicitar una clase de procesamiento y arquitectura Arm

Para indicarle a Autopilot que coloque tus Pods en una clase de procesamiento que admita la arquitectura de ARM, especifica las dos etiquetas siguientes en un nodeSelector o una regla de afinidad de nodos:

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

Reemplaza COMPUTE_CLASS por el nombre de una clase de procesamiento que admita la arquitectura Arm, como Scale-Out.

Cuando implementas tu carga de trabajo, Autopilot hace lo siguiente:

  1. Aprovisiona de forma automática los nodos Arm para ejecutar tus Pods.
  2. Genera un taint de forma automática en los nodos nuevos para evitar que se programen Pods que no sean de Arm en esos nodos.
  3. Agrega de forma automática una tolerancia a tus Pods de Arm para permitir la programación en los nodos nuevos.

También puedes solicitar la arquitectura Arm para Pods Spot.

Solicitud de ejemplo de la arquitectura Arm

En las siguientes especificaciones de ejemplo, se muestra cómo usar un selector de nodos o una regla de afinidad de nodos para solicitar la arquitectura Arm en Autopilot.

nodeSelector

En el siguiente manifiesto de ejemplo, se muestra cómo solicitar nodos Arm en un 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

Puedes usar la afinidad de nodos para solicitar nodos Arm. También puedes especificar el tipo de afinidad de nodos que se usará:

  • requiredDuringSchedulingIgnoredDuringExecution: Debe usar la clase de procesamiento y la arquitectura especificadas.
  • preferredDuringSchedulingIgnoredDuringExecution: Usa la clase de procesamiento y la arquitectura especificadas según el criterio del mejor esfuerzo. Por ejemplo, si un nodo x86 existente es asignable, GKE coloca tu Pod en el nodo x86 en lugar de aprovisionar un nuevo nodo Arm. A menos que uses un manifiesto de imagen multiarquitectura, el Pod fallará. Te recomendamos que solicites explícitamente la arquitectura específica que desees.

En el siguiente manifiesto de ejemplo, se requiere la clase Scale-Out y nodos Arm:

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

Recomendaciones

  • Compila y usa imágenes multiarquitectura como parte de tu canalización. Las imágenes multiarquitectura garantizan que tus Pods se ejecuten incluso si se colocan en nodos x86.
  • Solicita arquitectura y clases de procesamiento de forma explícita en tus manifiestos de cargas de trabajo. Si no lo haces, Autopilot usa la arquitectura predeterminada de la clase de procesamiento seleccionada, que podría no ser Arm.

Disponibilidad

Puedes implementar cargas de trabajo de Autopilot en la arquitectura Arm en las siguientes regiones de Google Cloud:

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

Soluciona problemas

Para obtener información sobre la solución de problemas y errores comunes, consulta Solución de problemas de cargas de trabajo de Arm.

¿Qué sigue?