Comprometer de forma excesiva CPUs en máquinas virtuales de único propietario


El exceso de compromiso de CPU en nodos de único propietario te permite programar instancias que pueden compartir sus ciclos de CPU de repuesto entre sí. De esta forma, puedes aprovisionar en exceso los recursos de los nodos de único propietario y programar más CPUs de máquinas virtuales en un nodo de único propietario de las que normalmente están disponibles. El exceso de asignación de CPU es especialmente útil para las cargas de trabajo que no se utilizan lo suficiente, pero que pueden experimentar picos relativamente no correlacionados.

La sobreasignación de CPU puede ayudarte a reducir los costes por máquina virtual al repartir el coste de un nodo de un solo inquilino entre más máquinas virtuales. También puede reducir los costes de licencia por VM cuando se usan licencias por socket o por núcleo.

Las VMs con CPUs sobrecomprometidas pueden utilizar recursos de CPU que, de otro modo, no se usarían de las siguientes formas:

  • Si un nodo de único cliente no está lleno, las VMs con exceso de compromiso pueden utilizar los núcleos no asignados.

  • Si otra VM de un nodo de único propietario no utiliza todos sus recursos de CPU (por ejemplo, porque la CPU está inactiva), una VM con recursos de CPU comprometidos en exceso puede usar esos recursos.

Nivel de sobreasignación

Puedes especificar el valor del número mínimo de CPUs que se asignan a una VM cuando creas una VM o después de detenerla. El nivel de sobreasignación representa el número mínimo de subprocesos de CPU subyacentes que se garantiza que estarán disponibles para una VM. Si la VM tiene más vCPUs que subprocesos subyacentes disponibles, las vCPUs de la VM compartirán los recursos de computación subyacentes y se ejecutarán con un rendimiento reducido.

Puedes definir este valor para cada VM, lo que te permite aprovisionar VMs con diferentes ratios de exceso de compromiso de CPU en un solo nodo de único cliente. Los valores más bajos reducen los requisitos de capacidad, pero pueden afectar al rendimiento si se producen picos correlacionados. Para determinar un valor óptimo para el número mínimo de CPUs, debes conocer la utilización de tu carga de trabajo y modificar el valor de forma iterativa.

Al definir este valor, ten en cuenta lo siguiente:

  • Si no defines el valor del número mínimo de CPUs o lo defines igual al número de CPUs del tipo de máquina de la VM, la relación de sobreasignación permitida de la VM será 1, 0. Con una relación de exceso de compromiso de 1.0, solo esta VM puede acceder a todas las CPUs y no hay recursos de CPU disponibles para comprometerlos en exceso en otras VMs.

  • El número mínimo de CPUs no puede ser superior al número de CPUs especificado por el tipo de máquina de la VM.

  • La suma de los valores del número mínimo de CPUs de todas las VMs de un nodo de único propietario no puede superar la capacidad de CPU de ese tipo de nodo de único propietario, que en el tipo de nodo n1-node-96-624 es 96.

El valor del número de CPUs especificado por el tipo de máquina de la VM es un valor estático y representa el número de CPUs que puede alcanzar una VM a partir del número mínimo si esas CPUs están disponibles. Si necesitas un número de CPUs diferente al que ofrecen los tipos de máquinas predefinidas, puedes usar un tipo de máquina personalizada.

Cuestiones importantes

Antes de configurar los niveles de sobreasignación de CPU para las máquinas virtuales, ten en cuenta la importancia de tu carga de trabajo. Las cargas de trabajo menos críticas, como las de desarrollo y prueba, pueden tolerar niveles de sobreasignación más altos. Las cargas de trabajo más críticas, como un sistema de pagos de producción, pueden no tolerar tanto sobrecompromiso o no tolerar ninguno.

