Acerca de las ComputeClasses de GKE

Puedes definir conjuntos de atributos de nodos y parámetros de configuración de ajuste de escala automático que Google Kubernetes Engine (GKE) usa para crear nodos para ejecutar Pods con ComputeClasses. En esta página, se describe cómo funcionan las ComputeClasses, los casos de uso y los beneficios, y los tipos disponibles de ComputeClasses.

Esta información está destinada a las siguientes personas:

  • Arquitectos de Cloud y ingenieros de plataformas que desean reducir la sobrecarga asociada con la administración de la infraestructura del clúster
  • Operadores de apps y SRE que desean enfocarse en operar cargas de trabajo sin pensar en la infraestructura subyacente

Acerca de ComputeClasses y el ajuste de escala automático del clúster

Una ComputeClass es un conjunto de atributos de nodos y parámetros de configuración de ajuste de escala automático que existe como un objeto de la API de Kubernetes en un clúster de GKE. Puedes seleccionar una ComputeClass en cualquier carga de trabajo de Kubernetes que implementes. El ajuste de escala automático del clúster de GKE usa los atributos de una ComputeClass para crear nodos para las cargas de trabajo.

Los ingenieros de plataformas pueden usar ComputeClasses para configurar la infraestructura para varios tipos de cargas de trabajo, de modo que cada nodo nuevo se optimice para los requisitos específicos de tus aplicaciones. Las ComputeClasses mejoran la velocidad y la flexibilidad del ajuste de escala automático de GKE y te proporcionan un método declarativo para configurar las opciones de infraestructura en tus clústeres. Para obtener más información, consulta la sección Beneficios de usar ComputeClasses.

Las capacidades y funciones específicas de GKE solo están disponibles con ComputeClasses, como las siguientes:

  • Prioridades de procesamiento de respaldo: Define varios conjuntos de configuraciones de infraestructura en una ComputeClass, priorizadas según tus preferencias. Durante el escalamiento, si la configuración más preferida no está disponible, GKE recurre a la siguiente configuración.
  • Migración activa a nodos de prioridad más alta: Cuando se configura, GKE reemplaza automáticamente los nodos que están más abajo en tu lista de prioridades de respaldo por nodos que están más arriba en esa lista con el tiempo. Como resultado, tus Pods eventualmente se ejecutan en tus nodos más preferidos en una ComputeClass, incluso si ese hardware no estaba disponible cuando creaste la carga de trabajo.
  • Autopilot en GKE Standard: Ejecuta cargas de trabajo en el modo Autopilot de GKE para usar funciones de Autopilot, como la plataforma de procesamiento optimizada para contenedores y la facturación basada en Pods, incluso en clústeres Standard. GKE administra estos nodos y cargas de trabajo, lo que te brinda los beneficios del modo Autopilot en cualquier clúster.

Beneficios de ComputeClasses

Las ComputeClasses proporcionan a los operadores y administradores de plataformas beneficios como los siguientes:

  • Mejora la disponibilidad de recursos: Las ComputeClasses expanden las capacidades del ajuste de escala automático del clúster de GKE. Las funciones de ComputeClass, como las prioridades de respaldo y los parámetros de consolidación de nodos pueden reducir el riesgo de que los Pods queden atascados en un estado Pendiente y aumentar el rango de opciones que puedes usar para escalar tus nodos.
  • Configuración declarativa a nivel de la plataforma: Las ComputeClasses permiten que los ingenieros de plataformas describan de forma declarativa las configuraciones de nodos para varios tipos de cargas de trabajo. El ajuste de escala automático de GKE administra la creación y la configuración de nodos y grupos de nodos. Puedes integrar tus ComputeClasses en tus canalizaciones de CI/CD para tener coherencia en la infraestructura aprovisionada en toda tu plataforma.
  • Reduce la sobrecarga de administración: Las ComputeClasses reducen la complejidad de administrar la infraestructura y las cargas de trabajo a gran escala. Los ingenieros de plataformas declaran clases de infraestructura, y los operadores de apps seleccionan una clase relevante en una carga de trabajo. GKE administra el escalamiento, la configuración del hardware de nodos y aplica taints, tolerancias y etiquetas.

Acerca del recurso personalizado de ComputeClass

