Exceso de compromiso de CPU en VM de usuario único

El exceso de compromiso de CPU en nodos de usuario único te permite programar instancias que puedan compartir sus ciclos de CPU libres entre sí. Esto te permite aprovisionar en exceso recursos de nodo de usuario único y programar más CPU de VM en un nodo de usuario único de lo que suele estar disponibles. El exceso de compromiso de CPU es valioso, en especial, para cargas de trabajo que no se usan lo suficiente, pero pueden experimentar aumentos de actividad que no estén relacionados del todo. Si optimizas el uso de recursos de CPU, puedes reducir los costos porque usas CPU que, de lo contrario, no estarían disponibles. Además, debido a que puedes aprovisionar más VM en un solo host, podrías reducir los costos de licencias por núcleo y por socket.

Cuando configuras una VM a fin de que se aprovisione en un nodo de usuario único, debes seleccionar un tipo de máquina para la VM. Los tipos de máquina tienen una cantidad fija de CPU y, si una VM no usa todos los recursos de CPU proporcionados por el tipo de máquina, entonces hay recursos de CPU que pueden ponerse a disponibilidad para otras VM que usan un exceso de compromiso de CPU, es decir, el nodo de usuario único puede tener recursos de CPU adicionales disponibles para su uso.

El valor de la cantidad mínima de CPU asignadas a una VM se especifica mientras se crea una VM o después de detenerla, y representa la cantidad mínima de CPU que se garantiza que estarán disponibles para una VM. Este valor se puede establecer para cada VM, lo que te permite aprovisionar VM con diferentes proporciones de exceso de compromiso de CPU en un solo nodo de usuario único. Los valores más bajos reducen los requisitos de capacidad a costa del rendimiento potencial si se producen aumentos de actividad correlacionados. Determinar un valor óptimo para la cantidad mínima de CPU requiere comprender el uso de la carga de trabajo y la modificación iterativa del valor. Cuando configures este valor, ten en cuenta lo siguiente:

  • La proporción de exceso de compromiso se establece en 1.0. si el valor para la cantidad mínima de CPU es igual a la cantidad de CPU en el tipo de máquina de la VM, o si no tiene ningún valor Con una proporción de exceso de compromiso de 1.0, todas las CPU del tipo de máquina son accesibles solo para esta VM, y no hay recursos de CPU disponibles que puedan ser de exceso de compromiso para otras VM.

  • La cantidad mínima de CPU no puede ser mayor que la cantidad de CPU que especifica el tipo de máquina de la VM.

  • La suma de los valores de la cantidad mínima de CPU para todas las VM en un nodo de usuario único no puede exceder la capacidad de CPU de ese tipo de nodo de usuario único, que en el tipo de nodo n1-node-96-624 es 96.

El valor de la cantidad de CPU que especifica el tipo de máquina de la VM es un valor estático y representa la cantidad de CPU que una VM puede alcanzar en un aumento de actividad a partir de una cantidad mínima si esas CPU están disponibles. Si necesitas una cantidad de CPU diferente de la que proporcionan los tipos de máquinas fijos, puedes usar un tipo personalizado de máquina.

A fin de configurar VM de usuario único con el objetivo de que los recursos de CPU estén disponibles para el exceso de compromiso, haz lo siguiente:

  1. Crea una plantilla de nodo de usuario único que tenga habilitado el exceso de compromiso de CPU.

  2. Crea un grupo de nodos de usuario único basado en la plantilla de nodo de usuario único 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. La cantidad de CPU en el tipo de máquina representa la cantidad máxima de CPU que la VM puede alcanzar en un aumento de actividad a partir de la cantidad mínima de CPU si este número es menor que la que especifica el tipo de máquina. Puedes elegir un tipo de máquina diferente para cada VM en un nodo de usuario único, siempre que no excedas la capacidad de CPU y memoria del nodo de usuario único.

    2. Especifica la cantidad mínima de CPU para asignar a esa VM única o usa un grupo de instancias administrado a fin de crear varias VM con el mismo nivel de exceso de compromiso de CPU.

Consideraciones

Antes de configurar los niveles de exceso de compromiso de la CPU para las VM, considera la importancia de tu carga de trabajo. Las cargas de trabajo menos críticas, como las de desarrollo y de prueba, pueden tolerar niveles de exceso de compromiso más altos. Es posible que las cargas de trabajo más críticas, como un sistema de pagos de producción, no toleren tanto exceso de compromiso o ninguno.

También considera el uso de tu carga de trabajo. Las cargas de trabajo con alto uso de CPU no son buenas opciones para el exceso de compromiso de CPU porque no cuentan con ciclos de uso libres con el fin de que otras VM con exceso de compromiso las utilicen. Además, las cargas de trabajo con un uso de CPU de promedio bajo, pero con un uso máximo bajo, podrían beneficiarse de tipos de máquinas de diferentes tamaños.