También debes tener en cuenta la utilización de tu carga de trabajo. Las cargas de trabajo con un uso de CPU elevado no son buenas candidatas para el exceso de asignación de CPU porque no tendrán ciclos de uso de repuesto para que los utilicen otras VMs con exceso de asignación. Además, las cargas de trabajo con una utilización media de la CPU baja, pero con un pico de utilización bajo, pueden beneficiarse de diferentes tamaños de tipos de máquinas.

El uso de la sobreasignación de CPU beneficia a las cargas de trabajo con picos de actividad no correlacionados que tienen un uso máximo alto y un uso medio bajo, ya que es más probable que estas cargas de trabajo tengan recursos de CPU disponibles para compartir entre las VMs cuando algunas VMs necesiten aumentar su uso. Si todas las VMs de un host superan el límite al mismo tiempo, el host no tendrá suficientes recursos para tus VMs.

Limitaciones

Limitaciones de las cargas de trabajo

El exceso de asignación de CPU es más adecuado para cargas de trabajo que no tengan requisitos de rendimiento estrictos, como las cargas de trabajo de desarrollo y prueba, y las infraestructuras de escritorios virtuales.

Es posible que los niveles altos de sobreasignación de CPU no sean adecuados para cargas de trabajo sensibles al rendimiento.

En el caso de las cargas de trabajo con una utilización media y máxima que sea constantemente baja, Google recomienda ajustar el tamaño. Es decir, en lugar de asignar más CPUs de las disponibles, te recomendamos que modifiques el tamaño de la instancia de VM para que se ajuste a los requisitos de recursos de esa carga de trabajo.

Si tus instancias tienen un exceso de recursos asignados, muévelas a otro nodo de único inquilino.

Limitaciones de los tipos de máquinas

Solo puedes exceder el compromiso de CPUs en los siguientes casos:

  • Máquinas virtuales de la serie N1 aprovisionadas en grupos de nodos basados en el n1-node-96-624 tipo de nodo

  • Máquinas virtuales de la serie N2 aprovisionadas en grupos de nodos basados en los siguientes tipos de nodos:

    • n2-node-80-640
    • n2-node-128-864
  • Serie de máquinas N2D Máquinas virtuales aprovisionadas en grupos de nodos basados en los siguientes tipos de nodos:

    • n2d-node-224-896
    • n2d-node-224-1792
Limitaciones del nivel de sobrecompromiso

Solo puedes configurar la CPU mínima de cada nodo de único cliente en la mitad de las CPUs de la VM, lo que permite una relación de exceso de compromiso máxima de 2,0.

Limitaciones de la programación de VMs

Los grupos de nodos de único cliente basados en plantillas de nodos de único cliente que no estén configurados para el exceso de compromiso de CPU no permiten aprovisionar máquinas virtuales con el exceso de compromiso de CPU habilitado. Es decir, no puedes programar una VM con un número mínimo de CPUs en un grupo de nodos de único cliente que no esté configurado para el exceso de compromiso de CPU.

Cuota

La cuota de CPU se basa en el número de vCPUs del tipo de nodo de único propietario, no en el máximo potencial de vCPUs disponibles para el exceso de compromiso.

Costes

Los nodos de único cliente que tengan seleccionado el exceso de compromiso de CPU en su plantilla de nodo se cobran un 25 % adicional. Este cargo se suma a la prima del 10% por ejecutar máquinas virtuales en nodos de único propietario. La prima por exceso de compromiso de CPU es fija, independientemente del nivel de exceso de compromiso de CPU y del número de máquinas virtuales programadas en el nodo de único propietario.

Los nodos de único cliente ofrecen descuentos por uso comprometido. Los descuentos por uso continuado están disponibles para la prima de los nodos de único propietario y la prima de sobreasignación de CPU.

Para calcular cuánto te costaría ejecutar máquinas virtuales en nodos de único cliente, consulta la calculadora de precios.

Configurar máquinas virtuales de único cliente para el compromiso excesivo

