Crea una reserva compartida

En este documento, se describe cómo crear reservas compartidas y administrar qué proyectos de tu organización pueden crear reservas compartidas.

Las reservas proporcionan un nivel de seguridad muy alto a fin de obtener capacidad para los recursos zonales de Compute Engine. El proyecto que creó la reserva (proyecto de propietario) y los proyectos con los que se comparte la reserva (proyectos de consumidores) pueden usar una reserva compartida. Usa las reservas compartidas si tu organización tiene varios proyectos que necesitan instancias de máquina virtual (VM) con las mismas propiedades de instancia reservadas. Mediante las reservas compartidas, puedes mejorar el uso de tus reservas y reducir la cantidad de reservas que necesitas crear y administrar. Para obtener más información, consulta Reservas para recursos zonales de Compute Engine.

Si deseas crear una reserva que solo el proyecto que la crea pueda usar, consulta Crea reservas para un solo proyecto en su lugar.

Antes de comenzar

Prácticas recomendadas

Cuando creas reservas compartidas, se recomiendan las siguientes prácticas. Si las sigues, puedes ayudar a optimizar la administración y el uso de las reservas compartidas en tu organización y mitigar las limitaciones de las reservas compartidas.

  • Minimiza la cantidad de proyectos en tu organización a los que les permites crear reservas compartidas. Puedes controlar esto a través de la restricción de la política de la organización Proyectos de propietario de las reservas compartidas (compute.sharedReservationsOwnerProjects).
    • Solo puedes enumerar las reservas que creó cada proyecto. Esto significa que las reservas compartidas solo se enumeran en el proyecto de propietario (no puedes enumerar las reservas compartidas con cada proyecto o todas las reservas compartidas en cada organización), por lo que tener solo algunos proyectos de propietario facilita la supervisión y la administración de tus reservas compartidas.
    • A los proyectos se les cobra la cuota de creación y consumo de la reserva compartida, por lo que limitar la creación a algunos proyectos puede facilitarte la administración de tus cuotas de recursos.
    • Para obtener más información, consulta Permite y restringe la creación y la modificación de reservas compartidas para los proyectos.
  • Minimiza la cantidad de reservas compartidas independientes con propiedades de instancia idénticas.
    • Una organización puede tener hasta 100 reservas compartidas para cada combinación única de propiedades de instancia. Como resultado, minimizar la cantidad de reservas compartidas con propiedades de instancia idénticas que creas ayuda a mitigar este límite.
    • Tener menos reservas compartidas mejora la administración.
  • Solo comparte las reservas entre proyectos con la misma cuenta de facturación.
    • Cuando se limita cada reserva compartida a fin de que solo se comparta con proyectos de consumidor que tengan la misma cuenta de facturación que el proyecto de propietario, puedes ver con mayor claridad si se consumió una reserva (y, por lo tanto, se facturó) o no.
    • Si tienes descuentos por compromiso de uso para una cuenta de facturación, limitar las reservas compartidas a esa cuenta de facturación ayuda a mantener la facturación coherente en los proyectos que crean y consumen reservas compartidas.

Permite y restringe la creación y la modificación de reservas compartidas para los proyectos

De forma predeterminada, no se permite a los proyectos crear o modificar reservas compartidas en una organización. Agrega proyectos a la restricción de la política de la organización Proyectos de propietario de las reservas compartidas (compute.sharedReservationsOwnerProjects) para permitirles crear y modificar reservas compartidas. Para obtener más información sobre las restricciones de las políticas de la organización, consulta Introducción al servicio de las políticas de la organización.

Sigue estos pasos para ver y editar la restricción de la política de la organización Proyectos de propietario de las reservas compartidas (compute.sharedReservationsOwnerProjects).

Visualiza la restricción de la política de la organización de reservas compartidas

Para ver qué proyectos tienen permiso para crear y modificar reservas compartidas, usa Cloud Console o la herramienta de gcloud.

