Ejecución de aplicaciones en nodos basados en ARM

Descubra cómo ejecutar aplicaciones en nodos de trabajador basados en Arm en clusters creados con Kubernetes Engine (OKE).

Para ejecutar aplicaciones en nodos de trabajador basados en Arm, seleccione un pool de nodos gestionados y una unidad basada en Arm. La unidad de computación determina el número de CPU y la cantidad de memoria asignada a cada nodo del pool de nodos. Puede seleccionar unidades con hardware dedicado basadas en Arm y unidades de máquina virtual flexibles. Estas instancias informáticas A1 de Ampere se basan en el procesador Altra de Ampere (consulte Recursos informáticos basados en Arm). Para obtener información sobre el recuento de OCPU, la memoria, el almacenamiento y los detalles de red de estas unidades, consulte Unidades de computación.

Puede especificar una unidad basada en Arm para un pool de nodos mediante la consola, la API y la CLI al crear un nuevo cluster. También puede especificar una unidad basada en Arm al crear un nuevo pool de nodos. Consulte los pasos de configuración del pool de nodos en Creación de clusters de Kubernetes mediante flujos de trabajo de consola y Creación de nodos de trabajador con propiedades actualizadas respectivamente.

Para ver el número de núcleos basados en Arm reservables disponibles, utilice la consola. Abra el menú de navegación y haga clic en Gobernanza y administración. En Gestión de arrendamiento, haga clic en Límites, cuotas y uso.

En comparación con otras unidades, las unidades basadas en Arm ofrecen una mejor relación precio-rendimiento, un mayor aislamiento de seguridad (porque cada núcleo tiene un solo thread) y un rendimiento más consistente. Normalmente, los desarrolladores utilizan nodos de trabajador basados en Arm en clusters de Kubernetes para desarrollar y probar aplicaciones.

Al desplegar una aplicación en un cluster que ha creado con Kubernetes Engine, debe especificar en la especificación de pod los recursos informáticos necesarios. Para desplegar la aplicación, kube-scheduler determina qué nodo tiene los recursos necesarios. Si un cluster tiene pools de nodos con unidades basadas en Arm y también pools de nodos con otras unidades (por ejemplo, unidades AMD64), puede utilizar nodeSelector en la especificación de pod para especificar que una aplicación se ejecute en nodos de trabajador basados en Arm. Consulte Defining a pod to run only on Arm-based node.

Si desea desplegar una aplicación en nodos de trabajador basados en Arm y no basados en Arm en el mismo cluster, utilice imágenes de arquitectura múltiple (a veces conocidas como listas de manifiestos) almacenadas en un registro compatible con Open Container Initiative, como Oracle Cloud Infrastructure Registry (consulte Visión general de Container Registry). Las imágenes de arquitectura múltiple se crean a partir de un único árbol de origen, con una etiqueta de imagen que incluye imágenes para las arquitecturas x86 y Arm. Puede crear imágenes de arquitectura múltiple mediante Docker Buildx, Podman y Buildah.

Tenga en cuenta lo siguiente:

  • Puede especificar unidades basadas en Arm para pools de nodos en clusters que ejecuten la versión 1.19.7 o posterior de Kubernetes. No especifique una unidad basada en Arm para pools de nodos que ejecuten versiones anteriores de Kubernetes.
  • Una vez creado un pool de nodos con una unidad basada en Arm, no puede cambiar el pool de nodos para que tenga una unidad no basada en Arm. Del mismo modo, no puede cambiar un pool de nodos con una unidad no basada en Arm para que tenga una unidad basada en Arm.
  • Al especificar una unidad basada en Arm para un pool de nodos, también se especifica una imagen compatible con la unidad. Consulte Unidades de computación.

Definición de un pod para que se ejecute solo en nodos basados en Arm

Si un cluster tiene pools de nodos con unidades basadas en Arm y también pools de nodos con otras unidades (por ejemplo, unidades AMD64), puede utilizar un nodeSelector en la especificación de pod para especificar que una aplicación se va a ejecutar solo en nodos de trabajador basados en Arm. Por ejemplo, el siguiente archivo de configuración define un pod para que se ejecute en cualquier nodo basado en Arm del cluster:


apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    kubernetes.io/arch: arm64