Para configurar las VMs de único cliente de forma que tengan recursos de CPU disponibles para el exceso de compromiso, haz lo siguiente:

  1. Crea una plantilla de nodo de único cliente que tenga habilitado el exceso de compromiso de CPU. Debes habilitar el exceso de compromiso de CPU al crear la plantilla de nodo. No puedes habilitar el exceso de compromiso de CPU después de crear una plantilla de nodo.

  2. Crea un grupo de nodos de único cliente basado en la plantilla de nodo de único cliente que tenga habilitado el exceso de compromiso de CPU.

  3. Crea una VM y haz lo siguiente:

    1. Elige un tipo de máquina para la VM. El número de CPUs del tipo de máquina representa el número máximo de CPUs al que puede llegar la VM desde el número mínimo de CPUs si este es inferior al número de CPUs especificado por el tipo de máquina.

      Puedes elegir un tipo de máquina diferente para cada VM de un nodo de único cliente, siempre que no superes la capacidad de CPU y memoria del nodo de único cliente.

    2. Especifica el número mínimo de CPUs que se asignarán a esa VM o usa un grupo de instancias gestionado para crear varias VMs que tengan el mismo nivel de exceso de compromiso de CPU.

Antes de empezar

  • Crea una plantilla de nodo de único cliente y especifica --cpu-overcommit-type=enabled.
  • Crea un grupo de nodos de único cliente basado en la plantilla de nodo de único cliente con el exceso de compromiso de CPU habilitado.
  • Si aún no lo has hecho, configura la autenticación. La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

    REST

    Para usar las muestras de la API REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.

      Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

Definir el nivel de exceso de compromiso de CPU

En los siguientes procedimientos se muestra cómo crear una VM de único propietario con recursos de CPU disponibles para el sobrecompromiso. Si necesitas modificar el nivel de sobreasignación de CPU de una VM en ejecución, primero debes detenerla.

Consola

En la Google Cloud consola, crea una VM de único cliente en un grupo de nodos de único cliente que se haya creado a partir de una plantilla de nodo de único cliente que tenga habilitado el exceso de compromiso de CPU:

  1. Ve a la página Nodos de único cliente.

    Ir a nodos de único cliente

  2. Haz clic en Grupos de nodos.

  3. Haz clic en el grupo de nodos de único propietario en el que quieras crear una VM.

  4. Haz clic en Crear instancia.

  5. Especifica el nombre, la región y la zona de la VM.

  6. En Configuración de la máquina, elige un tipo de máquina fijo o personalizado con al menos 4 vCPUs.

  7. En Exceso de compromiso de CPU, selecciona Habilitar exceso de compromiso de CPU.

  8. En N.º mínimo de vCPUs asignadas, mueve el control deslizante o introduce manualmente el número de vCPUs para especificar el nivel de exceso de compromiso de las CPUs de esta VM.

  9. Haz clic en Crear para crear una instancia de VM que tenga recursos de CPU disponibles para la asignación excesiva.

gcloud

En el siguiente ejemplo se muestra cómo usar el comando gcloud compute instances create para crear una VM de un solo inquilino en un tipo de máquina predefinido con recursos de CPU disponibles para el sobrecompromiso.

gcloud compute instances create VM_NAME \
    --machine-type=MACHINE_TYPE \
    --min-node-cpu=MIN_VCPUS \
    --node-group=GROUP_NAME

Haz los cambios siguientes:

  • VM_NAME: el nombre de la VM en la que se va a sobreasignar la CPU.

  • MACHINE_TYPE: el tipo de máquina en el que aprovisionar la VM de único propietario. El número de CPUs especificado por el tipo de máquina es el número máximo de CPUs al que puede llegar la VM desde MIN_VCPUS.

  • MIN_VCPUS: número mínimo de vCPUs que se garantiza que estarán disponibles para esta VM.

  • GROUP_NAME: el nombre del grupo de nodos de único cliente en el que se aprovisionará la VM.

