Introduzione a Spinnaker

1. Panoramica

In questo tutorial, esamineremo Spinnaker, una piattaforma di distribuzione continua open source costruita da Netflix. Possiamo usarlo per distribuire le nostre applicazioni su più provider cloud.

Il sistema è basato su Spring Boot e supporta molti provider di cloud.

Vedremo come funziona e per quali casi possiamo usarlo.

2. Sfondo

Diamo uno sguardo alla storia dello sviluppo del software. In primo luogo, abbiamo avuto il Waterfall con rilasci poco frequenti.

Dopodiché, abbiamo iniziato a lavorare su Agile e abbiamo fornito funzionalità ad ogni sprint. Tuttavia, non abbiamo ancora implementato in produzione ogni sprint. Sfortunatamente, gli utenti non potevano ancora utilizzare le nuove funzionalità, che si trovavano su uno scaffale.

C'erano alcuni motivi per non distribuire regolarmente. Uno di questi era il fatto che i passaggi di distribuzione venivano spesso eseguiti manualmente e soggetti a errori umani.

Inoltre, alcune persone pensavano che distribuire più spesso significasse maggiori rischi per potenziali problemi. Al giorno d'oggi, siamo per lo più d'accordo sul fatto che implementare piccoli cambiamenti significa meno rischi di grandi errori. Anche così, se c'è un errore, possiamo individuarlo rapidamente nella piccola modifica e rilasciare una nuova versione che risolve il problema.

3. Spinnaker

Con Spinnaker, possiamo utilizzare la consegna continua o la distribuzione continua per rilasciare automaticamente la nostra applicazione in produzione. La consegna continua significa che tutto è pronto per una versione di produzione.

Tuttavia, il rilascio viene approvato manualmente prima che l'applicazione venga distribuita in produzione. La distribuzione continua significa che non vi è alcun intervento manuale. Vengono eseguiti tutti i passaggi, inclusa la distribuzione alla produzione. Inseriamo semplicemente il codice dell'applicazione in un sistema di controllo della versione e il gioco è fatto.

Dal push del nostro codice al controllo della versione fino alla distribuzione alla produzione, possiamo eseguire molti passaggi. Possiamo costruire il nostro codice, testare il codice, distribuirlo in un ambiente di test ed eseguire test funzionali. Usiamo una cosiddetta pipeline per configurare tutti questi passaggi.

Con Spinnaker, possiamo creare una pipeline di questo tipo e distribuire la nostra applicazione sulla maggior parte dei fornitori di cloud.

4. Componenti

Spinnaker è costituito fondamentalmente da due parti: uno strato di astrazione in cima a vari fornitori di cloud e uno strumento per la consegna continua.

4.1. Distribuzioni cloud tradizionali

Quando guardiamo ai cloud provider, tutti offrono più o meno gli stessi servizi. Questi servizi includono cose come istanze, serverless e supporto per container.

Tuttavia, la configurazione di questi servizi varia notevolmente tra i fornitori. Ciò rende più difficile passare da un provider all'altro. Ci vuole del tempo per passare a un altro fornitore di servizi cloud e apprendere tutti i dettagli, il che significa che fondamentalmente abbiamo un legame con il fornitore con il nostro fornitore di servizi cloud.

Netflix voleva avere la possibilità di passare facilmente da un fornitore di servizi cloud a un altro, piuttosto che dipendere da uno solo. Ecco perché hanno creato un livello di astrazione sopra i fornitori di cloud.

4.2. Livello di astrazione

Quando usiamo Spinnaker, è lo stesso su tutti i provider di cloud. Possiamo usarlo su Amazon Web Services, Microsoft Azure, Google Cloud Platform, OpenStack, Google App Engine o Kubernetes. Questo ci consente di passare a un altro fornitore di servizi cloud se i prezzi sono più competitivi.

Inoltre, possiamo scegliere di distribuire a più provider contemporaneamente. In questo modo possiamo eseguire la nostra applicazione su due o più provider per una ridondanza extra.

Un altro vantaggio del livello di astrazione è che si concentra sulle applicazioni anziché sulle risorse. Normalmente, i fornitori di servizi cloud ci mostrano le risorse che attualmente utilizziamo. Tuttavia, dobbiamo capire da soli quale applicazione sta utilizzando quali risorse.

