En este documento, se describe cómo configurar la flexibilidad de instancias cuando creas máquinas virtuales (VMs) de forma masiva. La flexibilidad de instancias te permite especificar varios tipos de máquinas, clasificarlos por preferencia y anular la configuración de la plataforma de CPU mínima y del disco para cada selección, de modo que Compute Engine pueda aprovisionar VMs en función de la disponibilidad de capacidad y cuota en una región.
Para obtener más información sobre la flexibilidad de instancias para las VMs creadas de forma masiva, consulta Acerca de la flexibilidad de instancias para las VMs creadas de forma masiva.
Antes de comenzar
- En el caso de las VMs y cualquier recurso relacionado que quieras crear, asegúrate de tener suficiente cuota.
- Si quieres crear VMs Spot de forma masiva, consulta la disponibilidad de los recursos antes de crear las VMs. Verificar la disponibilidad de los recursos ayuda a reducir las posibilidades de que se produzcan errores de disponibilidad de recursos cuando creas VMs. Para obtener instrucciones, consulta Visualiza la disponibilidad de recursos de las VMs Spot.
-
Si aún no lo hiciste, configura la autenticación.
La autenticación verifica tu identidad para acceder a los servicios y las APIs de Google Cloud . Para ejecutar
código o muestras desde un entorno de desarrollo local, puedes autenticarte en
Compute Engine seleccionando una de las siguientes opciones:
Selecciona la pestaña según cómo planeas usar las muestras de esta página:
gcloud
-
Instala Google Cloud CLI y, luego, accede a gcloud CLI con tu identidad federada. Después de acceder, inicializa Google Cloud CLI con el siguiente comando:
gcloud init
-
- Configura una región y una zona predeterminadas.
REST
Para usar las muestras de la API de REST incluidas en esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la gcloud CLI.
Instala Google Cloud CLI y, luego, accede a gcloud CLI con tu identidad federada.
Para obtener más información, consulta Autentícate para usar REST en la documentación de autenticación de Google Cloud .
Roles obligatorios
Para obtener los permisos que
necesitas para crear VMs de forma masiva,
pídele al administrador que te otorgue el rol de IAM
Administrador de instancias de Compute (v1) (roles/compute.instanceAdmin.v1) en el proyecto.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Este rol predefinido contiene los permisos necesarios para crear VMs de forma masiva. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:
Permisos necesarios
Se requieren los siguientes permisos para crear VMs de forma masiva:
-
compute.instances.createen el proyecto -
Si deseas usar una imagen personalizada para crear la VM, sigue estos pasos:
compute.images.useReadOnlyen la imagen -
Para usar una instantánea a fin de crear la VM, haz lo siguiente:
compute.snapshots.useReadOnlyen la instantánea -
Si quieres usar una plantilla de instancias para crear la VM, sigue estos pasos:
compute.instanceTemplates.useReadOnlyen la plantilla de instancias -
A fin de especificar una subred para tu VM:
compute.subnetworks.useen el proyecto o en la subred elegida -
Si deseas especificar una dirección IP estática para la VM:
compute.addresses.useen el proyecto -
Para asignar una dirección IP externa a la VM cuando se usa una red de VPC,
compute.subnetworks.useExternalIpen el proyecto o en la subred elegida. -
Para asignar una red heredada a la VM, ejecuta
compute.networks.useen el proyecto. -
Para asignar una dirección IP externa a la VM cuando se usa una red heredada, ejecuta
compute.networks.useExternalIpen el proyecto -
Para configurar los metadatos de la instancia de VM para la VM,
compute.instances.setMetadataen el proyecto. -
Para configurar etiquetas en la VM, haz lo siguiente:
compute.instances.setTagsen la VM -
Para configurar etiquetas en la VM, haz lo siguiente:
compute.instances.setLabelsen la VM -
A fin de configurar una cuenta de servicio para que la VM use:
compute.instances.setServiceAccounten la VM -
Crear un disco nuevo para la VM:
compute.disks.createen el proyecto -
Para conectar un disco existente en modo de solo lectura o de lectura y escritura, usa
compute.disks.useen el disco. -
Para conectar un disco existente en modo de solo lectura, haz lo siguiente:
compute.disks.useReadOnlyen el disco
También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.
Crea VMs con varios tipos de máquinas de igual preferencia
Si tu carga de trabajo puede operar en varios tipos de máquinas diferentes, puedes especificar una lista de todos los tipos de máquinas compatibles en una sola selección de instancias. En los siguientes ejemplos, se muestra cómo puedes especificar varios tipos de máquinas con la misma preferencia.
gcloud
Para crear VMs de forma masiva con una sola selección de instancias, usa el comando
gcloud compute instances bulk create con la
marca --instance-selection-machine-types.
gcloud compute instances bulk create \
--name-pattern=NAME_PATTERN \
--region=REGION \
--count=COUNT \
--instance-selection-machine-types=MACHINE_TYPE_1,MACHINE_TYPE_2
Reemplaza lo siguiente:
COUNT: la cantidad de VMs que se crearánNAME_PATTERN: el patrón de nombre para las VMsMACHINE_TYPE_1,MACHINE_TYPE_2: Son los tipos de máquina que se usarán para las VMs.REGION: la región en la que se crearán las VMs
Ejemplo
gcloud compute instances bulk create \
--name-pattern=test-bulk-# \
--region=us-central1 \
--count=10 \
--instance-selection-machine-types=c4-standard-8,c3-standard-8
REST
En la API de Compute Engine, realiza una solicitud POST al
método regionInstances.bulkInsert.
En el cuerpo de la solicitud, incluye instanceFlexibilityPolicy con una
entrada instanceSelections que enumere los tipos de máquinas.
POST https://compute./compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
"count": COUNT,
"namePattern": "NAME_PATTERN",
"instanceProperties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"selection-1": {
"machineTypes": [
"MACHINE_TYPE_1",
"MACHINE_TYPE_2"
]
}
}
}
}
Reemplaza lo siguiente:
COUNT: la cantidad de VMs que se crearánNAME_PATTERN: el patrón de nombre para las VMsMACHINE_TYPE_1,MACHINE_TYPE_2: Son los tipos de máquina que se usarán para las VMs.IMAGE_PROJECT: Es el proyecto que contiene la imagen.IMAGE: Es el nombre de la imagen o la familia de imágenes que se usará.PROJECT_ID: Es el ID del proyecto.REGION: la región en la que se crearán las VMs
Ejemplo
POST https://compute./compute/v1/projects/my-project/regions/us-central1/instances/bulkInsert
{
"count": 10,
"namePattern": "test-bulk-#",
"instanceProperties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/debian-12"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"selection-1": {
"machineTypes": [
"c4-standard-8",
"c3-standard-8"
]
}
}
}
}
Crea VMs con varios tipos de máquinas clasificados por preferencia
Si quieres que Compute Engine elija tipos de máquinas en un orden específico, puedes configurar varias selecciones de instancias. Cada selección de instancias incluye una lista de tipos de máquinas y una clasificación, que es un número entero que define la preferencia por los tipos de máquinas. Una clasificación más baja indica una preferencia más alta. Compute Engine intenta crear VMs con tipos de máquinas que tengan una preferencia más alta (clasificación más baja). Si esos tipos de máquinas no están disponibles, Compute Engine usa tipos de máquinas con una preferencia más baja (clasificación más alta).
En los siguientes ejemplos, se muestra cómo especificar varias selecciones de instancias con rangos.
gcloud
Para crear VMs de forma masiva con varias selecciones de instancias, usa el comando gcloud compute instances bulk create y
especifica la marca --instance-selection varias veces.
gcloud compute instances bulk create \
--name-pattern=NAME_PATTERN \
--region=REGION \
--count=COUNT \
--instance-selection "name=INSTANCE_SELECTION_1,rank=0,machine-type=MACHINE_TYPE_1,machine-type=MACHINE_TYPE_2" \
--instance-selection "name=INSTANCE_SELECTION_2,rank=1,machine-type=MACHINE_TYPE_3,machine-type=MACHINE_TYPE_4"
Reemplaza lo siguiente:
COUNT: la cantidad de VMs que se crearánNAME_PATTERN: el patrón de nombre para las VMsINSTANCE_SELECTION_1: Es el nombre de la primera selección de instancia.INSTANCE_SELECTION_2: Es el nombre de la segunda selección de instancias.MACHINE_TYPE_1,MACHINE_TYPE_2: Son los tipos de máquina para la primera selección de instancias.MACHINE_TYPE_3,MACHINE_TYPE_4: los tipos de máquina para la segunda selección de instanciasREGION: la región en la que se crearán las VMs
Ejemplo
gcloud compute instances bulk create \
--name-pattern=test-bulk-# \
--region=us-central1 \
--count=10 \
--instance-selection "name=most-preferred,rank=0,machine-type=c4-standard-16" \
--instance-selection "name=least-preferred,rank=1,machine-type=c3-standard-16"
REST
En la API de Compute Engine, realiza una solicitud POST al
método regionInstances.bulkInsert.
En el cuerpo de la solicitud, incluye instanceFlexibilityPolicy y especifica
varias entradas en instanceSelections, cada una con una lista de tipos de máquinas
y un rank.
POST https://compute./compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
"count": COUNT,
"namePattern": "NAME_PATTERN",
"instanceProperties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"INSTANCE_SELECTION_1": {
"machineTypes": [
"MACHINE_TYPE_1",
"MACHINE_TYPE_2"
],
"rank": 1
},
"INSTANCE_SELECTION_2": {
"machineTypes": [
"MACHINE_TYPE_3",
"MACHINE_TYPE_4"
],
"rank": 2
}
}
}
}
Reemplaza lo siguiente:
COUNT: la cantidad de VMs que se crearánNAME_PATTERN: el patrón de nombres para las VMsINSTANCE_SELECTION_1: Es el nombre de la primera selección de instancia.INSTANCE_SELECTION_2: Es el nombre de la segunda selección de instancias.MACHINE_TYPE_1,MACHINE_TYPE_2: Son los tipos de máquina para la primera selección de instancias.MACHINE_TYPE_3,MACHINE_TYPE_4: los tipos de máquina para la segunda selección de instanciasIMAGE_PROJECT: Es el proyecto que contiene la imagen.IMAGE: Es el nombre de la imagen o la familia de imágenes que se usará.PROJECT_ID: Es el ID del proyecto.REGION: la región en la que se crearán las VMs
Ejemplo
POST https://compute./compute/v1/projects/my-project/regions/us-central1/instances/bulkInsert
{
"count": 10,
"namePattern": "test-bulk-#",
"instanceProperties": {
"disks": [
{
"boot": true,
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/debian-12"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"most-preferred": {
"machineTypes": [
"c4-standard-16"
],
"rank": 1
},
"least-preferred": {
"machineTypes": [
"c3-standard-16"
],
"rank": 2
}
}
}
}
Crea VMs con varios tipos de máquinas, plataforma de CPU mínima y anulaciones de discos
Además de especificar los tipos de máquinas y los rangos, puedes anular la
plataforma de CPU mínima y
anular o agregar definiciones de disco en instanceProperties para cada
selección de instancia.
Por ejemplo, puedes anular el tamaño del disco de arranque o adjuntar volúmenes de Hyperdisk adicionales para tipos de máquinas específicos en una selección de instancias.
Para obtener más información sobre los tipos de discos compatibles y cómo Compute Engine aplica las anulaciones, consulta los siguientes recursos:
* Compatibilidad de la serie de máquinas con Hyperdisk * Anulaciones de propiedades de instancias en selecciones de instanciasPara crear VMs de forma masiva con varios tipos de máquinas, plataforma de CPU mínima y anulaciones de discos, selecciona una de las siguientes opciones:
gcloud
Para crear VMs de forma masiva con varios tipos de máquinas, plataforma de CPU mínima y
anulaciones de discos, usa el comando
gcloud compute instances bulk create con la
marca --instance-flexibility-policy. Para anular el disco de arranque predeterminado de
instanceProperties, también incluye la marca --boot-disk-device-name y
especifica el mismo deviceName en la selección de instancias:
gcloud compute instances bulk create \
--name-pattern=NAME_PATTERN \
--region=REGION \
--count=COUNT \
--boot-disk-device-name=BOOT_DISK_DEVICE_NAME \
--instance-flexibility-policy='{"instanceSelections":
{"INSTANCE_SELECTION_1":{"rank":RANK_1,"machineTypes":["MACHINE_TYPE_1","MACHINE_TYPE_2"],"minCpuPlatform":"MIN_CPU_PLATFORM_1","disks":[{"deviceName":"BOOT_DISK_DEVICE_NAME_1","boot":true,"initializeParams":{"diskType":"DISK_TYPE_1","diskSizeGb":DISK_SIZE_1,"sourceImage":"projects/IMAGE_PROJECT_1/global/images/IMAGE_1"}}]},
"INSTANCE_SELECTION_2":{"rank":RANK_2,"machineTypes":["MACHINE_TYPE_3"],"minCpuPlatform":"MIN_CPU_PLATFORM_2","disks":[{"deviceName":"BOOT_DISK_DEVICE_NAME_2","boot":true,"initializeParams":{"diskType":"DISK_TYPE_2","diskSizeGb":DISK_SIZE_2,"sourceImage":"projects/IMAGE_PROJECT_2/global/images/IMAGE_2"}}]}}}'
Como alternativa, para configurar la política de flexibilidad de instancias con un archivo YAML
o JSON, usa la
marca --flags-file en lugar de la
marca --instance-flexibility-policy:
gcloud compute instances bulk create \
--name-pattern=NAME_PATTERN \
--region=REGION \
--count=COUNT \
--boot-disk-device-name=BOOT_DISK_DEVICE_NAME \
--flags-file=FILE_NAME.yaml
Reemplaza lo siguiente:
COUNT: la cantidad de VMs que se crearánNAME_PATTERN: el patrón de nombre para las VMsREGION: la región en la que se crearán las VMsBOOT_DISK_DEVICE_NAME: el nombre del dispositivo para el disco de arranque predeterminado eninstancePropertiesINSTANCE_SELECTION_1,INSTANCE_SELECTION_2: son los nombres de las selecciones de instancias.RANK_1,RANK_2: Son números opcionales que representan tu orden de preferencia para cada selección de instancia. Un valor más bajo indica una preferencia más alta.MACHINE_TYPE_1,MACHINE_TYPE_2: Son los tipos de máquina para la primera selección de instancias.MACHINE_TYPE_3: el tipo de máquina para la segunda selección de instanciaMIN_CPU_PLATFORM_1,MIN_CPU_PLATFORM_2: Son las plataformas de CPU mínimas opcionales para las VMs en cada selección de instancias.BOOT_DISK_DEVICE_NAME_1,BOOT_DISK_DEVICE_NAME_2: Son los nombres de los dispositivos para los discos de arranque en cada selección de instancia. Para anular el disco de arranque predeterminado, especifica el mismo nombre queBOOT_DISK_DEVICE_NAME.DISK_TYPE_1,DISK_TYPE_2: Son los tipos de disco para las anulaciones de disco, comohyperdisk-balancedDISK_SIZE_1,DISK_SIZE_2: Son los tamaños de los discos para las anulaciones de discos.IMAGE_PROJECT_1,IMAGE_PROJECT_2: Son los proyectos que contienen las imágenes para las anulaciones de discos.IMAGE_1,IMAGE_2: Son los nombres de las imágenes o familias de imágenes para las anulaciones de discos.FILE_NAME.yaml: Es el nombre del archivo YAML o JSON que contiene la configuración de--instance-flexibility-policy.
Ejemplo
En el siguiente ejemplo, se crean 10 VMs con dos selecciones de instancias que especifican una plataforma de CPU mínima, anulan el disco de arranque predeterminado y conectan discos adicionales:
sh
gcloud compute instances bulk create \
--name-pattern=test-bulk-# \
--region= \
--count=10 \
--boot-disk-device-name=boot-disk \
--instance-flexibility-policy='{"instanceSelections":
{"selection-1":{"machineTypes":["c4-standard-8","c4-highcpu-8"],"minCpuPlatform":"Intel Emerald Rapids","disks":[{"type":"PERSISTENT","deviceName":"boot-disk","boot":true,"initializeParams":{"diskType":"hyperdisk-balanced","diskSizeGb":50,"sourceImage":"projects/debian-cloud/global/images/family/debian-12"}}]},
"selection-2":{"machineTypes":["c3-standard-8"],"minCpuPlatform":"Intel Sapphire Rapids","disks":[{"type":"PERSISTENT","deviceName":"boot-disk","boot":true,"initializeParams":{"diskType":"hyperdisk-balanced","diskSizeGb":50,"sourceImage":"projects/debian-cloud/global/images/family/debian-12"}},{"type":"PERSISTENT","deviceName":"data-disk","initializeParams":{"diskType":"hyperdisk-balanced","diskSizeGb":128}}]}}}'
Como alternativa, si usas la marca --flags-file, puedes especificar la misma
política de flexibilidad de instancias en un archivo YAML:
--instance-flexibility-policy:
instanceSelections:
selection-1:
machineTypes:
- c4-standard-8
- c4-highcpu-8
minCpuPlatform: Intel Emerald Rapids
disks:
- type: PERSISTENT
deviceName: boot-disk
boot: true
initializeParams:
diskType: hyperdisk-balanced
diskSizeGb: 50
sourceImage: projects/debian-cloud/global/images/family/debian-12
selection-2:
machineTypes:
- c3-standard-8
minCpuPlatform: Intel Sapphire Rapids
disks:
- type: PERSISTENT
deviceName: boot-disk
boot: true
initializeParams:
diskType: hyperdisk-balanced
diskSizeGb: 50
sourceImage: projects/debian-cloud/global/images/family/debian-12
- type: PERSISTENT
deviceName: data-disk
initializeParams:
diskType: hyperdisk-balanced
diskSizeGb: 128
REST
En la API de Compute Engine, realiza una solicitud POST al
método regionInstances.bulkInsert.
En el cuerpo de la solicitud, incluye instanceFlexibilityPolicy y, en cada
entrada instanceSelections, incluye el campo minCpuPlatform para anular
instanceProperties.minCpuPlatform y el campo disks para anular o
agregar a instanceProperties.disks:
POST https://compute./compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
{
"count": COUNT,
"namePattern": "NAME_PATTERN",
"instanceProperties": {
"disks": [
{
"boot": true,
"deviceName": "boot-disk",
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"INSTANCE_SELECTION_1": {
"machineTypes": [
"MACHINE_TYPE_1",
"MACHINE_TYPE_2"
],
"minCpuPlatform": "MIN_CPU_PLATFORM_1",
"disks": [
{
"type": "PERSISTENT",
"deviceName": "boot-disk",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 50,
"sourceImage": "projects/IMAGE_PROJECT_1/global/images/IMAGE_1"
},
"boot": true
}
]
},
"INSTANCE_SELECTION_2": {
"machineTypes": [
"MACHINE_TYPE_3"
],
"minCpuPlatform": "MIN_CPU_PLATFORM_2",
"disks": [
{
"type": "PERSISTENT",
"deviceName": "boot-disk",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 50,
"sourceImage": "projects/IMAGE_PROJECT_2/global/images/IMAGE_2"
},
"boot": true
},
{
"type": "PERSISTENT",
"deviceName": "data-disk",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 128
}
}
]
}
}
}
}
Reemplaza lo siguiente:
COUNT: la cantidad de VMs que se crearánNAME_PATTERN: el patrón de nombres para las VMsINSTANCE_SELECTION_1: Es el nombre de la primera selección de instancia.INSTANCE_SELECTION_2: Es el nombre de la segunda selección de instancias.MACHINE_TYPE_1,MACHINE_TYPE_2: Son los tipos de máquina para la primera selección de instancias.MACHINE_TYPE_3: el tipo de máquina para la segunda selección de instanciaMIN_CPU_PLATFORM_1,MIN_CPU_PLATFORM_2: Son las plataformas de CPU mínimas opcionales para las VMs en cada selección de instancias.IMAGE_PROJECT: Es el proyecto que contiene la imagen de arranque predeterminada eninstanceProperties.IMAGE: Es el nombre de la imagen de arranque predeterminada o la familia de imágenes eninstanceProperties.IMAGE_PROJECT_1,IMAGE_PROJECT_2: Son los proyectos que contienen las imágenes para las anulaciones de discos.IMAGE_1,IMAGE_2: Son los nombres de las imágenes para las anulaciones de discos.PROJECT_ID: Es el ID del proyecto.REGION: la región en la que se crearán las VMs
Ejemplo
En el siguiente ejemplo, se crean 10 VMs con dos selecciones de instancias que especifican una plataforma de CPU mínima, anulan el disco de arranque predeterminado y conectan discos adicionales:
POST https://compute./compute/v1/projects/my-project/regions/us-central1/instances/bulkInsert
{
"count": 10,
"namePattern": "test-bulk-#",
"instanceProperties": {
"disks": [
{
"boot": true,
"deviceName": "boot-disk",
"initializeParams": {
"sourceImage": "projects/debian-cloud/global/images/family/debian-12"
}
}
],
"networkInterfaces": [{}]
},
"instanceFlexibilityPolicy": {
"instanceSelections": {
"selection-1": {
"machineTypes": [
"c4-standard-8",
"c4-highcpu-8"
],
"minCpuPlatform": "Intel Emerald Rapids",
"disks": [
{
"type": "PERSISTENT",
"deviceName": "boot-disk",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 50,
"sourceImage": "projects/debian-cloud/global/images/family/debian-12"
},
"boot": true
}
]
},
"selection-2": {
"machineTypes": [
"c3-standard-8"
],
"minCpuPlatform": "Intel Sapphire Rapids",
"disks": [
{
"type": "PERSISTENT",
"deviceName": "boot-disk",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 50,
"sourceImage": "projects/debian-cloud/global/images/family/debian-12"
},
"boot": true
},
{
"type": "PERSISTENT",
"deviceName": "data-disk",
"initializeParams": {
"diskType": "hyperdisk-balanced",
"diskSizeGb": 128
}
}
]
}
}
}
}