El uso de exceso de compromiso de CPU beneficia las cargas de trabajo con picos sin correlación que tienen un uso máximo alto y un uso de promedio bajo porque es más probable que estas tengan recursos de CPU disponibles para compartir entre VM cuando algunas VM necesiten aumentar la actividad de su uso. Si todas las VM de un host aumentan su actividad a la vez, el host no tendrá recursos suficientes para las VM.

Limitaciones

  • Si tus instancias tienen demasiado exceso de compromiso, muévelas a otro nodo de usuario único.

  • Solo puedes tener exceso de compromiso de CPU de las VM de tipo de máquina n1 aprovisionadas en grupos de nodos según el tipo de nodo n1-node-96-624.

  • Solo puedes configurar la CPU mínima en cada nodo de usuario único para la mitad de las CPU de la VM, lo que permite una proporción máxima de exceso de compromiso de nodo de usuario único de 2.0.

  • En la actualidad, el exceso de compromiso de CPU es la más adecuada para cargas de trabajo de desarrollo y de prueba, y la infraestructura de escritorio virtual. Además, no se recomienda el uso excesivo de CPU para entornos de base de datos o producción.

  • Los grupos de nodos de usuario único que no están configurados para el exceso de compromiso de CPU no permiten el aprovisionamiento de VM que tengan habilitado el exceso de compromiso de CPU. Por ejemplo, no puedes programar una VM con una cantidad mínima especificada de CPU en un grupo de nodos de usuario único que no está configurado para el exceso de compromiso de CPU.

Precios

En el caso de los nodos de usuario único que tienen un exceso de compromiso de CPU seleccionado en su plantilla de nodos, se cobra un 25% adicional. Este cargo se suma al recargo del 10% por ejecutar VM en nodos de usuario único. El sobrecargo de exceso de compromiso de CPU es fijo, sin importar el nivel de exceso de compromiso de CPU ni cuántas VM estén programadas en el nodo de usuario único.

Los nodos de usuario único ofrecen descuentos por compromiso de uso. Los descuentos por uso continuo están disponibles para el recargo de usuario único y el recargo de exceso de compromiso de CPU.

Para estimar el costo de ejecutar VM en nodos de usuario único, consulta la calculadora de precios.

Antes de comenzar

Configura el nivel de exceso de compromiso de CPU

En los siguientes procedimientos, se muestra cómo crear una VM de usuario único con recursos de CPU disponibles para el exceso de compromiso. Si necesitas modificar el nivel de exceso de compromiso de CPU de una VM que se está ejecutando, primero debes detener la VM.

Console

En Google Cloud Console, crea una VM de usuario único en un grupo de nodos de usuario único creado a partir de una plantilla de nodo de usuario único que tenga habilitado el exceso de compromiso de CPU:

  1. Ve a la página Grupos de nodos de usuario único.

    Ir a la página Grupos de nodos de usuario único

  2. Haz clic en el grupo de nodos de usuario único en el que deseas crear una VM.

  3. Haz clic en Crear instancia.

  4. Especifica el Nombre, la Región y la Zona para la VM.

  5. En Configuración de la máquina, elige un Tipo de máquina fijo o personalizado con al menos 4 CPU virtuales.

  6. En Exceso de compromiso de CPU, selecciona Habilitar el exceso de compromiso de CPU.

  7. En Cantidad mínima de CPU virtuales asignadas, ajusta el control deslizante o ingresa de forma manual la cantidad de CPU virtuales para especificar el nivel de exceso de compromiso de las CPU en esta VM.

  8. Haz clic en Crear a fin de crear una instancia de VM que tenga recursos de CPU disponibles para el exceso de compromiso.

gcloud

En el siguiente ejemplo, se muestra cómo usar el comando gcloud compute instances create a fin de crear una VM de usuario único en un tipo de máquina fijo con recursos de CPU disponibles para el exceso de compromiso.

A fin de crear una VM de usuario único con recursos de CPU disponibles para un exceso de compromiso en un tipo personalizado de máquina, omite la marca --machine-type y, en su lugar, usa las marcas --custom-cpu y --custom-memory a fin de especificar la cantidad de CPU y de memoria, en gigabytes, para la máquina personalizada.

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

Reemplaza lo siguiente:

  • VM_NAME: es el nombre de la VM que tendrá un exceso de compromiso de CPU.

  • MACHINE_TYPE: es el tipo de máquina que aprovisionará la VM de usuario único. La cantidad de CPU que especifica el tipo de máquina es la cantidad máxima de CPU que puede alcanzar la VM en un aumento de actividad desde MIN_VCPUS.

  • MIN_VCPUS: es la cantidad mínima de CPU virtuales garantizadas para esta VM.

  • GROUP_NAME: es el nombre del grupo de nodos de usuario único para aprovisionar la VM

API

En el siguiente ejemplo, se muestra cómo usar el comando instances.insert a fin de crear una VM de usuario único en un tipo de máquina fijo con recursos de CPU disponibles para el exceso de compromiso.