Las ComputeClasses son recursos personalizados de Kubernetes. Puedes definir la especificación de una ComputeClass en un archivo de manifiesto y crearla en tus clústeres, de manera similar a como defines y creas tus recursos de carga de trabajo de Kubernetes, como las implementaciones y los servicios.

En el siguiente manifiesto de ejemplo, se define una ComputeClass llamada n4:

apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
  name: n4
spec:
  nodePoolAutoCreation:
    enabled: true
  priorities:
  - machineFamily: n4
  - machineFamily: n2
  whenUnsatisfiable: DoNotScaleUp

Cuando un Pod selecciona esta ComputeClass, GKE hace lo siguiente cuando crea nodos nuevos:

  1. GKE crea nodos que usan la serie de máquinas N4.
  2. Si la serie de máquinas N4 no está disponible, GKE crea nodos que usan la serie de máquinas N2.
  3. Si la serie de máquinas N2 no está disponible, GKE espera hasta que los recursos estén disponibles para programar el Pod.

Puedes controlar varios parámetros de configuración para tus nodos con ComputeClasses, incluidos los aceleradores, la configuración del sistema de nodos, las ubicaciones de nodos y el comportamiento de respaldo de GKE cuando los recursos de hardware no están disponibles. Para obtener más información sobre todas las configuraciones disponibles para ComputeClasses, consulta la ComputeClass CustomResourceDefinition.

Selección de ComputeClass en cargas de trabajo

Para usar una ComputeClass para una carga de trabajo de GKE, selecciona la ComputeClass en el manifiesto de la carga de trabajo con un selector de nodos para la etiqueta cloud.google.com/compute-class.

En el siguiente manifiesto de Deployment de ejemplo, se selecciona una ComputeClass:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    matchLabels:
      app: hello
  template:
    metadata:
      labels:
        app: hello
    spec:
      nodeSelector:
        # Replace with the name of a compute class
        cloud.google.com/compute-class: COMPUTE_CLASS 
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: "250m"
            memory: "1Gi"

Reemplaza COMPUTE_CLASS por el nombre de una ComputeClass que exista en el clúster. Por ejemplo, puedes especificar la n4 ComputeClass de la sección Acerca del recurso personalizado de ComputeClass o la autopilot ComputeClass integrada.

Configuración de nodos en especificaciones de cargas de trabajo

Los clústeres de Autopilot de GKE y el aprovisionamiento automático de nodos en GKE Standard te permiten usar selectores de nodos en tus Pods para crear nodos que tengan propiedades específicas, como familias de máquinas, VMs Spot o GPUs y TPUs. Las ComputeClasses te permiten definir estos requisitos de forma centralizada en lugar de agregar selectores individuales a cada carga de trabajo.

Acerca de la aplicación de ComputeClasses de forma predeterminada

Puedes configurar GKE para que aplique una ComputeClass de forma predeterminada a los Pods que no seleccionan una ComputeClass específica. Puedes definir una ComputeClass predeterminada para espacios de nombres específicos o para un clúster completo. Para obtener más información sobre cómo configurar tus clústeres o espacios de nombres con una clase predeterminada, consulta Aplica ComputeClasses a los Pods de forma predeterminada.

En la siguiente tabla, se describen los efectos de establecer una ComputeClass como predeterminada para un espacio de nombres o para un clúster:

Efectos de las ComputeClasses predeterminadas
Valor predeterminado a nivel del espacio de nombres
  • GKE aplica la ComputeClass solo a los Pods en un espacio de nombres específico.
  • GKE modifica los Pods para agregar un selector de nodos para la clase predeterminada a nivel del espacio de nombres.
  • GKE escala verticalmente solo los nodos que tienen etiquetas de nodos y taints de nodos para esa ComputeClass, de manera similar a cualquier otra clase de procesamiento.
  • GKE agrega etiquetas de nodos y taints de nodos a los nodos que GKE crea para la clase predeterminada a nivel del espacio de nombres.
