Ajuste de escala automático para un grupo de instancias con métricas personalizadas de Stackdriver

En este instructivo, te mostramos cómo configurar un grupo de instancias administrado de Compute Engine que ajusta la escala de forma automática según el valor de una métrica personalizada de Stackdriver Monitoring. Puedes usar las técnicas mencionadas en este instructivo para implementar tu propia métrica de supervisión a fin de escalar un grupo de instancias administrado.

Objetivos

  • Implementar un grupo de instancias de ajuste de escala automático de Compute Engine.
  • Crear una métrica personalizada para escalar el grupo de instancias
  • Usar Google Cloud Platform Console para visualizar el tamaño del grupo de instancias y la métrica personalizada

Costos

En este instructivo, se usan los componentes facturables de GCP siguientes:

  • Cloud Storage
  • Compute Engine
  • Stackdriver Monitoring

    Monitoring presenta métricas personalizadas que tienen costos asociados. Para obtener más información, consulta los precios de Stackdriver.

Antes de comenzar

  1. Select or create a Google Cloud Platform project.

    Go to the Manage resources page

  2. Asegúrate de tener habilitada la facturación para tu proyecto.

    Aprende a habilitar la facturación

  3. {% dynamic if "no_credentials" in setvar.task_params %} {% dynamic setvar credential_type %}NO_AUTH{% dynamic endsetvar %} {% dynamic if not setvar.redirect_url %} {% dynamic setvar redirect_url %}https://console.cloud.google.com{% dynamic endsetvar %} {% dynamic endif %}{% dynamic endif %} {% dynamic if setvar.in_henhouse_no_auth_whitelist %} {% dynamic if not setvar.credential_type %}{% dynamic setvar credential_type %}NO_AUTH{% dynamic endsetvar %} {% dynamic endif %} {% dynamic elif setvar.in_henhouse_service_account_whitelist %} {% dynamic if not setvar.credential_type %}{% dynamic setvar credential_type %}SERVICE_ACCOUNT{% dynamic endsetvar %} {% dynamic endif %}{% dynamic endif %} {% dynamic if not setvar.service_account_roles and setvar.credential_type == "SERVICE_ACCOUNT" %} {% dynamic setvar service_account_roles %} {% dynamic endsetvar %} {% dynamic endif %} {% dynamic setvar console %} {% dynamic if "no_steps" not in setvar.task_params %}
  4. {% dynamic endif %} {% dynamic if setvar.api_list %} {% dynamic if setvar.in_henhouse_no_auth_whitelist or setvar.in_henhouse_service_account_whitelist %} Configurar un proyecto de GCP Console.

    Configurar un proyecto

    Haz clic para realizar alguna de las siguientes acciones:

    • Crear o seleccionar un proyecto.
    • Habilitar las {% dynamic if setvar.api_names %}{% dynamic print setvar.api_names %}{% dynamic else %}{% dynamic endif %}{% dynamic if "," in setvar.api_list %} API{% dynamic elif "API" in setvar.api_names %}{% dynamic else %} API{% dynamic endif %} necesarias para el proyecto.
    • {% dynamic if setvar.credential_type == 'SERVICE_ACCOUNT' %}
    • Crear una cuenta de servicio.
    • Descargar una clave privada como JSON.
    • {% dynamic endif %}

    Puedes visualizar y administrar estos recursos en GCP Console en cualquier momento.

    {% dynamic else %}{% dynamic if "no_text" not in setvar.task_params %} Habilita las {% dynamic if setvar.api_names %}{% dynamic print setvar.api_names %}{% dynamic else %}{% dynamic endif %}{% dynamic if "," in setvar.api_list %} API{% dynamic elif "API" in setvar.api_names %}{% dynamic else %} API{% dynamic endif %} necesarias. {% dynamic endif %}

    Habilita las {% dynamic if "," in setvar.api_list %} API{% dynamic else %} API{% dynamic endif %}

    {% dynamic endif %}{% dynamic endif %}{% dynamic if "no_steps" not in setvar.task_params %}
  5. {% dynamic endif %}{% dynamic endsetvar %}{% dynamic print setvar.console %}
  6. Si todavía no tienes uno, crea un lugar de trabajo nuevo.

Arquitectura de aplicaciones

En este instructivo, te guiaremos en la creación de una aplicación de ajuste de escala automático de muestra. Esta aplicación usa una secuencia de comandos Node.js instalada en instancias de Compute Engine. Esta secuencia informa un valor numérico a una métrica de Stackdriver (no necesitas saber de Node.js o JavaScript para ejecutar este instructivo). Como respuesta al valor de la métrica, la aplicación aumenta o reduce la escala automática del grupo de instancias de Compute Engine según sea necesario.

