Migrazione della piattaforma
Kubernetes, una parola di moda?
Dopo aver passato anni a esaminare la nostra piattaforma, a studiare le pratiche di Site Reliability Engineering di Google e a sperimentare con i loro strumenti, abbiamo deciso che Kubernetes, basato sull'architettura di distribuzione Borg di Google, fosse il più adatto per la prossima iterazione della nostra piattaforma Lighthouse.
Cos'è Kubernetes?
Kubernetes è una tecnologia open-source basata sull'architettura interna Borg di Google, che l'azienda ha usato internamente per molti anni e che è stata successivamente rilasciata al pubblico. È una tecnologia all'avanguardia che sfrutta la potenza dell'orchestrazione dei container.
L'orchestrazione dei container è un'espressione densa di significato, ma per quanto sia complessa non è complicata da capire.
Iniziamo dai mattoni fondamentali:
Un container contiene solo il software e le dipendenze di cui hai bisogno per far funzionare la tua applicazione. Questo significa che il tuo software gira nel proprio ambiente senza bisogno di scaricare o importare dipendenze esterne. È simile a una macchina virtuale, con la differenza che contiene solo ciò di cui ha bisogno ed è quindi leggero e semplice.
In sostanza, se funziona sul mio computer allora funziona sul tuo computer, dato che il container fornisce in modo indipendente tutto ciò che serve.
Dove eseguiamo i nostri container?
In genere i container hanno bisogno di propri ambienti in cui essere eseguiti. Se stai sviluppando su una singola macchina, di solito l'applicazione girerà in qualcosa come Docker. Se invece vuoi eseguire immagini multiple su più nodi o su un cluster, allora Kubernetes è l'opzione preferita.
Kubernetes è l'opzione più flessibile perché tutta la configurazione (non solo i container), l'ambiente, le configurazioni dell'applicazione, le configurazioni di rete possono essere tutte definite come codice.
Perché è una cosa positiva?
Memorizzando le nostre configurazioni nel codice possiamo avere un'unica fonte di verità e conservare le nostre configurazioni in Git. Questo ci consente di distribuire le modifiche in modo molto più facile, sicuro e con maggiore velocità ed efficienza.
Questo ci offre molti vantaggi:
Scalabilità: possiamo scalare facilmente e il nostro carico può essere distribuito tra molti nodi, il che migliorerà le prestazioni
Disponibilità: questo è legato anche all'affidabilità, perché se un pod o un container non funziona o il nodo muore, ci sono altri container pronti a raccogliere il carico
Semplicità: si integra perfettamente con il nostro modello di lavoro basato su extreme programming e continuous delivery, che si concentra su piccole modifiche iterative
Controllo: avere tutto nel codice rende facile controllare come viene eseguito e dove viene eseguito
Osservabilità: otteniamo più insight su come viene eseguito e dove viene eseguito e, poiché il nostro mestiere è fornire insight, le informazioni che raccogliamo vengono trasferite al nostro prodotto e arricchiscono le informazioni che forniamo
Tecnologia: dato che abbiamo un accesso migliore e tutto è semplificato, sarà più facile per noi integrarci con nuove tecnologie dirompenti come machine learning, big data, AI e qualunque cosa stia per arrivare.
Questo elenco non è esaustivo, ma illustra in piccola parte la potenza che sarà resa disponibile adottando questa tecnologia mentre cresciamo insieme verso un futuro più affidabile.