Console

Sigue los pasos para ver las políticas de la organización mediante la restricción Proyectos de propietario de las reservas compartidas.

gcloud

Para ver a qué proyectos permite la restricción compute.sharedReservationsOwnerProjects crear y modificar reservas compartidas, haz lo siguiente:

  1. Descarga la política para tu organización como un archivo llamado policy.yaml mediante el comando gcloud resource-manager org-policies describe:

    gcloud resource-manager org-policies describe compute.sharedReservationsOwnerProjects --organization=ORGANIZATION_ID > policy.yaml
    

    Reemplaza ORGANIZATION_ID por el ID de organización de tu organización.

  2. Usa un editor de texto para abrir el archivo policy.yaml y ver la restricción compute.sharedReservationsOwnerProjects. Los proyectos que tienen permiso para crear y modificar reservas compartidas se enumeran en allowedValues:

    ...
    constraint: constraints/compute.sharedReservationsOwnerProjects
    listPolicy:
      allowedValues:
      - projects/PROJECT_NUMBER_1
      - projects/PROJECT_NUMBER_2
      - projects/PROJECT_NUMBER_3
    ...
    

    En el ejemplo anterior, PROJECT_NUMBER_1, PROJECT_NUMBER_2 y PROJECT_NUMBER_3 son los números de proyecto de los únicos proyectos de tu organización que tienen permiso para crear reservas compartidas.

  3. Borra el archivo policy.yaml (opcional).

    rm policy.yaml
    

Edita la restricción de la política de la organización de reservas compartidas

Para ver qué proyectos tienen permiso para crear y modificar reservas compartidas, usa Cloud Console o la herramienta de gcloud.

Console

Sigue los pasos para personalizar las políticas para restricciones de listas mediante la restricción Proyectos de propietario de las reservas compartidas.

gcloud

Para editar a qué proyectos permite la restricción compute.sharedReservationsOwnerProjects crear y modificar reservas compartidas, usa uno de los siguientes métodos:

  • Para otorgar permiso a un solo proyecto a fin de crear y modificar reservas compartidas, usa el comando gcloud resource-manager org-policies allow. Puedes repetir este comando para cada proyecto al que le quieras otorgar este permiso.

    gcloud resource-manager org-policies allow compute.sharedReservationsOwnerProjects projects/PROJECT_NUMBER \
        --organization=ORGANIZATION_ID
    

    Reemplaza lo siguiente:

    • PROJECT_NUMBER: el número de proyecto de un proyecto en tu organización al que deseas otorgarle permisos para crear y modificar reservas compartidas.
    • ORGANIZATION_ID: el ID de organización de tu organización.
  • Para otorgar o revocar los permisos para varios proyectos a fin de crear y modificar reservas compartidas, reemplaza la restricción de la política de la organización:

    1. A fin de descargar la política para tu organización como un archivo llamado policy.yaml, usa el comando gcloud resource-manager org-policies describe:

      gcloud resource-manager org-policies describe compute.sharedReservationsOwnerProjects --organization=ORGANIZATION_ID > policy.yaml
      

      Reemplaza ORGANIZATION_ID por el ID de organización de tu organización.

    2. Usa un editor de texto para modificar el archivo policy.yaml de forma que la restricción compute.sharedReservationsOwnerProjects solo enumere los proyectos a los que deseas otorgarles permisos para crear y modificar reservas compartidas en allowedValues.

      • Para cada proyecto al que le quieras otorgar permisos a fin de crear y modificar reservas compartidas, agrega una línea nueva en ese proyecto en allowedValues.
      • Para cada proyecto al que le quieras revocar el permiso a fin de crear y modificar reservas compartidas, borra la línea para ese proyecto.

      Cuando termines, asegúrate de que el archivo policy.yaml sea similar al que aparece a continuación:

      ...
      constraint: constraints/compute.sharedReservationsOwnerProjects
      listPolicy:
        allowedValues:
        - projects/PROJECT_NUMBER_1
        - projects/PROJECT_NUMBER_2
        - projects/PROJECT_NUMBER_3
      ...
      

      En el ejemplo anterior, PROJECT_NUMBER_1, PROJECT_NUMBER_2 y PROJECT_NUMBER_3 son los números de proyecto de los únicos proyectos de tu organización a los que deseas otorgarles permisos para crear y modificar reservas compartidas.

    3. Guarda el archivo policy.yaml y cierra el editor de texto.

    4. A fin de actualizar la política para tu organización con los cambios, usa el comando gcloud resource-manager org-policies set-policy:

      gcloud resource-manager org-policies set-policy --organization=ORGANIZATION_ID policy.yaml
      

      Reemplaza ORGANIZATION_ID por el ID de organización de tu organización.

    5. Borra el archivo policy.yaml (opcional).

      rm policy.yaml
      