La secuencia de comandos Node.js de este instructivo se usa a fin de crear una métrica personalizada con valores a los que el grupo de instancias puede responder. En un entorno de producción, el ajuste de escala automático se basa en una métrica relevante a tu caso práctico.

La arquitectura de la aplicación muestra cómo un grupo de instancias usa una plantilla y la lectura de secuencia de comandos de inicio de Cloud Storage para crear instancias nuevas

La aplicación incluye los componentes siguientes:

  1. Plantilla de instancias de Compute Engine: una plantilla que se usa para crear cada instancia en el grupo
  2. Cloud Storage: un depósito que se usa para alojar la secuencia de comandos de inicio y otros archivos de secuencia de comandos
  3. Secuencia de comandos de inicio de Compute Engine: una secuencia de comandos de inicio que instala los componentes de código necesarios en cada instancia. La secuencia de comandos de inicio se instala y se ejecuta de forma automática cuando se inicia una instancia. Cuando se ejecuta la secuencia de comandos de inicio, esta instala y, luego, inicia código en la instancia que escribe valores en la métrica personalizada de Stackdriver.
  4. Grupo de instancias de Compute Engine: un grupo de instancias que ajusta la escala de forma automática según los valores de la métrica de Stackdriver Monitoring
  5. Instancias de Compute Engine: un número variable de instancias de Compute Engine
  6. Métrica personalizada de Cloud Storage: una métrica personalizada de supervisión que se usa como el valor de entrada para el ajuste de escala automático de un grupo de instancias de Compute Engine

Crea la aplicación

La creación de la aplicación de ajuste de escala automático requiere la descarga de los componentes de código necesarios, la creación de un grupo de instancias administrado y la configuración del ajuste de escala automático para el grupo de instancias administrado.

Sube los archivos de secuencia de comandos a Cloud Storage

Durante el ajuste de escala automático, puede que el grupo de instancias necesite crear instancias de Compute Engine nuevas. Cuando eso sucede, crea instancias mediante la plantilla de instancias. Cada instancia necesita una secuencia de comandos de inicio. Por lo tanto, la plantilla necesita una forma de referirse a la secuencia de comandos de inicio. Compute Engine es compatible con el uso de depósitos de Cloud Storage como fuente para tu secuencia de comandos de inicio.

Sube tu secuencia de comandos de inicio a un depósito de Cloud Storage mediante los pasos siguientes:

  1. Descarga las siguientes secuencias de comandos del repositorio de GitHub para este instructivo:

    • startup.sh
    • writeToCustomMetric.js
    • writeToCustomMetric.sh
    • config.json
    • package.json
  2. En GCP Console, dirígete a la página de Cloud Storage

    Ir a la página de Cloud Storage

  3. Haz clic en Crear depósito y acepta los valores predeterminados para crear un depósito de Cloud Storage nuevo. A fin de obtener más detalles sobre cómo asignar un nombre a un depósito, consulta los lineamientos para asignar nombres a depósitos.

  4. Copia los archivos de secuencia de comandos en tus depósitos de Cloud Storage

    1. Haz clic en el depósito de Cloud Storage que creaste para navegar por los contenidos del depósito
    2. Haz clic en **Upload files** (subir archivos), selecciona todos los archivos de secuencia de comandos que descargaste antes desde GitHub (startup.sh, writeToCustomMetric.js, writeToCustomMetric.sh, config.json, package.json) y súbelos.

    Una vez que se subieron las secuencias de comandos, los archivos aparecen en el depósito de Cloud Storage:

    Lista de los archivos en el depósito del usuario

    La función de cada una de estas secuencias de comandos se explica en la sección próxima.

  5. Toma nota de la ubicación del archivo de Cloud Storage para la secuencia de comandos de inicio, que tendrá el formato siguiente:

    gs://[YOUR_BUCKET_NAME]/startup.sh

