En este documento, se muestra cómo controlar la infraestructura de procesamiento y el comportamiento del ajuste de escala automático de los clústeres de Google Kubernetes Engine (GKE) según las necesidades específicas de tus cargas de trabajo con ComputeClasses personalizadas.
Este documento está dirigido a los administradores de plataformas que desean definir de forma declarativa perfiles de ajuste de escala automático para los nodos y a los operadores de clústeres que desean ejecutar sus cargas de trabajo en ComputeClasses específicas.
Acerca de las ComputeClasses personalizadas
Las ComputeClasses personalizadas son recursos personalizados de Kubernetes que te permiten definir prioridades para que GKE las siga cuando aprovisiona nodos para ejecutar tus cargas de trabajo. Puedes usar una ComputeClass personalizada para hacer lo siguiente:
- Proporcionar a GKE un conjunto de prioridades para seguir de forma secuencial cuando se aprovisionan nodos, cada uno con parámetros específicos, como una serie de máquinas de Compute Engine o una capacidad de recursos mínima
- Define los umbrales y parámetros del ajuste de escala automático para quitar los nodos subutilizados y consolidar las cargas de trabajo de manera eficiente en la capacidad de procesamiento existente.
- Indícale a GKE que reemplace automáticamente las configuraciones de nodos menos preferidas por configuraciones de nodos más preferidas para lograr un rendimiento óptimo de la carga de trabajo.
Para comprender todas las opciones de configuración y cómo interactúan entre sí y con el modo Autopilot de GKE y el modo Standard de GKE, consulta Acerca de las ComputeClasses personalizadas.
Precios
El recurso personalizado ComputeClass
se proporciona sin costo adicional en GKE. Se aplican las siguientes consideraciones de precios:
Modo Autopilot de GKE: Se te factura según el modo de facturación basado en nodos. Para obtener más información, consulta Precios del modo Autopilot.
Modo GKE Standard: Consulta los precios del modo Standard.
Limitaciones
El nombre de tu ComputeClass no puede comenzar con gke
ni autopilot
.
Antes de comenzar
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta el comando
gcloud components update
para obtener la versión más reciente. Es posible que las versiones anteriores de gcloud CLI no admitan la ejecución de los comandos que se describen en este documento.
- Asegúrate de tener un clúster de GKE existente que ejecute la versión 1.30.3-gke.1451000 o posterior. Para obtener más información, consulta Crea un clúster de Autopilot.
Si usas un clúster de modo Standard, asegúrate de cumplir con uno de los siguientes requisitos:
- Habilita el ajuste de escala automático en al menos un grupo de nodos del clúster.
- Si tu clúster estándar ejecuta una versión anterior a la 1.33.3-gke.1136000 y no está inscrito en el canal de versiones rápidas, habilita el aprovisionamiento automático de nodos a nivel del clúster.
Situación de ejemplo para ComputeClasses
En este documento, se presenta un ejemplo de situación para la que defines una ComputeClass personalizada. En la práctica, debes tener en cuenta los requisitos de tus cargas de trabajo y tu organización específicas, y definir ComputeClasses que cumplan con esos requisitos. Para obtener descripciones completas de todas las opciones de ComputeClasses y consideraciones especiales, consulta Acerca de las ComputeClasses personalizadas.
Considera la siguiente situación de ejemplo:
- Tu objetivo es optimizar los costos de ejecución de tus cargas de trabajo.
- Tus cargas de trabajo son tolerantes a errores y no requieren un cierre ordenado ni un tiempo de ejecución extendido.
- Tus cargas de trabajo necesitan al menos 64 CPU virtuales para ejecutarse de manera óptima
- Estás limitado a la serie de máquinas N4 de Compute Engine
Según la situación de ejemplo, decides que quieres una ComputeClass que haga lo siguiente:
- Prioriza los nodos Spot N4 que tienen al menos 64 CPU virtuales
- Permite que GKE recurra a cualquier nodo N4 Spot, independientemente de la capacidad de procesamiento
- Si no hay nodos N4 Spot disponibles, permite que GKE use nodos N4 según demanda
- Le indica a GKE que mueva tus cargas de trabajo a los nodos Spot cuando vuelvan a estar disponibles
Configura un ComputeClass en modo Autopilot
En GKE Autopilot, defines una ComputeClass, la implementas en el clúster y solicitas esa ComputeClass en tus cargas de trabajo. GKE realiza todos los pasos de configuración de nodos, como la aplicación de etiquetas y taints, por ti.
Guarda el siguiente manifiesto como compute-class.yaml
:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: cost-optimized
spec:
priorities:
- machineFamily: n4
spot: true
minCores: 64
- machineFamily: n4
spot: true
- machineFamily: n4
spot: false
activeMigration:
optimizeRulePriority: true
nodePoolAutoCreation:
enabled: true
Configura un ComputeClass en el modo estándar
En los clústeres del modo GKE Standard, es posible que debas realizar una configuración manual para asegurarte de que los Pods de ComputeClass se programen según lo esperado. La configuración manual depende de si tus grupos de nodos se crean automáticamente, de la siguiente manera:
- Grupos de nodos creados automáticamente: No se requiere configuración manual. GKE realiza automáticamente los pasos de configuración de ComputeClass por ti. Para obtener más información, consulta Creación automática de grupos de nodos y ComputeClasses.
- Grupos de nodos creados de forma manual: Se requiere configuración manual. Debes agregar etiquetas de nodos y taints de nodos a los grupos de nodos creados manualmente para asociar los nodos con una ComputeClass específica. Para obtener más detalles, consulta Configura grupos de nodos creados manualmente para el uso de ComputeClass.
Para permitir que GKE cree automáticamente grupos de nodos para tu ComputeClass, sigue estos pasos:
- En el caso de los clústeres del modo estándar que ejecutan una versión anterior a la 1.33.3-gke.1136000 y no están inscritos en el canal de versiones rápidas, habilita el aprovisionamiento automático de nodos a nivel del clúster.
Guarda el siguiente manifiesto de ejemplo como
compute-class.yaml
:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: cost-optimized spec: priorities: - machineFamily: n4 spot: true minCores: 64 - machineFamily: n4 spot: true - machineFamily: n4 spot: false activeMigration: optimizeRulePriority: true nodePoolAutoCreation: enabled: true
Cuando implementas Pods que solicitan este ejemplo de ComputeClass y se deben crear nodos nuevos, GKE prioriza la creación de nodos en el orden de los elementos del campo
priorities
. Si es necesario, GKE crea grupos de nodos nuevos que cumplen con los requisitos de hardware de ComputeClass.
También puedes especificar un tipo personalizado de máquina preciso en tus prioridades. Para usar tipos de máquinas personalizados, se requiere la versión 1.33.2-gke.1111000 o posterior de GKE. En el siguiente ejemplo, se configura una ComputeClass que prioriza las VMs Spot para el tipo de máquina personalizado n4-custom-8-20480
y recurre a las VMs a pedido del mismo tipo si no hay capacidad de Spot disponible:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: custom-machine-type
spec:
priorities:
- machineType: n4-custom-8-20480
spot: true
- machineType: n4-custom-8-20480
spot: false
nodePoolAutoCreation:
enabled: true
Usa ComputeClasses con grupos de nodos creados de forma manual
En esta sección, se muestra cómo definir un objeto ComputeClass en un clúster que solo usa grupos de nodos creados de forma manual.
Guarda el siguiente manifiesto como
compute-class.yaml
:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: cost-optimized spec: priorities: - machineFamily: n4 spot: true minCores: 64 - machineFamily: n4 spot: true - machineFamily: n4 spot: false activeMigration: optimizeRulePriority: true
Crea un nuevo grupo de nodos con ajuste de escala automático que use VMs Spot y asócialo con la ComputeClass:
gcloud container node-pools create cost-optimized-pool \ --location=LOCATION \ --cluster=CLUSTER_NAME \ --machine-type=n4-standard-64 \ --spot \ --enable-autoscaling \ --max-nodes=9 \ --node-labels="cloud.google.com/compute-class=cost-optimized" \ --node-taints="cloud.google.com/compute-class=cost-optimized:NoSchedule"
Reemplaza lo siguiente:
LOCATION
: Es la ubicación de tu clúster.CLUSTER_NAME
: Es el nombre del clúster existente.
Crea un nuevo grupo de nodos con ajuste de escala automático con VMs según demanda y asócialo con la ComputeClass:
gcloud container node-pools create on-demand-pool \ --location=LOCATION \ --cluster=CLUSTER_NAME \ --machine-type=n4-standard-64 \ --enable-autoscaling \ --max-nodes=9 \ --num-nodes=0 \ --node-labels="cloud.google.com/compute-class=cost-optimized" \ --node-taints="cloud.google.com/compute-class=cost-optimized:NoSchedule"
Cuando implementas Pods que solicitan esta ComputeClass y se deben crear nodos nuevos, GKE prioriza la creación de nodos en el grupo de nodos cost-optimized-pool
. Si no se pueden crear nodos nuevos, GKE crea nodos en el grupo de nodos on-demand-pool
.
Para obtener más detalles sobre cómo interactúan los grupos de nodos creados de forma manual con las ComputeClasses personalizadas, consulta Configura grupos de nodos creados de forma manual para el uso de ComputeClass.
Personaliza los umbrales de ajuste de escala automático para la consolidación de nodos
De forma predeterminada, GKE quita los nodos poco utilizados y reprograma tus cargas de trabajo en otros nodos disponibles. Puedes personalizar aún más los umbrales y el tiempo después del cual un nodo se convierte en candidato para la eliminación con el campo autoscalingPolicy
en la definición de ComputeClass, como en el siguiente ejemplo:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: cost-optimized
spec:
priorities:
- machineFamily: n4
spot: true
minCores: 64
- machineFamily: n4
spot: true
- machineFamily: n4
spot: false
activeMigration:
optimizeRulePriority: true
autoscalingPolicy:
consolidationDelayMinutes : 5
consolidationThreshold : 70
En este ejemplo, un nodo se convierte en candidato para la eliminación si se subutiliza en un 70% de su capacidad disponible de CPU y memoria durante más de cinco minutos. Para obtener una lista de los parámetros disponibles, consulta Configura parámetros de ajuste de escala automático para la consolidación de nodos.
Implementa un objeto ComputeClass en un clúster
Después de definir un ComputeClass, impleméntalo en el clúster:
kubectl apply -f compute-class.yaml
Esta ComputeClass está lista para usarse en el clúster. Puedes solicitar ComputeClass en las especificaciones de Pod o, de manera opcional, establecerla como la ComputeClass predeterminada en un espacio de nombres específico.
Solicita una ComputeClass en una carga de trabajo
Para solicitar una ComputeClass en una carga de trabajo, agrega un selector de nodos para esa ComputeClass en tu manifiesto, como en los siguientes pasos:
Guarda el siguiente manifiesto como
cc-workload.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: custom-workload spec: replicas: 2 selector: matchLabels: app: custom-workload template: metadata: labels: app: custom-workload spec: nodeSelector: cloud.google.com/compute-class: cost-optimized containers: - name: test image: gcr.io/google_containers/pause resources: requests: cpu: 1.5 memory: "4Gi"
Implementa la carga de trabajo:
kubectl apply -f cc-workload.yaml
Cuando implementas esta carga de trabajo, GKE agrega automáticamente una tolerancia a los Pods que corresponde al taint del nodo para la ComputeClass solicitada. Esta tolerancia garantiza que solo los Pods que soliciten la ComputeClass se ejecuten en nodos de ComputeClass.
Actualiza una ComputeClass implementada
Para actualizar una ComputeClass implementada, modifica el manifiesto YAML de la ComputeClass. Luego, implementa el manifiesto modificado ejecutando el siguiente comando:
kubectl apply -f PATH_TO_FILE
Reemplaza PATH_TO_FILE
por la ruta de acceso al manifiesto modificado. Asegúrate de que el valor del campo name
no cambie.
Cuando implementas tu ComputeClass actualizada, GKE usa la configuración actualizada para crear nodos nuevos. GKE no modifica ningún nodo existente con la configuración actualizada.
Con el tiempo, es posible que GKE mueva los Pods existentes a nodos que usen tu configuración actualizada si ComputeClass usa la migración activa y si los Pods existentes son aptos para migrar.
¿Qué sigue?
- Más información sobre las clases de procesamiento personalizadas
- Aplica ComputeClasses personalizadas a los Pods de forma predeterminada