Crea una reserva compartida

Crea una reserva compartida para instancias de VM mediante la herramienta de gcloud o la API de Compute Engine. Solo el proyecto de propietario puede modificar la reserva compartida, pero el proyecto de propietario o cualquier proyecto de consumidor pueden consumir los recursos para una reserva compartida.

Una instancia de VM solo puede consumir una reserva si sus propiedades coinciden de forma exacta con las propiedades de instancia de la reserva:

  • Zona
  • Tipo de máquina (familia de máquinas, CPU virtuales y memoria)
  • Plataforma de CPU mínima
  • Tipo de GPU
  • Recuento de GPU
  • Interfaz de SSD local
  • Tamaño de SSD local

De forma predeterminada, las instancias de VM coincidentes que se crean en el proyecto de propietario o en un proyecto de consumidor consumen una reserva compartida de forma automática. Para crear una reserva que no se consuma de forma automática, usa la opción specificReservationRequired cuando crees la reserva o crea una instancia sin consumir una reserva.

No necesitas crear un compromiso para reservar recursos. Sin embargo, si deseas obtener precios con descuentos por compromiso de uso en GPU o SSD locales, debes crear una reserva que incluya esos recursos al mismo tiempo cuando compres tu compromiso. Para obtener más información, consulta Combina reservas con descuentos por compromiso de uso.

Para crear una reserva compartida, usa la herramienta de gcloud o la API de Compute Engine.

gcloud

Usa el comando gcloud beta compute reservations create con las marcas --share-setting=projects y --share-with:

gcloud beta compute reservations create RESERVATION_NAME \
    --machine-type=MACHINE_TYPE \
    --min-cpu-platform=MINIMUM_CPU_PLATFORM \
    --vm-count=NUMBER_OF_VMS \
    --accelerator=count=NUMBER_OF_ACCELERATORS,type=ACCELERATOR_TYPE \
    --local-ssd=size=375,interface=INTERFACE_1 \
    --local-ssd=size=375,interface=INTERFACE_2 \
    --zone=ZONE \
    --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 un tipo de máquina predefinido o personalizado.

    • Para los tipos de máquinas predefinidos, usa el formato MACHINE_FAMILY-standard-CPUS; por ejemplo, n2-standard-4.
    • Para los tipos de máquinas personalizados, usa el formato MACHINE_FAMILY-custom-CPUS-MEMORY; por ejemplo, n2-custom-4-5120. Si deseas obtener una lista completa de las restricciones, consulta las especificaciones para los tipos personalizados de máquinas.

    Reemplaza lo siguiente:

    • MACHINE_FAMILY: es la familia de tipos de máquinas; por ejemplo, especifica n2 para las VM N2.
    • CPUS: Es la cantidad de CPU virtuales.
    • MEMORY: Es la memoria total para esta instancia. La memoria debe ser un múltiplo de 256 MB y debe proporcionarse en MB; por ejemplo, para crear una VM N2 con 4 CPU virtuales y 5 GB de memoria, que son 5,120 MB, usa n2-custom-4-5120.
  • MINIMUM_CPU_PLATFORM: Es la CPU mínima que se usará en cada instancia.

  • NUMBER_OF_VMS: Es la cantidad de instancias de VM que se reservarán.

  • NUMBER_OF_ACCELERATORS: Es la cantidad de GPU que se agregará, por instancia.

  • ACCELERATOR_TYPE: Es el tipo de acelerador.

  • INTERFACE_1 y INTERFACE_2: son el tipo de interfaz que deseas que usen los SSD locales para cada instancia. Las opciones válidas son: scsi y nvme. Cada SSD local es de 375 GB. Repite la marca --local-ssd para cada SSD local que desees agregar, hasta 24 SSD locales por instancia.

  • ZONE: Es la zona en la que se reservarán los recursos.

  • OWNER_PROJECT_ID: es el ID del proyecto que deseas que cree esta reserva compartida (opcional). Si omites la marca --project, el proyecto actual se usa como proyecto de propietario de forma predeterminada.

  • CONSUMER_PROJECT_IDS: 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 incluyas OWNER_PROJECT_ID, que ya tiene permisos para consumir esta reserva de forma predeterminada.