A fin de crear una VM de usuario único con recursos de CPU disponibles para un exceso de compromiso en un tipo personalizado de máquina, reemplaza el valor del campo machineType por zones/zone/machineTypes/custom-CPUS-MEMORY, CPUS por la cantidad de CPU, y MEMORY con la cantidad de memoria, en megabytes, para el tipo personalizado de máquina.

POST https://www.googleapis.com/compute/beta/projects/PROJECT_ID/zones/PROJECT_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"
        ]
      }
    ]
  },
  "disks": [
    {
      "boot": true,
      "initializeParams": {
        "sourceImage": "/projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
      }
    }
  ],
  "networkInterfaces": [
    {
      "network": "/global/networks/NETWORK",
    }
  ]
}

Reemplaza lo siguiente:

  • PROJECT_ID: es el ID del proyecto.

  • PROJECT_ZONE: es la zona en la que se aloja tu proyecto.

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

  • MACHINE_TYPE: es el tipo de máquina que aprovisionará la VM de usuario único. La cantidad de CPU que especifica el tipo de máquina es la cantidad máxima de CPU que puede alcanzar la VM en un aumento de actividad desde MIN_VCPUS.

  • VM_NAME: es el nombre de la VM de usuario único en la que habrá un exceso de compromiso de CPU.

  • MIN_VCPUS: es la cantidad mínima de CPU virtuales garantizadas para esta VM.

  • GROUP_NAME: es el nombre del grupo de nodos de usuario único para aprovisionar la VM

  • IMAGE_PROJECT: es el nombre del proyecto de imagen que contiene la familia de imágenes.

  • IMAGE_FAMILY: es el nombre de la familia de imágenes desde la que se copia una imagen a tu VM.

  • NETWORK: es el nombre de la red, por ejemplo, default. Según tu configuración es posible que debas agregar un campo subnetwork.

Visualiza el uso de CPU

Verifica el uso de CPU de las VM de usuario único en un grupo de nodos de usuario único mediante el siguiente procedimiento.

Console

  1. En Google Cloud Console, ve a la página Grupos de nodos de usuario único.

    Ir a la página Grupos de nodos de usuario único

  2. Haz clic en el grupo de nodos de usuario único que contiene el nodo de usuario único que tiene la VM con exceso de compromiso de CPU.

  3. Haz clic en el nodo de usuario único que tiene la VM con exceso de compromiso de CPU.

  4. En el nombre del nodo de usuario único, consulta el Uso de CPU, el Tipo de exceso de compromiso de CPU y la Utilización mínima de CPU.

    • El Uso de CPU muestra la cantidad máxima de CPU para todas las VM en este nodo de usuario único dividida por la cantidad de CPU especificadas por el tipo de nodo de usuario único. La cantidad de CPU en el nodo disponible 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.

    • La Utilización mínima de CPU muestra la suma de la cantidad mínima de CPU asignadas para todas las VM en un nodo de usuario único dividida por la cantidad de CPU que especifica el tipo de nodo.

Solución de problemas de exceso de compromiso de CPU

  • En el siguiente error, se indica que no se especificó ningún grupo de nodos de usuario único cuando estableciste el valor para la cantidad mínima de CPU. Para resolver esto especifica un grupo de nodos de usuario único cuando configures el valor de la cantidad mínima de CPU:

    Invalid value for field 'resource.scheduling.minNodeCpus': '2'. Node virtual
    CPU count may only be specified for sole-tenant instances.
    
  • En los siguientes errores, se indica que la cantidad mínima de CPU para todas las VM de usuario único en un nodo es mayor que la capacidad de CPU del tipo de nodo. A fin de resolver esto, especifica valores para la cantidad mínima de CPU de cada VM, de modo que el total de todas las VM no exceda la cantidad de CPU que especifica el tipo de nodo de usuario único.

    Node virtual CPU count must not be greater than the guest virtual CPU count.
    
    No feasible nodes found for the instance given its node affinities and other
    constraints.
    
  • En el siguiente error, se indica que la cantidad total de CPU que especifican los tipos de máquina para todas las VM en un nodo es más del doble de la cantidad mínima de CPU especificada para todas las VM en un nodo. A fin de resolver esto, aumenta el valor de la cantidad mínima de CPU para las VM en este nodo hasta que la cantidad mínima total de CPU sea mayor o igual que la mitad de la cantidad total de CPU que determinan los tipos de máquina.

    Guest virtual CPU count must not be greater than [~2.0] times the node
    virtual CPU count.
    
  • En el siguiente error, se indica que el valor de la cantidad mínima de CPU no es un número par mayor o igual a 2. A fin de resolver esto, especifica un valor para la cantidad mínima de CPU que sea un número par mayor o igual a 2.

    Invalid value for field 'resource.scheduling.minNodeCpus': '3'. Node virtual
    CPU count must be even.
    

Próximos pasos