Puedes reservar instancias de Compute Engine de una zona específica a fin de garantizar que estén disponibles los recursos para sus cargas de trabajo cuando sea necesario. Para obtener más información sobre cómo administrar las reservas, consulta Reserva recursos zonales de Compute Engine.
Después de crear reservas, puedes consumir los recursos reservados en GKE. GKE admite los mismos modos de consumo que Compute Engine, que se cubren en las siguientes secciones:
- Consumo de recursos de cualquier reserva: Solo estándar
- Consumo de recursos de una reserva específica: Estándar y Autopilot
- Crea nodos sin consumir ninguna reserva: Standard y 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.
Consume reservas de capacidad en clústeres de Autopilot
Los clústeres de Autopilot admiten el consumo de recursos de reservas de capacidad específicas de Compute Engine en el mismo proyecto o en un proyecto compartido. A menos que se especifique de manera explícita, los clústeres de Autopilot no consumen reservas. Estas reservas califican para los
descuentos por compromiso de uso de Autopilot. Debes usar la clase de procesamiento Accelerator
o la clase de procesamiento Performance
para consumir las reservas de capacidad.
Antes de comenzar, crea un clúster de Autopilot que ejecute las siguientes versiones:
- Para consumir aceleradores reservados con la clase de procesamiento Accelerator: 1.28.6-gke.1095000 o posterior
- Para usar la clase de procesamiento Performance: 1.28.6-gke.1369000 y versiones posteriores, o la versión 1.29.1-gke.1575000 y posteriores.
Crea reservas de capacidad para Autopilot
Los Pods de Autopilot pueden consumir reservas específicas en el mismo proyecto que el clúster o en una reserva compartida de un proyecto diferente. Puedes consumir el hardware reservado si haces referencia de forma explícita a esa reserva en tu manifiesto. Puedes consumir reservas en Autopilot para los siguientes tipos de hardware:
- Cualquiera de los siguientes tipos de GPU:
nvidia-h100-80gb
: NVIDIA H100 (80 GB) (solo disponible con la clase de procesamiento Accelerator)nvidia-a100-80gb
: NVIDIA A100 (80 GB)nvidia-tesla-a100
: NVIDIA A100 (40 GB)nvidia-l4
: NVIDIA L4nvidia-tesla-t4
: NVIDIA T4
Para crear una reserva de capacidad, consulta los siguientes recursos. Asegúrate de que los tipos de máquina, los tipos de aceleradores y las cantidades de aceleradores coincidan con lo que consumirán tus cargas de trabajo.
Consume una reserva específica en el mismo proyecto en Autopilot
En esta sección, se muestra cómo consumir una reserva de capacidad específica que se encuentre en el mismo proyecto que el clúster.
Guarda el siguiente manifiesto como
specific-autopilot.yaml
. Este manifiesto tiene selectores de nodos que consumen una reserva específica.Instancias de VM
apiVersion: v1 kind: Pod metadata: name: specific-same-project-pod spec: nodeSelector: cloud.google.com/compute-class: Performance cloud.google.com/machine-family: MACHINE_SERIES cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-affinity: "specific" containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 12 memory: "50Gi" ephemeral: "200Gi"
Reemplaza lo siguiente:
MACHINE_SERIES
: Es una serie de máquina que contiene el tipo de máquina de las VMs en tu reserva de capacidad específica. Por ejemplo, si tu reserva es para tipos de máquinac3-standard-4
, especificaC3
en el campoMACHINE_SERIES
.RESERVATION_NAME
es el nombre de la reserva de capacidad de Compute Engine.
Aceleradores
apiVersion: v1 kind: Pod metadata: name: specific-same-project-pod spec: nodeSelector: cloud.google.com/compute-class: "Accelerator" cloud.google.com/gke-accelerator: ACCELERATOR cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-affinity: "specific" containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 12 memory: "50Gi" ephemeral: "200Gi" limits: nvidia.com/gpu: QUANTITY
Reemplaza lo siguiente:
ACCELERATOR
: es el acelerador que reservaste en la reserva de capacidad de Compute Engine. Debe ser uno de los siguientes valores:nvidia-h100-80gb
: NVIDIA H100 (80 GB) (solo disponible con la clase de procesamiento Accelerator)nvidia-a100-80gb
: NVIDIA A100 (80 GB)nvidia-tesla-a100
: NVIDIA A100 (40 GB)nvidia-l4
: NVIDIA L4nvidia-tesla-t4
: NVIDIA T4
RESERVATION_NAME
es el nombre de la reserva de capacidad de Compute Engine.QUANTITY
: Es la cantidad de GPU que se deben adjuntar al contenedor. Debe ser una cantidad compatible para la GPU especificada, como se describe en Cantidades de GPU compatibles.
Implementa el Pod:
kubectl apply -f specific-autopilot.yaml
Autopilot usa la capacidad reservada en la reserva especificada para aprovisionar un nodo nuevo a fin de colocar el Pod.
Consume una reserva compartida específica en Autopilot
En esta sección, se usan los siguientes términos:
- Proyecto de propietario: el proyecto que posee la reserva y lo comparte con otros proyectos
- Proyecto de consumidor: el proyecto que ejecuta las cargas de trabajo que consumen la reserva compartida.
Para consumir una reserva compartida, debes otorgar al agente de servicio de GKE acceso a la reserva en el proyecto al que pertenece la reserva. Puedes hacer lo siguiente:
Crea un rol personalizado de IAM que contenga el permiso
compute.reservations.list
en el proyecto propietario:gcloud iam roles create ROLE_NAME \ --project=OWNER_PROJECT_ID \ --permissions='compute.reservations.list'
Reemplaza lo siguiente:
ROLE_NAME
: un nombre para tu nuevo rol.OWNER_PROJECT_ID
; el ID del proyecto al que pertenece la reserva de capacidad.
Otorga al agente de servicio de GKE en el proyecto de consumidor acceso a la reserva compartida en el proyecto de propietario:
gcloud compute reservations add-iam-policy-binding RESERVATION_NAME \ --project=OWNER_PROJECT_ID \ --zone=ZONE \ --member=service-CONSUMER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \ --role='roles/ROLE_NAME'
Reemplaza
CONSUMER_PROJECT_NUMBER
por el número de proyecto numérico de tu proyecto de consumidor. Para encontrar este número, consulta Identifica proyectos en la documentación de Resource Manager.Guarda el siguiente manifiesto como
shared-autopilot.yaml
. Este manifiesto tiene nodeSelectors que le indican a GKE que consuma una reserva compartida específica.Instancias de VM
apiVersion: v1 kind: Pod metadata: name: performance-pod spec: nodeSelector: cloud.google.com/compute-class: Performance cloud.google.com/machine-family: MACHINE_SERIES cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-project: OWNER_PROJECT_ID cloud.google.com/reservation-affinity: "specific" containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 12 memory: "50Gi" ephemeral: "200Gi"
Reemplaza lo siguiente:
MACHINE_SERIES
: Es una serie de máquina que contiene el tipo de máquina de las VMs en tu reserva de capacidad específica. Por ejemplo, si tu reserva es para tipos de máquinac3-standard-4
, especificaC3
en el campoMACHINE_SERIES
.RESERVATION_NAME
es el nombre de la reserva de capacidad de Compute Engine.OWNER_PROJECT_ID
; el ID del proyecto al que pertenece la reserva de capacidad.
Aceleradores
apiVersion: v1 kind: Pod metadata: name: specific-same-project-pod spec: nodeSelector: cloud.google.com/compute-class: "Accelerator" cloud.google.com/gke-accelerator: ACCELERATOR cloud.google.com/reservation-name: RESERVATION_NAME cloud.google.com/reservation-project: OWNER_PROJECT_ID cloud.google.com/reservation-affinity: "specific" containers: - name: my-container image: "k8s.gcr.io/pause" resources: requests: cpu: 12 memory: "50Gi" ephemeral: "200Gi" limits: nvidia.com/gpu: QUANTITY
Reemplaza lo siguiente:
ACCELERATOR
: es el acelerador que reservaste en la reserva de capacidad de Compute Engine. Debe ser uno de los siguientes valores:nvidia-h100-80gb
: NVIDIA H100 (80 GB) (solo disponible con la clase de procesamiento Accelerator)nvidia-a100-80gb
: NVIDIA A100 (80 GB)nvidia-tesla-a100
: NVIDIA A100 (40 GB)nvidia-l4
: NVIDIA L4nvidia-tesla-t4
: NVIDIA T4
RESERVATION_NAME
es el nombre de la reserva de capacidad de Compute Engine.OWNER_PROJECT_ID
; el ID del proyecto al que pertenece la reserva de capacidad.QUANTITY
: Es la cantidad de GPU que se deben adjuntar al contenedor. Debe ser una cantidad compatible para la GPU especificada, como se describe en Cantidades de GPU compatibles.
Implementa el Pod:
kubectl apply -f shared-autopilot.yaml
Autopilot usa la capacidad reservada en la reserva especificada para aprovisionar un nodo nuevo a fin de colocar el Pod.
Consume instancias reservadas en GKE Standard
Cuando creas un clúster o grupo de nodos, puedes especificar la marca --reservation-affinity
para indicar el modo de consumo de reserva.
Consume cualquier reserva que coincida
Para consumir automáticamente cualquier reserva que coincida, configura la marca de afinidad de la reserva como --reservation-affinity=any
.
En el modo de consumo de reserva any
, los nodos primero toman la capacidad de todas las reservas de un solo proyecto antes que de cualquier reserva compartida, ya que las reservas compartidas están más disponibles para otros proyectos. Para obtener más información sobre cómo se consumen las instancias de forma automática, consulta Orden de consumo.
Para crear una reserva y unas instancias que consuman cualquier reserva, sigue estos pasos:
Crea una reserva de tres instancias de VM:
gcloud compute reservations create RESERVATION_NAME \ --machine-type=MACHINE_TYPE --vm-count=3
Reemplaza lo siguiente:
RESERVATION_NAME
: Es el nombre de la reserva que se creará.MACHINE_TYPE
: El tipo de máquina (solo nombre) que se usará para la reserva. Por ejemplo,n1-standard-2
.
Verifica que se haya creado correctamente la reserva:
gcloud compute reservations describe RESERVATION_NAME
Reemplaza
RESERVATION_NAME
por el nombre de la reserva que acabas de crear.Crea un clúster que tenga un nodo para que consuma cualquier reserva que coincida:
gcloud container clusters create CLUSTER_NAME \ --machine-type=MACHINE_TYPE --num-nodes=1 \ --reservation-affinity=any
Reemplaza lo siguiente:
CLUSTER_NAME
: es el nombre del clúster que se creará.MACHINE_TYPE
: El tipo de máquina (solo nombre) que se usará para el clúster. Por ejemplon1-standard-2
.
Crea un grupo de nodos con tres nodos para consumir cualquier reserva coincidente:
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME --num-nodes=3 \ --machine-type=MACHINE_TYPE --reservation-affinity=any
Reemplaza lo siguiente:
NODEPOOL_NAME
: el nombre del grupo de nodos que se creará.CLUSTER_NAME
: es el nombre del clúster que creaste antes.MACHINE_TYPE
: El tipo de máquina (solo nombre) que se usará para el grupo de nodos. Por ejemplon1-standard-2
.
La cantidad total de nodos es 4, lo que excede la capacidad de la reserva. Por lo tanto, 3 de los nodos consumen la reserva, mientras que el último usa la capacidad del grupo de recursos generales de Compute Engine.
Consume una reserva específica de un solo proyecto
Para consumir una reserva específica, configura la marca de afinidad de reserva como --reservation-affinity=specific
y proporciona el nombre de reserva específico. En este modo, las instancias deben consumir la capacidad de la reserva especificada de la zona. La solicitud falla si la reserva no tiene capacidad suficiente.
Para crear una reserva y unas instancias que consuman una reserva específica, haz lo siguiente:
Crea una reserva específica de tres instancias de VM:
gcloud compute reservations create RESERVATION_NAME \ --machine-type=MACHINE_TYPE --vm-count=3 \ --require-specific-reservation
Reemplaza lo siguiente:
RESERVATION_NAME
: Es el nombre de la reserva que se creará.MACHINE_TYPE
: El tipo de máquina (solo nombre) que se usará para la reserva. Por ejemplo,n1-standard-2
.
Crea un grupo de nodos con un solo nodo para consumir una reserva específica de un solo proyecto:
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME \ --machine-type=MACHINE_TYPE --num-nodes=1 \ --reservation-affinity=specific --reservation=RESERVATION_NAME
Reemplaza lo siguiente:
NODEPOOL_NAME
: el nombre del grupo de nodos que se creará.CLUSTER_NAME
: El nombre del clúster que creaste.MACHINE_TYPE
: El tipo de máquina (solo nombre) que se usará para el clúster. Por ejemplon1-standard-2
.RESERVATION_NAME
: es el nombre de la reserva que se consumirá.
Consume una reserva compartida específica
Para crear una reserva compartida específica y consumirla, sigue estos pasos:
Sigue los pasos que se indican en Permite y restringe la creación y la modificación de reservas compartidas para los proyectos.
Crea una reserva compartida específica:
gcloud compute reservations create RESERVATION_NAME \ --machine-type=MACHINE_TYPE --vm-count=3 \ --zone=ZONE \ --require-specific-reservation \ --project=OWNER_PROJECT_ID \ --share-setting=projects \ --share-with=CONSUMER_PROJECT_IDS
Reemplaza lo siguiente:
RESERVATION_NAME
: Es el nombre de la reserva que se creará.MACHINE_TYPE
: Es el nombre del tipo de máquina que se usará para la reserva. Por ejemplo,n1-standard-2
.OWNER_PROJECT_ID
: Es el ID del proyecto que deseas que cree esta reserva compartida. Si omites la marca--project
, GKE usa el proyecto actual como proyecto propietario de forma predeterminada.CONSUMER_PROJECT_IDS
: Es una lista separada por comas de los ID de los proyectos con los que deseas compartir esta reserva. Por ejemplo,project-1,project-2
. Puedes incluir entre 1 y 100 proyectos de consumidor. Estos proyectos deben estar en la misma organización que el proyecto de propietario. No incluyasOWNER_PROJECT_ID
, ya que puede consumir esta reserva de forma predeterminada.
Consume la reserva compartida:
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME \ --machine-type=MACHINE_TYPE --num-nodes=1 \ --reservation-affinity=specific \ --reservation=projects/OWNER_PROJECT_ID/reservations/RESERVATION_NAME
Reemplaza lo siguiente:
NODEPOOL_NAME
: el nombre del grupo de nodos que se creará.CLUSTER_NAME
: El nombre del clúster que creaste.MACHINE_TYPE
: Es el nombre del tipo de máquina que se usará para el clúster. Por ejemplo,n1-standard-2
.OWNER_PROJECT_ID
: Es el ID del proyecto en el que se crea la reserva compartida.RESERVATION_NAME
: Es el nombre de la reserva compartida específica que se consumirá
Consideraciones adicionales sobre el consumo de reservas específicas
Cuando se crea un grupo de nodos con afinidad de reserva específica, incluidos los grupos de nodos predeterminados generados durante la creación de clústeres, su tamaño se limita a la capacidad de la reserva específica para toda la vida útil del grupo de nodos. Esto afecta las siguientes funciones de GKE:
- Clúster con varias zonas: En clústeres regionales o multizonales, los nodos de un grupo de nodos pueden abarcar varias zonas. Dado que las reservas son de una sola zona, se necesitan varias reservas. Para crear un grupo de nodos que consuma una reserva específica de estos clústeres, debes crear una reserva específica que tenga exactamente el mismo nombre y las mismas propiedades de máquina en cada zona del grupo de nodos.
- Ajuste de escala automático del clúster y actualizaciones del grupo de nodos: Si no tienes capacidad adicional en la reserva específica, las actualizaciones del grupo de nodos o el ajuste de escala automático del grupo de nodos pueden fallar, ya que ambas operaciones requieren crear instancias adicionales. Para solucionar este problema, puedes cambiar el tamaño de la reserva o liberar algunos de sus recursos limitados.
Crea nodos sin consumir reservas
Para evitar el consumo de recursos de cualquier reserva, configura la afinidad como --reservation-affinity=none
.
Crea un clúster que no consuma ninguna reserva:
gcloud container clusters create CLUSTER_NAME --reservation-affinity=none
Reemplaza
CLUSTER_NAME
por el nombre del clúster que deseas crear.Crea un grupo de nodos que no consuma ninguna reserva:
gcloud container node-pools create NODEPOOL_NAME \ --cluster CLUSTER_NAME \ --reservation-affinity=none
Reemplaza lo siguiente:
NODEPOOL_NAME
: el nombre del grupo de nodos que se creará.CLUSTER_NAME
: es el nombre del clúster que creaste antes.
Sigue las reservas disponibles entre zonas
Cuando usas grupos de nodos que se ejecutan en varias zonas con reservas que no son iguales entre las zonas, puedes usar la marca --location_policy=ANY
. Esto garantiza que, cuando se agregan nodos nuevos al clúster, se crean en la zona que aún tiene reservas sin usar.
Reserva de TPU
Las reservas de TPU difieren de otros tipos de máquinas. Los siguientes son aspectos específicos de TPU que debes tener en cuenta cuando crees reservas de TPU:
- Cuando se usan TPU en GKE,
SPECIFIC
es el único valor admitido para la marca--reservation-affinity
degcloud container node-pools create
. - Las reservas de TPU no se pueden compartir entre proyectos.
Para obtener más información, consulta Reservas de TPU.
Realice una limpieza
Para evitar que se generen cargos en tu cuenta de Facturación de Cloud por los recursos que se usaron en esta página, sigue estos pasos:
Ejecuta el siguiente comando para cada uno de los clústeres a fin de borrar los clústeres que creaste:
gcloud container clusters delete CLUSTER_NAME
Ejecuta el siguiente comando para cada una de las reservas a fin de borrar las reservas que creaste:
gcloud compute reservations delete RESERVATION_NAME
¿Qué sigue?
- Obtén más información para reservar recursos zonales de Compute Engine.
- Más información sobre los grupos de nodos
- Obtén más información sobre el escalador automático de clústeres.
- Obtén más información sobre las estrategias de actualización de nodos.