Definir el nivel de sobreasignación en un tipo de máquina personalizado

Para crear una VM de un solo inquilino con recursos de CPU disponibles para el sobrecompromiso en un tipo de máquina personalizado, omite la marca --machine-type y, en su lugar, usa las marcas --custom-cpu y --custom-memory para especificar el número de CPUs y la cantidad de memoria (en gigabytes) de la máquina personalizada.

REST

En el siguiente ejemplo se muestra cómo usar el método instances.insert para crear una VM de único inquilino con un tipo de máquina fijo y recursos de CPU disponibles para el sobrecompromiso.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
  "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "scheduling": {
    "minNodeCpus": MIN_VCPUS,
    "nodeAffinities": [
      {
        "key": "compute.googleapis.com/node-group-name",
        "operator": "IN",
        "values": [
          "GROUP_NAME"
        ]
      }
    ]
  },
  ...
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID de tu proyecto.

  • ZONE: la zona de esta solicitud.

  • MACHINE_TYPE_ZONE: la zona que aloja el tipo de máquina.

  • MACHINE_TYPE: el tipo de máquina en el que aprovisionar la VM de único propietario. El número de CPUs especificado por el tipo de máquina es el número máximo de CPUs al que puede llegar la VM desde MIN_VCPUS.

  • VM_NAME: nombre de la VM de único propietario en la que se van a comprometer de forma excesiva las CPUs.

  • MIN_VCPUS: número mínimo de vCPUs que se garantiza que estarán disponibles para esta VM.

  • GROUP_NAME: el nombre del grupo de nodos de único cliente en el que se aprovisionará la VM.

Definir el nivel de sobreasignación en un tipo de máquina personalizado

Para crear una VM de un solo inquilino con recursos de CPU disponibles para el sobrecompromiso en un tipo de máquina personalizado, sustituye el valor del campo machineType por zones/zone/machineTypes/custom-CPUS-MEMORY, y CPUS por el número de CPUs y MEMORY por la cantidad de memoria, en megabytes, del tipo de máquina personalizado.

Actualizar el nivel de exceso de compromiso de CPU

En los siguientes procedimientos se muestra cómo actualizar el nivel de sobreasignación de CPU de una VM de un solo inquilino.

gcloud

  1. Para modificar el nivel de sobreasignación de CPU de una VM que está en ejecución, primero debes detenerla. Para detener una VM, usa el comando gcloud compute instances stop de la siguiente manera:

    gcloud compute instances stop VM_NAME
    

    Sustituye VM_NAME por el nombre de la instancia que quieras detener.

  2. Para actualizar el nivel de compromiso excesivo de CPU de una máquina virtual de único propietario, usa el comando gcloud compute instances set-scheduling de la siguiente manera:

    gcloud compute instances set-scheduling VM_NAME \
      --min-node-cpu=MIN_VCPUS

    Haz los cambios siguientes:

    • VM_NAME: nombre de la VM de único cliente para modificar el nivel de exceso de compromiso de CPU.

    • MIN_VCPUS: número mínimo de vCPUs que se garantiza que estarán disponibles para esta VM.

REST

  1. Para modificar el nivel de sobreasignación de CPU de una VM que está en ejecución, primero debes detenerla. Para detener una VM, crea una solicitud POST con el método instances.stop de la siguiente manera:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto.

    • ZONE: la zona de esta solicitud.

    • VM_NAME: nombre de la VM de único cliente para modificar el nivel de exceso de compromiso de CPU.

  2. Para actualizar el nivel de compromiso excesivo de CPU de una máquina virtual de único propietario, usa el método instances.setScheduling de la siguiente manera:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
    {
    "minNodeCpus":MIN_VCPUS
    }
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID de tu proyecto.

    • ZONE: la zona de esta solicitud.

    • VM_NAME: nombre de la VM de único cliente para modificar el nivel de exceso de compromiso de CPU.

    • MIN_VCPUS: número mínimo de vCPUs que se garantiza que estarán disponibles para esta VM.

