Programa un experimento

En esta página, se describe cómo programar experimentos en las pruebas de inyección de fallas y cómo usar servicios de programación externos para automatizar las pruebas de resiliencia.

Si programas experimentos, puedes automatizar tus procesos de prueba y ejecutar experimentos durante períodos que minimicen el impacto en tus usuarios, como los siguientes:

  • Horas de menor demanda o períodos de mantenimiento planificados
  • Días de juego o simulacros de ingeniería de caos programados con regularidad
  • Canalizaciones de pruebas automatizadas (CI/CD) para verificar la resistencia antes de la implementación

La programación de experimentos te ayuda a establecer una validación continua de la tolerancia a fallas de tus sistemas sin necesidad de intervención manual para cada ejecución.

Cómo funcionan los experimentos programados

Fault Injection Testing no incluye un servicio de programación integrado. En cambio, debes programar experimentos integrando Fault Injection Testing con un servicio de programación externo, como Cloud Scheduler.

Para programar un experimento, debes configurar el programador externo para que llame a la API de Fault Injection Testing o ejecute un comando gcloud en un momento específico. Para admitir esta integración, Fault Injection Testing proporciona el parámetro startOnCreateEnabled. Cuando se configura como true, este parámetro le indica al sistema que inicie automáticamente el experimento inmediatamente después de que se cree.

Selecciona los objetivos para los experimentos programados

Los recursos objetivo de un experimento programado se definen dentro de la plantilla del experimento, no dentro de la configuración de programación en sí. A continuación, se explica cómo las pruebas de inserción de fallas controlan los objetivos:

  • Cuando creas una plantilla de experimento, defines el tipo de falla y los criterios de selección para tus recursos de destino. Entre los ejemplos de recursos, se incluyen instancias de VM específicas, recursos con etiquetas coincidentes o recursos en una zona específica.
  • Cuando configuras tu programador externo, la carga útil de la API hace referencia a tu plantilla de experimento.
  • A la hora programada, el programador externo activa la creación del experimento. Luego, Fault Injection Testing evalúa las reglas de selección de destino en la plantilla en ese momento para determinar qué recursos se ven afectados.

Si tu plantilla segmenta las VMs según una etiqueta, el experimento programado afectará a todas las VMs que tengan esa etiqueta en el momento exacto en que se ejecute el experimento.

Cómo configurar un experimento programado

Antes de continuar, asegúrate de tener el rol roles/faulttesting.operator o roles/faulttesting.admin.

Configura un programa con la consola Google Cloud y Cloud Scheduler

Aunque no puedes crear programaciones directamente en la consola de Fault Injection Testing, esta proporciona los parámetros que necesitas para configurar un trabajo en Cloud Scheduler.

  1. En la consola de Google Cloud , navega a la página Plantillas de experimentos.
  2. Selecciona una plantilla para ver sus detalles.
  3. En la página de detalles, ten en cuenta lo siguiente:

    • La carga útil de JSON, que incluye "startOnCreateEnabled": true.
    • Es la URL del extremo de API de REST para crear un experimento.

    Las usarás en Cloud Scheduler.

  4. En la consola Google Cloud , navega a la página Cloud Scheduler y haz clic en Crear trabajo.

  5. Define el programa y la zona horaria de tu trabajo.

  6. En Tipo de destino, selecciona HTTP.

  7. Establece la URL en la URL del extremo de API de REST de la página de detalles de Plantillas de experimentos.

  8. Establece el método HTTP en POST.

  9. En el campo Cuerpo, ingresa la carga útil de JSON:

    {
      "experimentTemplate": "projects/PROJECT_ID/locations/REGION/experimentTemplates/TEMPLATE_ID",
      "startOnCreateEnabled": true,
      "description": "DESCRIPTION"
    }
    
  10. Configura la autenticación para el trabajo. Consulta las prácticas recomendadas para obtener recomendaciones sobre las cuentas de servicio.

  11. Haz clic en Crear.

Configura una programación con Google Cloud CLI

Si usas secuencias de comandos o herramientas que ejecutan comandos de shell, puedes programar experimentos configurando Cloud Scheduler o tu propio programador para que ejecute el comando gcloud alpha fault-testing experiments create con la marca --start-on-create-enabled.

Ejecuta el siguiente comando para crear y, luego, iniciar de inmediato una instancia del experimento:

gcloud alpha fault-testing experiments create EXPERIMENT_ID \
    --experiment-template=TEMPLATE_ID \
    --location=REGION \
    --start-on-create-enabled \
    [--description="DESCRIPTION"] \
    [--project=PROJECT_ID]
  • EXPERIMENT_ID: Es un identificador único de la ejecución del experimento. Dado que este comando está automatizado, tu secuencia de comandos debe generar un ID único para cada ejecución. Por ejemplo, puedes agregar una marca de tiempo:scheduled-exp-$(date +%s).
  • TEMPLATE_ID: Es el ID de la plantilla de experimento preconfigurada.
  • REGION: Es la región Google Cloud en la que se ejecuta el experimento.
  • --start-on-create-enabled: Esta marca indica a Fault Injection Testing que inicie el experimento inmediatamente después de su creación.
  • DESCRIPTION: (Opcional) Es una descripción de la ejecución del experimento.
  • PROJECT_ID: (Opcional) ID del proyecto de Google Cloud.

Administra las ejecuciones de experimentos

Cada ejecución programada crea una instancia de experimento nueva y distinta. Puedes administrar estas instancias con los siguientes comandos:

  • Para enumerar todas las ejecuciones de experimentos, haz lo siguiente:

    gcloud alpha fault-testing experiments list --location=REGION
    
  • Para ver los detalles de una ejecución específica, sigue estos pasos:

    gcloud alpha fault-testing experiments describe EXPERIMENT_ID --location=REGION
    
  • Para detener un experimento en ejecución antes de tiempo, sigue estos pasos:

    gcloud alpha fault-testing experiments stop EXPERIMENT_ID --location=REGION
    

Prácticas recomendadas

Cuando programes experimentos, ten en cuenta las siguientes prácticas recomendadas:

  • Usa una cuenta de servicio dedicada. Cuando configures tu programador (como Cloud Scheduler), asócialo a una cuenta de servicio dedicada. Otorga a esta cuenta de servicio solo los permisos mínimos necesarios para administrar experimentos, como roles/faulttesting.operator o roles/faulttesting.admin en tu proyecto.
  • Genera IDs de experimento únicos. Cuando activas experimentos con secuencias de comandos, asegúrate de que tu secuencia de comandos genere un ID de experimento único para cada ejecución y, así, evitar colisiones de nombres de recursos.
  • Usa nombres o descripciones descriptivos. Cada ejecución programada crea una instancia de experimento nueva. No reinicia ni reemplaza experimentos anteriores. Usa nombres o descripciones descriptivos para ayudar a rastrear las ejecuciones hasta su programa.
  • Supervisa las fallas de programación. Los activadores externos pueden fallar debido a problemas de red, vencimiento de credenciales o cuotas de API. Configura la supervisión y las alertas en tus trabajos del programador para que te notifiquen si un trabajo no se ejecuta o recibe una respuesta de error.
  • Coordina con los períodos de exclusión. Verifica que tus experimentos programados no se superpongan con las ventanas de exclusión activas. Si se activa un experimento programado durante un período de exclusión, las pruebas de inyección de fallas bloquean la ejecución y el experimento no se inicia.