Debes incluir la marca --share-setting=projects para compartir esta reserva con otros proyectos.

De manera opcional, puedes agregar la marca --require-specific-reservation para indicar que solo las instancias de VM que se dirigen a esta reserva de forma explícita pueden usarla.

Por ejemplo, para hacer una reserva compartida en us-central1-a que solo se pueda usar cuando esta reserva es el objetivo específico, usa un comando similar al siguiente. En este ejemplo, se reservan 10 máquinas personalizadas, cada una con 8 CPU virtuales Intel Haswell (o más recientes), 10 GB de memoria, 2 GPU V100 y un SSD local de 375 GB. La reserva compartida de ejemplo se crea en el proyecto my-owner-project y puede ser consumida por my-owner-project, project-1 o project-2.

gcloud beta compute reservations create my-reservation \
    --machine-type=custom-8-10240 \
    --min-cpu-platform="Intel Haswell" \
    --vm-count=10 \
    --accelerator=count=2,type=nvidia-tesla-v100 \
    --local-ssd=size=375,interface=scsi \
    --zone=us-central1-c \
    --project=my-owner-project \
    --share-setting=projects \
    --share-with=project-1,project-2 \
    --require-specific-reservation
 

API

Crea una solicitud POST al método reservations.insert beta y, luego, incluye el campo shareSetting. Establece el campo "shareType" en "SPECIFIC_PROJECTS" y el campo "projects" en una lista separada por comas de ID de proyectos.

POST https://compute.googleapis.com/compute/beta/projects/OWNER_PROJECT_ID/zones/ZONE/reservations

{
  "name":"RESERVATION_NAME",
  "specificReservation":{
    "count":"NUMBER_OF_VMS",
    "instanceProperties":{
      "machineType":"MACHINE_TYPE",
      "minCpuPlatform": "MINIMUM_CPU_PLATFORM",
      "guestAccelerators":[
        {
          "acceleratorCount":"NUMBER_OF_ACCELERATORS",
          "acceleratorType":"ACCELERATOR_TYPE"
        }
      ],
      "localSsds":[
        {
          "diskSizeGb":"375",
          "interface":"INTERFACE_1"
        },
        {
          "diskSizeGb":"375",
          "interface":"INTERFACE_2"
        }
      ]
    }
  },
  "shareSettings": {
    "shareType": "SPECIFIC_PROJECTS",
    "projects": ["CONSUMER_PROJECT_ID_1", "CONSUMER_PROJECT_ID_2"],
  }
}