Valor predeterminado a nivel del clúster
  • GKE aplica la ComputeClass a los Pods en cualquier espacio de nombres.
  • GKE aplica la ComputeClass solo a los Pods que no tienen un selector existente para una ComputeClass.
  • GKE no modifica las especificaciones de Pods para agregar un selector de nodos para la clase predeterminada a nivel del clúster.
  • GKE escala verticalmente los nodos que cumplen con cualquiera de las siguientes condiciones:
    • Los nodos no tienen etiquetas ni taints para una clase de procesamiento diferente.
    • Los nodos tienen la cloud.google.com/compute-class: default etiqueta de nodo.
  • GKE agrega la etiqueta de nodo a los nodos que GKE crea para la clase predeterminada a nivel del clúster. cloud.google.com/compute-class: default GKE no agrega ningún taint de nodo a esos nodos.
  • Si actualizas un clúster de Autopilot para usar una clase de procesamiento personalizada como el valor predeterminado a nivel del clúster, GKE no ejecutará Pods en la plataforma de procesamiento optimizada para contenedores de Autopilot de forma predeterminada. En la versión 1.34.1-gke.1829001 y posteriores de GKE, puedes usar la plataforma de procesamiento de Autopilot para Pods específicos si agregas el selector de nodos cloud.google.com/compute-class: autopilot a esos Pods.

Si GKE aplica una ComputeClass predeterminada a nivel del espacio de nombres a un Pod, ese Pod no activará la ComputeClass predeterminada a nivel del clúster, ya que GKE agrega un selector de nodos para la clase predeterminada a nivel del espacio de nombres al Pod.

Migración activa en ComputeClasses predeterminadas

Si la ComputeClass que usas como valor predeterminado a nivel del espacio de nombres o del clúster tiene el campo activeMigration.optimizeRulePriority establecido en true, es posible que veas los siguientes efectos:

  • Clase de procesamiento predeterminada a nivel del clúster: La migración activa puede activarse si existen nodos con menor prioridad y GKE puede crear nodos con mayor prioridad. Según la cantidad de nodos de menor prioridad, la migración puede aumentar la interrupción de la carga de trabajo.
  • Clase de procesamiento predeterminada a nivel del espacio de nombres: La migración activa no se activa porque GKE inserta el selector de nodos de clase de procesamiento solo en los Pods recién creados. Los Pods existentes no se vuelven a crear automáticamente con el selector.

ComputeClasses predeterminadas a nivel del clúster

Cuando habilitas las ComputeClasses predeterminadas a nivel del clúster, un objeto ComputeClass llamado default define las reglas de ajuste de escala automático de nodos para el clúster. Si tu clúster ya tiene una ComputeClass llamada default, GKE usa esa configuración de ComputeClass para el clúster. Si el clúster no tiene una ComputeClass personalizada llamada default, GKE se comporta como si se aplicaran las siguientes reglas de ComputeClass:

spec:
  whenUnsatisfiable: ScaleUpAnyway
  nodePoolAutoCreation:
    enabled: true

De forma predeterminada, GKE no aplica ningún comportamiento de respaldo y no cambia la configuración de los nodos con ajuste de escala automático. Para aplicar propiedades específicas a los nodos con ajuste de escala automático de forma predeterminada, debes implementar una ComputeClass personalizada llamada default.

Ten en cuenta lo siguiente cuando configures tu clase de procesamiento predeterminada a nivel del clúster:

  • Para evitar que los Pods queden atascados en un estado Pending, establece el campo spec.whenUnsatisfiable en ScaleUpAnyway. Este valor permite que GKE cree nodos incluso si los Pods solicitan familias de máquinas de Compute Engine que no están en las reglas de prioridad para la clase predeterminada a nivel del clúster. Si deseas forzar a estos Pods a usar las familias de máquinas que están en la ComputeClass predeterminada, establece este campo en DoNotScaleUp.
  • Para restringir los cambios en la ComputeClass default, usa un ClusterRole de RBAC para restringir las operaciones update, patch, delete y create en el recurso ComputeClass llamado default.
  • Para cambiar los parámetros de consolidación de nodos predeterminados del escalador automático del clúster, usa el campo spec.autoscalingPolicy en la especificación de ComputeClass. Los parámetros que especifiques para este campo en la ComputeClass predeterminada a nivel del clúster se aplican a todos los nodos de tu clúster. Para obtener más información, consulta Establece parámetros de ajuste de escala automático para la consolidación de nodos.

¿Qué sigue?