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 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
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 de Compute Engine en el mismo proyecto o en un proyecto compartido. Debes establecer la propiedad de tipo de consumo de la reserva objetivo en específico y debes seleccionar esa reserva de forma explícita en tu manifiesto. Si no especificas una reserva de forma explícita, los clústeres de Autopilot no consumirán reservas. Para obtener más información sobre los tipos de consumo de reservas, consulta Cómo funcionan las reservas.
Estas reservas califican para los descuentos por compromiso de uso de Compute Flexible. 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 que tengan la propiedad de tipo de consumo específica 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. La reserva debe cumplir con los siguientes requisitos:
- Los tipos de máquinas, los tipos de aceleradores y las cantidades de aceleradores coinciden con lo que consumirán tus cargas de trabajo.
La reserva usa el tipo de consumo específico. Por ejemplo, en gcloud CLI, debes especificar la marca
--require-specific-reservation
cuando creas la reserva.
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. Puedes usar kubectl o Terraform.
kubectl
Guarda el siguiente manifiesto como
specific-autopilot.yaml
. Este manifiesto tiene selectores de nodos que consumen una reserva específica. Puedes usar instancias de VM o aceleradores.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-storage: "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/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-storage: "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 GPUs 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.
Terraform
Para consumir una reserva específica en el mismo proyecto con instancias de VM con Terraform, consulta el siguiente ejemplo:
Para consumir una reserva específica en el mismo proyecto con la clase de procesamiento de Accelerator mediante Terraform, consulta el siguiente ejemplo:
Si deseas obtener más información sobre el uso de Terraform, consulta Compatibilidad con Terraform para GKE.
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 lista de reservas compartidas en el proyecto de propietario:
gcloud projects add-iam-policy-binding OWNER_PROJECT_ID \ --project=OWNER_PROJECT_ID \ --member=serviceAccount:service-CONSUMER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \ --role='projects/OWNER_PROJECT_ID/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-storage: "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/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-storage: "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.
Soluciona problemas relacionados con el consumo de reservas en Autopilot
- Asegúrate de que los tipos de máquina, los tipos de aceleradores, las configuraciones de SSD locales y las cantidades de aceleradores coincidan con lo que consumirán tus cargas de trabajo. Para obtener una lista completa de las propiedades que deben coincidir, consulta Propiedades de la reserva de capacidad de Compute Engine.
- Asegúrate de que la reserva se cree con una afinidad específica.
- Cuando uses reservas compartidas, asegúrate de que el agente de servicio de GKE en el proyecto de consumidor tenga permiso para enumerar las reservas compartidas en el proyecto de propietario.
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
Puedes crear una reserva e instancias para consumir cualquier reserva con gcloud CLI o Terraform.
gcloud
Para consumir automáticamente cualquier reserva que coincida, configura la marca de afinidad de la reserva como --reservation-affinity=any
. Dado que any
es el valor predeterminado que se define en Compute Engine, puedes omitir completamente la marca de afinidad de la reserva.
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.
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
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
CLUSTER_NAME
por el nombre del clúster que deseas crear.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
NODEPOOL_NAME
por el nombre del grupo de nodos que deseas crear.
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.
Terraform
Para crear una reserva de tres instancias de VM con Terraform, consulta el siguiente ejemplo:
Para crear un clúster que tenga un nodo para que consuma cualquier reserva que coincida mediante Terraform, consulta el siguiente ejemplo:
Para crear un grupo de nodos con tres nodos para consumir cualquier reserva coincidente mediante Terraform, consulta el siguiente ejemplo:
Si deseas obtener más información sobre el uso de Terraform, consulta Compatibilidad con Terraform para GKE.
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. Puedes usar gcloud CLI o Terraform.
gcloud
Crea una reserva específica para 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.
Terraform
Para crear una reserva específica con Terraform, consulta el siguiente ejemplo:
Para crear un grupo de nodos con un solo nodo para consumir una reserva específica de un solo proyecto con Terraform, consulta el siguiente ejemplo:
Si deseas obtener más información sobre el uso de Terraform, consulta Compatibilidad con Terraform para GKE.
Consume una reserva compartida específica
Para crear una reserva compartida específica y consumirla, sigue estos pasos. Puedes usar gcloud CLI o Terraform.
- Sigue los pasos que se indican en Permite y restringe la creación y la modificación de reservas compartidas para los proyectos.
gcloud
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 IDs 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.
Terraform
Para crear una reserva compartida específica con Terraform, consulta el siguiente ejemplo:
Para consumir la reserva compartida específica con Terraform, consulta el siguiente ejemplo:
Si deseas obtener más información sobre el uso de Terraform, consulta Compatibilidad con Terraform para GKE.
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
NODEPOOL_NAME
por el nombre del grupo de nodos que deseas crear.
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.
Realiza 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.