En esta página se explica cómo aplicar clases de computación de forma predeterminada a los pods de Google Kubernetes Engine (GKE) que no seleccionan explícitamente una clase de computación. En esta página se explica cómo definir una clase de computación como predeterminada en un espacio de nombres y en todo un clúster. Estas instrucciones están dirigidas a administradores de clústeres que quieran reducir la sobrecarga manual causada por la configuración de nodos y cargas de trabajo individuales.
Antes de leer esta página, familiarízate con las clases de computación personalizadas.
Acerca de las clases de cálculo predeterminadas
Puedes configurar clústeres de GKE o espacios de nombres específicos para que tengan una clase de computación predeterminada. La clase predeterminada que configures se aplicará a cualquier pod de ese clúster o espacio de nombres que no seleccione otra clase de computación. Cuando implementas un pod que no selecciona una clase de computación, GKE aplica las clases de computación predeterminadas en el siguiente orden:
- Si el espacio de nombres tiene una clase de computación predeterminada, GKE modifica la especificación del pod para seleccionar esa clase de computación.
- Si el espacio de nombres no tiene una clase de computación predeterminada, se aplica la clase predeterminada a nivel de clúster. GKE no modifica la especificación de Pod.
Antes de empezar
Antes de empezar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando
gcloud components update
.
Tener un clúster Autopilot o Estándar de GKE que ejecute una versión que admita la configuración de una clase de computación predeterminada a nivel de clúster o de espacio de nombres. Para obtener más información, consulta la sección Requisitos.
En los clústeres estándar, habilita el aprovisionamiento automático de nodos o el autoescalador de clústeres.
Si quieres definir una clase de computación personalizada como predeterminada para un espacio de nombres, implementa una clase de computación personalizada.
Requisitos
- Para definir una clase de computación como predeterminada a nivel de clúster, el clúster debe ejecutar la versión 1.33.1-gke.1744000 de GKE o una posterior.
- Para definir una clase de computación como predeterminada a nivel de espacio de nombres solo para los pods que no sean DaemonSet, el clúster debe ejecutar la versión 1.33.1-gke.1788000 de GKE o una posterior.
Roles y permisos necesarios
Para obtener los permisos que necesitas para configurar clases de Compute predeterminadas a nivel de clúster o de espacio de nombres, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en el proyecto Google Cloud :
-
Desarrollador de Kubernetes Engine (
roles/container.developer
) -
Actualiza la clase de computación predeterminada a nivel de clúster:
Administrador de clústeres de Kubernetes Engine (
roles/container.clusterAdmin
)
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
Estos roles predefinidos contienen los permisos necesarios para configurar clases de cálculo predeterminadas a nivel de clúster o de espacio de nombres. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:
Permisos obligatorios
Para configurar clases de cálculo predeterminadas a nivel de clúster o de espacio de nombres, se necesitan los siguientes permisos:
-
container.customResourceDefinitions.create
-
container.customResourceDefinitions.update
-
container.customResourceDefinitions.get
-
container.customResourceDefinitions.list
-
container.namespaces.get
-
container.namespaces.list
-
container.pods.get
-
container.nodes.get
-
container.nodes.list
-
container.deployments.create
-
container.deployments.get
-
Añadir etiquetas a espacios de nombres:
container.namespaces.update
-
Habilita la clase de cálculo predeterminada a nivel de clúster:
container.clusters.update
También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.
Configurar una clase de computación predeterminada para un espacio de nombres
Puede anotar cualquier espacio de nombres de Kubernetes de su clúster con el nombre de una clase de cálculo para usarla como predeterminada. Si un pod implementado en ese espacio de nombres aún no ha seleccionado una clase de computación, GKE modifica la especificación del pod para seleccionar la clase predeterminada del espacio de nombres. Puedes definir cualquier clase de cálculo personalizada o integrada como predeterminada.
Para aplicar una clase de computación a todos los pods de un espacio de nombres de forma predeterminada, añade la etiqueta
cloud.google.com/default-compute-class
a ese espacio de nombres:kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class=COMPUTECLASS_NAME
Haz los cambios siguientes:
NAMESPACE_NAME
: el nombre del espacio de nombres que se va a actualizar.COMPUTECLASS_NAME
: el nombre de la clase de cálculo que se va a definir como predeterminada para el espacio de nombres.
Si el comando falla y muestra el siguiente mensaje de error, significa que el espacio de nombres ya tiene una clase de cálculo predeterminada:
error: 'cloud.google.com/default-compute-class' already has a value, and --overwrite is false
Para solucionar este error, actualice la clase de computación predeterminada del espacio de nombres.
Para aplicar una clase de computación a todos los pods que no sean DaemonSet de un espacio de nombres de forma predeterminada, añade la etiqueta
cloud.google.com/default-compute-class-non-daemonset
a ese espacio de nombres:kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset=COMPUTECLASS_NAME
Si el comando falla y muestra el siguiente mensaje de error, significa que el espacio de nombres ya tiene una clase de cálculo predeterminada para los pods que no son DaemonSet:
error: 'cloud.google.com/default-compute-class-non-daemonset' already has a value, and --overwrite is false
Para solucionar este error, actualice la clase de computación predeterminada del espacio de nombres.
Actualizar la clase de cálculo predeterminada de un espacio de nombres
Para sobrescribir la clase de cálculo predeterminada de un espacio de nombres, ejecuta uno de los siguientes comandos:
Actualiza la clase de computación predeterminada de todos los pods del espacio de nombres:
kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class=COMPUTECLASS_NAME \ --overwrite
Haz los cambios siguientes:
NAMESPACE_NAME
: el nombre del espacio de nombres que se va a actualizar.COMPUTECLASS_NAME
: el nombre de la clase de cálculo que se va a definir como nuevo valor predeterminado del espacio de nombres.
Sobrescribe la clase de computación predeterminada de los pods que no son DaemonSet en el espacio de nombres:
kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset=COMPUTECLASS_NAME \ --overwrite
Configurar una clase de computación predeterminada para un clúster
En esta sección se muestra cómo definir una clase de cálculo como predeterminada para tu clúster. En el caso de las clases de computación predeterminadas a nivel de clúster, no especifiques manualmente las taints ni las etiquetas de los nodos de los grupos de nodos del clúster.
GKE no escala los grupos de nodos que tienen taints de nodos para clases de cálculo. Si añades manualmente una etiqueta para la clase de computación default
, GKE puede escalar ese grupo de nodos. Sin embargo, esta configuración manual no es necesaria para usar una clase de cálculo predeterminada a nivel de clúster.
Para habilitar la configuración de una clase de computación predeterminada a nivel de clúster, ejecuta el comando
gcloud container clusters update
con la marca--enable-default-compute-class
:gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --enable-default-compute-class
Haz los cambios siguientes:
CLUSTER_NAME
: el nombre de tu clúster.CONTROL_PLANE_LOCATION
: la ubicación de tu plano de control del clúster, comous-central1
.
También puedes especificar esta marca al crear un clúster de Autopilot o estándar.
Guarda el siguiente archivo de manifiesto, que define un
ComputeClass
llamadodefault
:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: default spec: priorities: - machineFamily: n4 - machineFamily: n2 whenUnsatisfiable: ScaleUpAnyway nodePoolAutoCreation: enabled: true
Este archivo de manifiesto de ejemplo solicita nodos que usen instancias N4. Si las instancias N4 no están disponibles, la clase de computación solicita instancias N2. Puedes configurar la clase de cálculo
default
con cualquiera de los campos disponibles en la CustomResourceDefinition de ComputeClass.Aplica el manifiesto a tu clúster:
kubectl apply -f PATH_TO_MANIFEST
Sustituye
PATH_TO_MANIFEST
por la ruta al manifiesto de la clase de cálculo.
Después de definir una clase de cálculo predeterminada a nivel de clúster, GKE escala los grupos de nodos que cumplen los dos requisitos siguientes:
- La configuración del nodo es la misma que la de la clase de computación
default
. - El grupo de nodos no tiene marcas ni etiquetas para una clase de computación diferente.
GKE puede escalar grupos de nodos que tengan un taint y una etiqueta para la clase de computación
default
.
Por ejemplo, si la clase de computación default
especifica la serie de máquinas N4, GKE puede escalar un grupo de nodos que use instancias N4 y que no tenga taints ni etiquetas para otra clase de computación.
Verificar el comportamiento predeterminado de la clase de cálculo
Para comprobar si la clase de computación predeterminada que has definido para un espacio de nombres o un clúster funciona correctamente, haz lo siguiente:
Revisa el siguiente ejemplo de Deployment:
Esta implementación no solicita explícitamente una clase de computación.
Crea el despliegue:
kubectl apply --namespace=NAMESPACE_NAME \ -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/refs/heads/main/quickstarts/hello-app/manifests/helloweb-deployment.yaml
Sustituye
NAMESPACE_NAME
por una de las siguientes opciones, en función de lo que quieras verificar:- Nombre de un espacio de nombres que tiene una clase de computación predeterminada.
- El nombre de un espacio de nombres que no tiene una clase de cálculo predeterminada.
GKE puede tardar un tiempo en crear nodos para ejecutar los pods.
Identifica los nodos que ejecutan los pods de la implementación de ejemplo:
kubectl get pods --namespace=NAMESPACE_NAME \ --selector=app=hello -o=wide
El resultado debería ser similar al siguiente:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES helloweb-7795fbf856-58n5l 1/1 Running 0 9m21s 10.52.2.3 gke-cluster-1-nap-n2-highcpu-2-3muqi8-f213e529-rx7d <none> <none>
Obtén las etiquetas del nodo:
kubectl get node NODE_NAME --show-labels \ | grep "cloud.google.com/compute-class"
Sustituye
NODE_NAME
por el nombre del nodo de la salida del paso anterior.El resultado debería ser similar al siguiente:
NODE_NAME Ready <none> 22m v1.32.4-gke.1236007 # lines are omitted from this output cloud.google.com/compute-class=COMPUTECLASS_NAME,cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd
El valor de
COMPUTECLASS_NAME
es uno de los siguientes:- Clase de computación predeterminada a nivel de clúster:
default
para los nodos que se hayan creado con Autopilot de GKE o con el aprovisionamiento automático de nodos. Es posible que los nodos de los grupos de nodos creados manualmente no tengan la etiquetacloud.google.com/compute-class
. - Clase de computación predeterminada a nivel de espacio de nombres: el nombre de la clase de computación que has configurado como predeterminada para el espacio de nombres.
- Clase de computación predeterminada a nivel de clúster:
Inhabilitar la clase de computación predeterminada
Para inhabilitar la clase de cálculo predeterminada en un espacio de nombres o un clúster, haga lo siguiente:
Para inhabilitar la clase de cálculo predeterminada a nivel de espacio de nombres para todos los pods, quita la etiqueta
cloud.google.com/default-compute-class
del espacio de nombres:kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-
El carácter
-
al final de la clave de la etiqueta elimina todas las etiquetas con esa clave del objetoNamespace
en la API de Kubernetes.Para inhabilitar la clase de cálculo predeterminada a nivel de espacio de nombres para los pods que no son DaemonSet, elimina la etiqueta
cloud.google.com/default-compute-class-non-daemonset
del espacio de nombres:kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset-
Para inhabilitar la clase de Compute predeterminada a nivel de clúster, usa el comando
gcloud container clusters update
con la marca--no-enable-default-compute-class
:gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --no-enable-default-compute-class