Inhabilitar el exceso de compromiso de CPU en máquinas virtuales de único cliente

En los siguientes procedimientos se muestra cómo inhabilitar la asignación excesiva de CPU de una VM de un solo inquilino.

gcloud

En el siguiente ejemplo se muestra cómo usar el comando gcloud compute instances set-scheduling para inhabilitar la asignación excesiva de CPU de una VM de único propietario.

gcloud compute instances set-scheduling VM_NAME \
  --clear-min-node-cpu

Haz los cambios siguientes:

  • VM_NAME: el nombre de la VM de único propietario en la que se va a inhabilitar la asignación excesiva de CPU.

REST

En el siguiente ejemplo se muestra cómo usar el comando instances.setScheduling para inhabilitar la asignación excesiva de CPU de una VM de único propietario.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setScheduling
{
  "minNodeCpus":null
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID de tu proyecto.

  • ZONE: la zona de esta solicitud.

  • VM_NAME: nombre de la VM de único cliente en la que se va a inhabilitar el exceso de compromiso de CPU.

Ver el uso de CPU

Para comprobar el uso de la CPU de las VMs de único cliente en un grupo de nodos de único cliente, haz lo siguiente:

  1. En la Google Cloud consola, ve a la página Nodos de un solo inquilino.

    Ir a nodos de único cliente

  2. Haz clic en Grupos de nodos.

  3. Haz clic en el grupo de nodos de único cliente que contenga el nodo de único cliente que tenga la VM con CPUs con exceso de compromiso.

  4. Haga clic en el nodo de único propietario que tenga la VM con CPUs comprometidas de forma excesiva.

  5. Debajo del nombre del nodo de único propietario, consulta el uso de CPU, el tipo de sobreasignación de CPU y el uso mínimo de CPU.

    • Uso de CPU: muestra el total del número máximo de CPUs de todas las VMs del nodo de un solo inquilino dividido entre el número de CPUs especificado por el tipo de nodo de un solo inquilino.

      El número de CPUs del nodo disponibles para el exceso de compromiso es el numerador menos el denominador, y el nivel de exceso de compromiso es el cociente del numerador y el denominador.

    • Uso mínimo de CPU: muestra la suma del número mínimo de CPUs asignadas a todas las VMs de un nodo de un solo inquilino dividida entre el número de CPUs especificado por el tipo de nodo.

Optimizar los niveles de exceso de compromiso de CPU

Para ayudarte a optimizar la configuración de los niveles de sobreasignación de CPU, Compute Engine proporciona la métrica Tiempo de espera del programador. La métrica Tiempo de espera del programador indica el tiempo de espera agregado de todas las vCPUs de la VM y te ayuda a determinar el impacto del exceso de asignación de CPU en el rendimiento de la VM.

La sensibilidad de la carga de trabajo varía, pero, por lo general, se recomienda usar 20 milisegundos de tiempo de espera del programador acumulado por segundo (20 msps) como tiempo de espera máximo de cada vCPU. Por ejemplo, si una VM tiene 8 vCPUs, el umbral general es de 160 msps, lo que da como resultado un Tiempo de espera del programador medio aceptable de 20 msps por vCPU. Los requisitos de rendimiento de tu carga de trabajo determinarán los umbrales aceptables.

  1. En la Google Cloud consola, ve a la página Monitorización.

    Ir a Monitoring

  2. Haga clic en Explorador de métricas.

  3. En el campo Tipo de recurso, introduce Instancia de VM.

  4. En el campo Métrica, introduzca Tiempo de espera del programador.

  5. También puedes configurar alertas para que se activen cuando se alcancen los umbrales de tiempo de espera de las VMs. Para ello, haz clic en Alertas.

Siguientes pasos