Información sobre los componentes de código

  • startup.sh: una secuencia de comandos de shell que instala los componentes necesarios para cada instancia de Compute Engine mientras la instancia se agrega al grupo de instancias administrado
  • writeToCustomMetric.js: un fragmento de Node.js que crea una métrica personalizada de supervisión cuyo valor activa el escalamiento. Para emular los valores de métrica reales, la secuencia de comandos varía el valor en el tiempo. En una implementación de producción, debes reemplazar esa secuencia de comandos por código personalizado que informa qué métrica de supervisión te interesa, como un valor de cola de procesamiento.
  • config.json: un archivo de configuración de Node.js que especifica valores para la métrica personalizada de supervisión y se usa en writeToCustomMetric.js
  • package.json: un archivo de paquete de Node.js que especifica una instalación estándar y las dependencias para writeToCustomMetric.js
  • writeToCustomMetric.sh: una secuencia de comandos de shell que ejecuta de manera continua el programa writeToCustomMetric.js en cada instancia de Compute Engine.

Crea una plantilla de instancias

En esta sección, creas una plantilla para las instancias que se crean en el grupo de instancias con el ajuste de escala automático. Como parte de la plantilla, debes especificar la ubicación (en Cloud Storage) de la secuencia de comandos de inicio que deben ejecutarse cuando se inicia la instancia.

  1. En GCP Console, dirígete a la página Plantillas de instancias para Compute Engine

    Ir a la página de Plantillas de instancias

  2. Haz clic en Crear plantilla de instancias

  3. Otorga el nombre autoscaling-instance01 a la plantilla de instancias y acepta los valores predeterminados para tipo de máquina, disco de arranque, identidad y acceso a la API y firewall

    Imagen de “Crea una plantilla de instancias” que muestra el nombre completo

  4. Haz clic en Administración, seguridad, discos, instancia única y herramientas de redes para expandir las opciones de entrada

  5. En la sección Metadatos de la pestaña Administración, ingresa estos valores y claves de metadatos:

    • startup-script-url = gs://[YOUR_BUCKET_NAME]/startup.sh
    • gcs-bucket = gs://[YOUR_BUCKET_NAME]

    Sección “Metadatos” de la página “Crea una plantilla de instancias” que muestra los pares de clave y valor recomendados completos

  6. Haz clic en Crear.

Crea el grupo de instancias

  1. En GCP Console, dirígete a la página Grupos de instancias

    Ir a la página Grupos de instancias

  2. Haz clic en Crear un grupo de instancias nuevo y otorga el nombre autoscaling-instance-group-1. al grupo de instancias.

  3. En Ubicación, selecciona Zona única

  4. En Zona, selecciona tu zona de preferencia

  5. En Tipo de grupo, selecciona Grupo de instancias administrado

    Página “Crea un grupo de instancias” que muestran la opción “Grupo de instancias administrado” seleccionada

  6. En Plantilla de instancias, selecciona la plantilla de instancias que acabas de crear

  7. Establece el Ajuste de escala automático en Apagado

    Editarás la configuración de ajuste de escala automático luego de crear el grupo de instancias. Deja las otras opciones de configuración en sus valores predeterminados.

    Página “Crea un grupo de instancias” que muestra la opción “Ajuste de escala automático” en “Apagado”

  8. Haz clic en Crear.

Creaste el grupo de instancias con una instancia única y esta debe informar los valores de la métrica personalizada. El paso siguiente es verificar la configuración.

Verifica que se creó el grupo de instancias

  1. En GCP Console, dirígete a la página Grupos de instancias

    Ir a la página Grupos de instancias

  2. Verifica que el ícono de estado verde se muestre en el grupo de instancias llamado autoscaling-instance-group-1 que se creó mediante la plantilla autoscaling-instance01. Esto indica que el grupo de instancias se creó con éxito.

    Lista de los grupos de instancias que muestran un ícono de estado verde para el grupo “autoscaling-instance-group-1”

Verifica que la secuencia de comandos Node.js se ejecuta

La métrica personalizada custom.googleapis.com/appdemo_queue_depth_01 no se crea hasta que la primera instancia del grupo se crea y empieza a informar valores de la métrica personalizada.