Ma le risorse non sono interessanti per noi. Vogliamo eseguire la nostra applicazione senza perdere tempo a tenere traccia delle risorse. Spinnaker ha una vista incentrata sull'applicazione. Quindi, quando lo guardiamo, vediamo prima l'applicazione e poi vediamo le risorse utilizzate dall'applicazione.

4.3. Consegna continua

Oltre al livello di astrazione, Netflix ha creato una piattaforma di distribuzione continua. Questa piattaforma ci consente di distribuire la nostra applicazione su uno o più fornitori di servizi cloud. Assomiglia un po 'a Jenkins, ma offre una migliore integrazione con i fornitori di servizi cloud e richiede meno configurazione.

Possiamo attivare la pipeline di distribuzione continua da Jenkins, un'immagine Docker caricata o un push git, ad esempio. Dopodiché, possiamo semplicemente creare un'immagine o un contenitore con la nostra applicazione e avviarlo in produzione.

Tuttavia, sono disponibili molte altre opzioni come test automatizzati e approvazioni manuali prima della distribuzione in produzione.

Possiamo persino decidere quale strategia vogliamo seguire quando distribuiamo una nuova versione di un'applicazione esistente. Pertanto, è possibile sostituire semplicemente la vecchia versione con la nuova versione. Tuttavia, una strategia migliore sarebbe quella di eseguirli prima fianco a fianco. In questo modo possiamo controllare automaticamente o manualmente se la nuova versione funziona e, in tal caso, rimuovere la vecchia versione.

5. Il modello di cloud Netflix

Ogni applicazione è costituita da uno o più gruppi di server. La stessa versione dell'applicazione viene eseguita su tutte le istanze nel gruppo di server. Viene utilizzata la seguente convenzione di denominazione: ---. Il campo stack (facoltativo) viene utilizzato per specificare se il gruppo di server è per scopi di test, produzione o altri scopi. Il campo dei dettagli opzionale viene utilizzato per informazioni aggiuntive.

Infine, abbiamo il concetto di un cluster che contiene uno o più gruppi di server con lo stesso nome, stack e dettaglio. Tuttavia, la maggior parte delle volte ogni gruppo di server nel cluster esegue una versione diversa dell'applicazione. Le istanze in errore verranno sostituite da una nuova istanza.

È anche possibile aggiungere automaticamente istanze a un gruppo di server per supportare il carico maggiore.

6. Strategia di distribuzione

Quando distribuiamo una nuova versione di un'applicazione, normalmente viene scelta la strategia "rosso / nero". Innanzitutto, un nuovo gruppo di server contenente la nuova versione dell'applicazione viene distribuito al cluster. Dopo la distribuzione dell'applicazione, viene eseguito un controllo per verificare se il nuovo gruppo di server è integro.

Ora il gruppo di server è abilitato e disponibile per i nostri clienti. Infine, il vecchio gruppo di server è disabilitato.

In questo scenario, è facile eseguire il rollback se qualcosa va storto con il nuovo server delle applicazioni. Possiamo semplicemente abilitare nuovamente il gruppo di server con la vecchia versione e renderlo disponibile ai nostri clienti.

7. Perché Spinnaker

Con Spinnaker, possiamo concentrarci sulla nostra applicazione invece che sulle risorse cloud che utilizziamo. Ciò semplifica la distribuzione e la manutenzione delle nostre applicazioni.

Inoltre, Spinnaker rende possibile l'esecuzione su più fornitori di cloud contemporaneamente. Inoltre, possiamo facilmente passare ad altri fornitori di cloud a seconda della loro strategia di prezzo e delle funzionalità disponibili.

8. Conclusione

Spinnaker si basa sull'esperienza di Netflix. Possiamo usare le loro conoscenze e lavorare allo stesso modo con il minimo sforzo. Sulla base di questi strumenti, possiamo facilmente implementare una pipeline di distribuzione per distribuire le nostre applicazioni in produzione.

Per saperne di più su Spinnaker, scarica l'ebook gratuito Continuous Delivery with Spinnaker.