Questa pagina descrive come pianificare gli esperimenti in Fault Injection Testing e come utilizzare i servizi di pianificazione esterni per automatizzare i test di resilienza.
Pianificando gli esperimenti, puoi automatizzare i processi di test ed eseguirli durante i periodi che riducono al minimo l'impatto sugli utenti, ad esempio:
- Orari non di punta o finestre di manutenzione pianificate.
- Giorni di gioco o esercitazioni di ingegneria del caos pianificati regolarmente.
- Pipeline di test automatizzate (CI/CD) per verificare la resilienza prima del deployment.
La pianificazione degli esperimenti ti aiuta a stabilire una convalida continua della tolleranza agli errori dei tuoi sistemi senza richiedere interventi manuali per ogni esecuzione.
Come funzionano gli esperimenti pianificati
Fault Injection Testing non include un servizio di pianificazione integrato. Al contrario, puoi pianificare gli esperimenti integrando Fault Injection Testing con un servizio di pianificazione esterno, come Cloud Scheduler.
Per pianificare un esperimento, configura lo scheduler esterno in modo che chiami l'API Fault Injection Testing o esegua un comando gcloud in un momento specifico. Per supportare questa integrazione, Fault Injection Testing fornisce il parametro startOnCreateEnabled. Se impostato su true, questo parametro indica al sistema di avviare automaticamente l'esperimento immediatamente dopo la sua creazione.
Selezione delle destinazioni per gli esperimenti pianificati
Le risorse di destinazione per un esperimento pianificato sono definite all'interno del template dell'esperimento, non all'interno della configurazione di pianificazione stessa. Ecco come Fault Injection Testing gestisce le destinazioni:
- Quando crei un template di esperimento, definisci il tipo di errore e i criteri di selezione per le risorse di destinazione. Esempi di risorse includono istanze VM specifiche, risorse con tag corrispondenti o risorse in una zona specifica.
- Quando configuri lo scheduler esterno, il payload dell'API fa riferimento al template dell'esperimento.
- All'ora pianificata, lo scheduler esterno attiva la creazione dell'esperimento. Fault Injection Testing valuta quindi le regole di selezione della destinazione nel template in quel momento per determinare quali risorse sono interessate.
Se il template ha come target le VM in base a un tag, l'esperimento pianificato influisce su tutte le VM che hanno quel tag esattamente nel momento in cui viene eseguito l'esperimento.
Configurare un esperimento pianificato
Prima di procedere, assicurati di avere il ruolo roles/faulttesting.operator o roles/faulttesting.admin.
Configurare una pianificazione utilizzando la Google Cloud console e Cloud Scheduler
Sebbene non sia possibile creare pianificazioni direttamente nella console Fault Injection Testing, la console fornisce i parametri necessari per configurare un job in Cloud Scheduler.
- Nella Google Cloud console, vai alla pagina Template di esperimento.
- Seleziona un template per visualizzarne i dettagli.
Nella pagina dei dettagli, prendi nota di quanto segue:
- Il payload JSON, che include
"startOnCreateEnabled": true. - L'URL dell'endpoint API REST per la creazione di un esperimento.
Li utilizzerai in Cloud Scheduler.
- Il payload JSON, che include
Nella Google Cloud console, vai alla pagina Cloud Scheduler e fai clic su Crea job.
Definisci la pianificazione e il fuso orario del job.
In Tipo di destinazione, seleziona HTTP.
Imposta l'URL sull'URL dell'endpoint API REST dalla pagina dei dettagli Template di esperimento.
Imposta il Metodo HTTP su POST.
Nel campo Corpo, inserisci il payload JSON:
{ "experimentTemplate": "projects/PROJECT_ID/locations/REGION/experimentTemplates/TEMPLATE_ID", "startOnCreateEnabled": true, "description": "DESCRIPTION" }Configura l'autenticazione per il job. Consulta le best practice per i consigli sui account di servizio.
Fai clic su Crea.
Configurare una pianificazione utilizzando Google Cloud CLI
Se utilizzi script o strumenti che eseguono comandi della shell, puoi pianificare gli esperimenti configurando Cloud Scheduler o il tuo scheduler per eseguire il comando gcloud alpha fault-testing experiments create con il flag --start-on-create-enabled.
Esegui il comando seguente per creare e avviare immediatamente un'istanza di esperimento:
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: un identificatore univoco per l'esecuzione dell'esperimento. Poiché questo comando è automatizzato, lo script deve generare un ID univoco per ogni esecuzione. Ad esempio, puoi aggiungere un timestamp:scheduled-exp-$(date +%s).TEMPLATE_ID: l'ID del template di esperimento preconfigurato.REGION: La Google Cloud regione in cui viene eseguito l'esperimento.--start-on-create-enabled: questo flag indica a Fault Injection Testing di avviare l'esperimento immediatamente dopo la creazione.DESCRIPTION: (facoltativo) una descrizione dell'esecuzione dell'esperimento.PROJECT_ID: (facoltativo) l'ID del progetto. Google Cloud
Gestire le esecuzioni degli esperimenti
Ogni esecuzione pianificata crea una nuova istanza di esperimento distinta. Puoi gestire queste istanze utilizzando i seguenti comandi:
Per elencare tutte le esecuzioni degli esperimenti:
gcloud alpha fault-testing experiments list --location=REGIONPer visualizzare i dettagli di un'esecuzione specifica:
gcloud alpha fault-testing experiments describe EXPERIMENT_ID --location=REGIONPer interrompere un esperimento in esecuzione in anticipo:
gcloud alpha fault-testing experiments stop EXPERIMENT_ID --location=REGION
Best practice
Quando pianifichi gli esperimenti, tieni presente le seguenti best practice:
- Utilizza un account di servizio dedicato. Quando configuri lo scheduler (ad esempio Cloud Scheduler), associa un account di servizio dedicato. Concedi a questo account di servizio solo le autorizzazioni minime necessarie per gestire gli esperimenti, ad esempio
roles/faulttesting.operatororoles/faulttesting.adminnel tuo progetto. - Genera ID esperimento univoci. Quando attivi gli esperimenti utilizzando gli script, assicurati che lo script generi un ID esperimento univoco per ogni esecuzione per evitare conflitti con i nomi delle risorse.
- Utilizza nomi o descrizioni descrittivi. Ogni esecuzione pianificata crea una nuova istanza di esperimento. Non riavvia o sovrascrive gli esperimenti precedenti. Utilizza nomi o descrizioni descrittivi per aiutarti a risalire alle esecuzioni in base alla pianificazione.
- Monitora gli errori di pianificazione. I trigger esterni possono non riuscire a causa di problemi di rete, scadenza delle credenziali o quote API. Configura il monitoraggio e gli avvisi sui job dello scheduler per ricevere una notifica se un job non viene eseguito o riceve una risposta di errore.
- Coordinati con le finestre di esclusione. Verifica che gli esperimenti pianificati non si sovrappongano alle finestre di esclusione attive. Se un esperimento pianificato viene attivato durante una finestra di esclusione, Fault Injection Testing blocca l'esecuzione e l'esperimento non viene avviato.