Validazione del codice dell'applicazione e della latenza con Iter8

Iter8 è lo strumento di release engineering per Kubernetes che consente la convalida degli obiettivi di livello di servizio (SLO), i test A/B e gli aggiornamenti progressivi per le applicazioni Kubernetes. Ora è possibile utilizzare Iter8 per verificare che l'applicazione IBM Cloud® Code Engine venga eseguita con una bassa latenza e sia priva di errori. Per saperne di più su Iter8 in 5 minuti.

Prima di iniziare

Trovare il sito URL della vostra applicazione Code Engine

Per trovare il sito URL dell'applicazione utilizzando la CLI, eseguire il comando ibmcloud ce application get e specificare l'opzione -output url. Ad esempio, trovare il sito URL per un'applicazione chiamata myapp.

ibmcloud ce application get -n myapp -output url

Output di esempio

https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud

Per trovare il sito URL di un'applicazione utilizzando la console Code Engine, andare alla pagina Panoramica dell'applicazione. Se l'applicazione è nello stato Ready, è possibile aprirla in una pagina web facendo clic su Apri applicazione URL. Salva il sito URL.

Esecuzione del contenitore Iter8 Docker

Iter8 è fornito come contenitore Docker che include tutte le dipendenze necessarie per l'esecuzione di Iter8. Il comando seguente avvia il contenitore Docker.

docker run --name ind --privileged -d iter8/ind:0.7.4

Inizializzazione del contenitore Iter8 Docker

Quando si inizializza questo contenitore Docker, il comando avvia un cluster locale Kubernetes all'interno del contenitore Docker e quindi installa Iter8 all'interno del contenitore.

docker exec ind ./iter8.sh

Cercate l'uscita che dice All systems go....

Convalida degli obiettivi del livello di servizio (SLO)

Verificate che l'applicazione Code Engine soddisfi gli obiettivi di latenza e di livello di servizio (SLO) basati sugli errori che avete determinato per la vostra applicazione. Il comando seguente genera richieste per l'applicazione Code Engine, ne costruisce il profilo di latenza e di errore e verifica che l'applicazione soddisfi gli SLO specificati.

Sostituire <URL-OF-YOUR-APPLICATION> con il URL ottenuto al punto 1. È inoltre possibile impostare limiti personalizzati per le tre metriche utilizzate per valutare l'applicazione.Nell'esempio seguente, si sta verificando che la latenza media dell'applicazione sia inferiore a 200.0 ms, che il tasso di errore sia inferiore all'1% (si può impostare 0.0 ) e che la latenza di coda del 95th percentile sia inferiore a 500.0 ms.

docker exec ind helm install \
--set URL=<URL-OF-YOUR-APPLICATION> \
--set LimitMeanLatency=200.0 \
--set LimitErrorRate=0.01 \
--set Limit95thPercentileLatency=500.0 \
codeengine /iter8/helm/conformance

Output di esempio

NAME: codeengine
LAST DEPLOYED: Wed Jun 30 01:10:14 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

Ottenere i risultati della validazione degli SLO

Il comando seguente mostra il risultato della convalida SLO per l'applicazione Code Engine.

docker exec ind \
bash -c "kubectl get experiment my-experiment -o yaml | iter8ctl describe -f -"

Output di esempio

Se non viene visualizzato un output simile a quello dell'esempio seguente, potrebbe essere necessario attendere ancora un po' e riprovare il comando precedente. La sezione obiettivi indica se l'applicazione soddisfa gli SLO specificati. La sezione metriche riporta le metriche osservate per l'applicazione da Iter8.

****** Overview ******
Experiment name: my-experiment
Experiment namespace: default
Target: my-app
Testing pattern: Conformance
Deployment pattern: Progressive

****** Progress Summary ******
Experiment stage: Completed
Number of completed iterations: 1

****** Winner Assessment ******
> If the version being validated; i.e., the baseline version, satisfies the experiment objectives, it is the winner.
> Otherwise, there is no winner.
Winning version: my-app

****** Objective Assessment ******
> Identifies whether or not the experiment objectives are satisfied by the most recently observed metrics values for each version.
+--------------------------------------+--------+
|              OBJECTIVE               | MY-APP |
+--------------------------------------+--------+
| iter8-system/mean-latency <=         | true   |
|                              200.000 |        |
+--------------------------------------+--------+
| iter8-system/error-rate <=           | true   |
|                                0.010 |        |
+--------------------------------------+--------+
| iter8-system/latency-95th-percentile | true   |
| <= 500.000                           |        |
+--------------------------------------+--------+

****** Metrics Assessment ******
> Most recently read values of experiment metrics for each version.
+--------------------------------------+--------+
|                METRIC                | MY-APP |
+--------------------------------------+--------+
| iter8-system/request-count           | 40.000 |
+--------------------------------------+--------+
| iter8-system/error-count             |  0.000 |
+--------------------------------------+--------+
| iter8-system/mean-latency            | 66.060 |
+--------------------------------------+--------+
| iter8-system/error-rate              |  0.000 |
+--------------------------------------+--------+
| iter8-system/latency-95th-percentile | 73.055 |
+--------------------------------------+--------+

Annullamento di una revisione

Se l'ultima revisione non soddisfa gli obiettivi dell'esperimento specificati, si può eliminare l'ultima revisione e consentire a Code Engine di tornare automaticamente alla revisione stabile precedente.

Per eliminare l'ultima revisione con la CLI, eseguire il comando ibmcloud ce revision delete il comando.

Per eliminare l'ultima revisione dalla console, accedere alla console Code Engine. Selezionare Progetti-> il proprio progetto -> Applicazioni-> la propria applicazione -> Revisioni e traffico. Eliminare la revisione non riuscita. Code Engine esegue automaticamente il rollback alla revisione stabile precedente.

Rimozione del contenitore Iter8

È possibile ripulire il sistema locale rimuovendo il contenitore Iter8-in-Docker e l'immagine, se non sono più necessari.

docker rm -f -v ind

I prossimi passi per Iter8

Questa esercitazione si basa sul progetto open source Iter8. Per ulteriori informazioni, consultare la pagina del progetto open source Iter8.