Puedes verificar que la secuencia de comandos writeToCustomMetric.js está en ejecución en la primera instancia del grupo de instancias cuando observas si la instancia registra valores de la métrica personalizada.

  1. En GCP Console, dirígete a la página Grupos de instancias

    Ir a la página Grupos de instancias

  2. Haz clic en autoscaling-instance-group-1 para mostrar las instancias en ejecución en el grupo

  3. Haz clic en cualquier instancia (debido a que el ajuste de escala automático no inició instancias adicionales, haz clic en una sola instancia que veas)

    Página que muestra los detalles para el grupo de instancias que muestran una sola instancia iniciada en el grupo de instancias

  4. En la página de detalles de la instancia de VM, en Registros, haz clic en Stackdriver Logging para ver los registros de la instancia de VM

    Detalle de la página de “detalles de la instancia de VM” que muestra el encabezado “Registros” con el vínculo “Stackdriver Logging”

  5. Ingresa nodeapp para filtrar los registros de esta instancia de Compute Engine

    Si la secuencia de comandos de Node.js se ejecuta en la instancia de Compute Engine, se envía una solicitud a la API y, en los registros, aparecen entradas de registro que dicen Finished writing time series data. Por ejemplo, en la captura de pantalla siguiente, aparecen entradas con el texto siguiente en 10:31:05.000 y 10:30:53.000. Si no ves entradas de registro como estas, la secuencia de comandos de Node.js no informa los valores de la métrica personalizada.

    Lista de las entradas de registro

Configura el ajuste de escala automático para el grupo de instancias

Luego de verificar que la métrica personalizada informa datos de la primera instancia con éxito, puedes configurar el grupo de instancias para que ajuste la escala de forma automática según el valor de la métrica personalizada.

  1. En GCP Console, dirígete a la página Grupos de instancias

    Ir a la página Grupos de instancias

  2. Selecciona el grupo autoscaling-instance-group-1 y, luego, haz clic en Editar

    Lista de los grupos de instancias que muestra el grupo “autoscaling-instance-group-1”

  3. Establece Ajuste de escala automático en Activado

    Página “Grupos de instancias” en modo de edición con la opción “Ajuste de escala automático” en “Encendido”

  4. En ajuste de escala automático basado en, selecciona métrica Stackdriver Monitoring

  5. En el campo identificador de métrica, ingresa custom.googleapis.com/appdemo_queue_depth_01.

  6. En el campo Destino, ingresa 150

    Cuando los valores de métrica de supervisión son más altos o bajos que el valor Destino, el escalador automático escala el grupo de instancias administrado y aumenta o reduce el número de instancias. El valor de destino puede ser cualquier valor doble. En este instructivo, se usa 150 porque el valor coincide con los valores que informa la métrica personalizada de supervisión.

  7. En la lista modo de destino, selecciona Indicador

    La opción de configuración Indicador especifica que el escalador automático debe procesar el valor promedio de los datos recopilados en los últimos minutos y compararlos al valor de destino (en cambio, configurar el Modo de destino en DELTA_PER_MINUTE o DELTA_PER_SECOND, ajusta la escala de forma automática según la frecuencia de cambio observada, en vez del valor promedio)

  8. Para cantidad mínima de instancias, ingresa 1 y para cantidad máxima de instancias ingresa 5

    Detalle de la página “Grupos de instancias” en modo de edición que muestra las opciones de configuración recomendadas

  9. Haz clic en Guardar

Mira al grupo de instancias ajustar la escala de forma automática

La secuencia de comandos de Node.js varía los valores de métrica personalizada que informa de cada instancia en el tiempo. Cuando el valor de la métrica aumenta, el grupo de instancias también lo hace mediante el agregado de instancias de Compute Engine. Si el valor se reduce, el grupo de instancias lo detecta y quita instancias para reducirse (como se mencionó antes, la secuencia de comandos emula una métrica real cuyos valores pueden fluctuar).

Para ver cómo el grupo de instancias se escala como respuesta a la métrica, observa el grafo de tamaño con ajuste de escala automático.

  1. En GCP Console, dirígete a la página Grupos de instancias

    Ir a la página Grupos de instancias

  2. Haz clic en el grupo de instancias autoscaling-instance-group-1 en la lista

    En la página, se muestran los detalles sobre el grupo de instancias, incluso el grafo de ajuste de escala automático.

    La página “Grupos de instancias” del grupo seleccionado que muestra un grafo para “tamaño con ajuste de escala automático”

    La cantidad de instancias que se muestra en el grafo de arriba cambia en paralelo con los valores informados por la métrica personalizada en el grafo de abajo.

Limpieza

Una vez que completaste el instructivo, limpia los recursos que creaste en GCP para evitar que se te facture por ellos en el futuro. En las secciones siguientes, se describe cómo borrar esos recursos.

Borra el proyecto

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

Para borrar el proyecto, haz lo siguiente:

  1. In the GCP Console, go to the Projects page.

    Go to the Projects page

  2. In the project list, select the project you want to delete and click Delete delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Borra todos los componentes

  1. Borra el grupo de instancias
  2. Borra la plantilla de instancias
  3. Borra el depósito de Cloud Storage

Pasos siguientes

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…