Reemplaza lo siguiente:

  • OWNER_PROJECT_ID: es el ID del proyecto que deseas que sea el proyecto de propietario y que cree esta reserva.
  • ZONE: Es la zona en la que se reservarán los recursos.
  • RESERVATION_NAME: Es el nombre de la reserva que se creará.
  • NUMBER_OF_VMS: Es la cantidad de instancias de VM que se reservarán.
  • MACHINE_TYPE: Es un tipo de máquina predefinido o personalizado.

    • Para los tipos de máquinas predefinidos, usa el formato MACHINE_FAMILY-standard-CPUS; por ejemplo, n2-standard-4.
    • Para los tipos de máquinas personalizados, usa el formato MACHINE_FAMILY-custom-CPUS-MEMORY; por ejemplo, n2-custom-4-5120. Si deseas obtener una lista completa de las restricciones, consulta las especificaciones para los tipos personalizados de máquinas.

    Reemplaza lo siguiente:

    • MACHINE_FAMILY: es la familia de tipos de máquinas; por ejemplo, especifica n2 para las VM N2.
    • CPUS: Es la cantidad de CPU virtuales.
    • MEMORY: Es la memoria total para esta instancia. La memoria debe ser un múltiplo de 256 MB y debe proporcionarse en MB; por ejemplo, para crear una VM N2 con 4 CPU virtuales y 5 GB de memoria, que son 5,120 MB, usa n2-custom-4-5120.
  • MINIMUM_CPU_PLATFORM: Es la CPU mínima que se usará en cada instancia.

  • NUMBER_OF_ACCELERATORS: Es la cantidad de GPU que se agregará, por instancia.

  • ACCELERATOR_TYPE: Es el tipo de acelerador.

  • INTERFACE_1 y INTERFACE_2: son el tipo de interfaz que deseas que usen los SSD locales para cada instancia. Las opciones válidas son: scsi y nvme. Cada SSD local es de 375 GB. Repite los campos localSsds.diskSizeGb y localSsds.interface para cada SSD local que desees agregar, hasta 24 SSD locales por instancia.

  • CONSUMER_PROJECT_ID_1 y CONSUMER_PROJECT_ID_2: son los ID de los proyectos con los que deseas compartir esta reserva rodeados por comillas en una lista separada por comas, 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 incluyas OWNER_PROJECT_ID, que ya tiene permisos para consumir esta reserva de forma predeterminada.

De forma opcional, agrega el campo "specificReservationRequired": true, como se muestra en el siguiente ejemplo, para indicar que solo las instancias de VM que se orientan a esta reserva de forma explícita pueden usarla.

Por ejemplo, para hacer una reserva compartida en us-central1-a que solo se pueda usar cuando esta reserva es el objetivo específico, usa un comando similar al siguiente. En este ejemplo, se reservan 10 máquinas personalizadas, cada una con 8 CPU virtuales Intel Haswell (o más recientes), 10 GB de memoria, 2 GPU V100 y una SSD local de 375 GB. El proyecto my-owner-project crea la reserva compartida de ejemplo y my-owner-project, project-1 o project-2 pueden consumirla.

POST https://compute.googleapis.com/compute/beta/projects/my-owner-project/zones/us-central1-a/reservations

{
  "name": "reservation-1",
  "specificReservation":
  {
    "count": "10",
    "instanceProperties":
    {
      "machineType": "custom-8-10240",
      "minCpuPlatform": "Intel Haswell",
      "guestAccelerators":
      [
        {
          "acceleratorCount": 2,
          "acceleratorType": "nvidia-tesla-v100"
        }
      ],
      "localSsds":
      [
        {
          "diskSizeGb": "375",
          "interface": "SCSI"
        }
      ]
    }
  },
  "shareSettings": {
    "shareType": "SPECIFIC_PROJECTS",
    "projects": ["project-1", "project-2"],
  }
  "specificReservationRequired": true
}

Para ver la reserva que creaste (por ejemplo, a fin de verificar si alguna instancia la consumió de forma automática), describe la reserva.

Si esta reserva no consume instancias como se espera, consulta Garantiza el uso de las reservas.

¿Qué sigue?