Павел
Livello 11
Chi sono Docker, Kubernetes, OpenShift e come sono correlati tra loro?
Tutto inizia con l'imballaggio. Nello sviluppo industriale esiste la necessità di “impacchettare” l'applicazione assemblata, ad esempio, in modo che possa essere trasferita al server su cui funzionerà, nella forma in cui lo sviluppatore l'ha assemblata sul suo computer, tale “impacchettamento” dovrebbe servire come una sorta di protezione. Ciò elimina le sorprese, ad esempio quando un'applicazione funziona durante un test, ma si rompe quando viene trasferita in produzione. Inoltre, il "packaging" isola un'applicazione da un'altra, situata sullo stesso server, tale isolamento consente a un'applicazione di non interferire con il lavoro di un'altra (ad esempio: un'applicazione non sarà in grado di occupare tutta la RAM del server, lasciando il seconda applicazione al suo destino). I vantaggi del "packaging" con un'architettura a microservizi sono particolarmente evidenti, e questo è comprensibile; ci sono molti microservizi, molte piccole applicazioni che devono comunicare tra loro, ma allo stesso tempo non dovrebbero interferire tra loro. Un esempio è una cassettiera (server), in cui ci sono molti cassetti diversi, e possiamo facilmente spostare calzini diversi da un cassetto all'altro, e allo stesso tempo non si mescoleranno tra loro o con le mutandine. Il packaging è creato da strumenti di virtualizzazione. Un tempo le macchine virtuali (VM) venivano utilizzate come “packaging”. Gli anziani ricorderanno come hanno distribuito Windows XP su Vista in una macchina virtuale. Ora le VM per il packaging delle applicazioni appartengono al passato. I container hanno conquistato il mondo. Perché sono: più leggeri, più produttivi e più sicuri. Più nel dettaglio: in cosa differisce un container da una macchina virtuale? È necessario ricordare alcuni vantaggi dei contenitori: • sono di dimensioni più ridotte (occupano meno memoria sul server); • avere accesso alle risorse del server condiviso (RAM, tempo di calcolo del processore); • avere una migliore portabilità verso altri ambienti (dal test all'industriale); • fornire una maggiore velocità di lancio (poiché il contenitore è leggero, si lancia più velocemente). Docker è la madre dei container. Quando dicono container, intendono Docker. Docker è un software per automatizzare la distribuzione e la gestione di applicazioni in ambienti containerizzati. Usando degli esempi, Docker è un incrocio tra un designer online e una stampante 3D con una gru. Cioè, può prima progettare un modello (immagine) per un contenitore, stampare (creare) il contenitore in base a determinate condizioni (immagine), quindi spostarlo dove necessario. Al posto delle leve vengono utilizzati i Dockerfile. Il processo di gestione è semplice: scrivi file, comandi, li esegui e vedi cosa succede. Prima conoscenza con Docker Docker Compose: Docker aggiornato Consideriamo ora uno scenario in cui più contenitori devono essere in esecuzione in una posizione. L'utilità utilizzata a questo scopo è Docker Compose. Docker Compose è uno strumento incluso con Docker. È progettato per risolvere i problemi relativi alla distribuzione del progetto. Differenza tra Docker e Docker Compose: Docker viene utilizzato per gestire singoli contenitori. Docker Compose viene utilizzato per gestire più contenitori contemporaneamente. Questo strumento offre le stesse funzionalità di Docker, ma consente di lavorare con strutture più complesse. Scenario tipico per l'utilizzo di Docker Compose: immagina di essere uno sviluppatore di un progetto web. Questo progetto include due siti web. Il primo consente agli uomini d'affari di creare negozi online con pochi clic. Il secondo è rivolto all'assistenza clienti. Questi due siti interagiscono con lo stesso database. Il tuo progetto sta diventando sempre più popolare e si scopre che la potenza del server su cui viene eseguito non è più sufficiente. Di conseguenza, decidi di spostare l'intero progetto su un'altra macchina. Se non hai utilizzato qualcosa come Docker Compose, dovrai migrare e riconfigurare i contenitori uno alla volta, sperando di non dimenticare nulla durante il processo. Se usi Docker Compose, spostare il tuo progetto su un nuovo server è una questione che può essere risolta eseguendo alcuni comandi. Per completare il trasferimento del progetto in una nuova posizione, è sufficiente effettuare alcune impostazioni e caricare una copia di backup del database sul nuovo server. Tipico DockerComposer: cosa devi ricordare qui: i contenitori sono il mezzo principale per "confezionare" le applicazioni. Docker gestisce i contenitori, crea immagini di contenitori, preleva e sposta contenitori. Per gestire contemporaneamente un gruppo di contenitori, viene utilizzato Docker Compose, incluso in Docker. Questi programmi sono software gratuiti (omaggi - in una parola) Kubernetes (K8s) - Automazione Docker E così abbiamo implementato i container, sappiamo come trasferirli “in batch” da macchina a macchina. Ma all'improvviso uno dei contenitori è caduto! Cosa fare? Chi lo solleverà di nuovo? Naturalmente puoi farlo manualmente, tramite Docker. Ma devi fare qualcosa, scrivere qualcosa, hai bisogno di una sorta di strumento di automazione. È qui che entra in gioco Kubernetes (abbreviato K8s), che si occuperà anche della gestione e dell'orchestrazione (gestione automatizzata delle entità correlate) dei container. Con i K8 a tua disposizione, non avrai bisogno di monitorare i container giorno e notte. È sufficiente definire lo scenario di comportamento e i K8 faranno tutto da soli. Funzionalità principali di Kubernetes 1. Fornisce scalabilità e gestione della configurazione. 2. Puoi descrivere cosa desideri ottenere quando distribuisci un cluster e K8 lo farà. Ad esempio, specifica il numero di pod, quanta memoria allocare per loro, indicare il numero di repliche (istanze) di applicazioni distribuite (in contenitori) sui pod. 3. Responsabile del mantenimento del sistema in un certo stato: se qualcosa cade, i K8 lo raccolgono, secondo la configurazione stabilita. Cosa devi ricordare qui: Kubernetes è uno strumento per orchestrare applicazioni containerizzate, automatizzandone la distribuzione, la scalabilità e il coordinamento in un cluster. Supporta le principali tecnologie di containerizzazione, incluso Docker. K8s è un software open source. OpenShift è una Ferrari nel mondo della virtualizzazione, bella, veloce e costosa Sviluppando l'argomento passiamo a OpenShift. OpenShift è un add-on di Kubernetes che offre funzionalità aggiuntive, è subito pronto all'uso, non richiede lunghe e faticose configurazioni e può essere messo subito in produzione. Guarda quante icone diverse ci sono sopra Kubernetes. E ognuno di loro fa le proprie cose interessanti. Punti salienti di OpenShift: • È un prodotto a pagamento, a differenza di K8; • DevOps pronto all'uso, supporto per scenari di distribuzione canary di base blu/verde; • Supporto Jenkins integrato; • Fornisce strumenti utili per amministrare e lavorare con il cluster; • Dispone di un modello di sicurezza più rigoroso e di un monitoraggio integrato. Vale la pena sottolineare ancora una volta che OpenShift è un prodotto a pagamento, a differenza di Kubernetes. La differenza è questa: se prendiamo Kubernetes nudo, risolviamo tutti i problemi da soli. Se parliamo di OpenShift, si tratta di un prodotto Red Hat, che risolve i problemi emergenti come parte del supporto a pagamento. Riassumiamo: Nello sviluppo industriale c'è la necessità di “impacchettare” l'applicazione; questo approccio è particolarmente rilevante nell'architettura a microservizi. I contenitori sono il mezzo principale per le applicazioni di imballaggio. Docker gestisce i contenitori, crea immagini di contenitori, preleva e sposta contenitori. Per gestire contemporaneamente un gruppo di contenitori, viene utilizzato Docker Compose, incluso in Docker. Questi programmi sono software gratuiti. Kubernetes(K8s) è uno strumento per orchestrare applicazioni containerizzate, automatizzandone l'implementazione, il ridimensionamento e il coordinamento in un cluster. Supporta le principali tecnologie di containerizzazione, incluso Docker. K8s è un software open source. OpenShift è un componente aggiuntivo di Kubernetes che offre funzionalità aggiuntive. Questo è un prodotto a pagamento, a differenza del K8, destinato all'uso aziendale. Fornisce DevOps pronto all'uso: supporto per i principali scenari di distribuzione blu/verde, canary, dispone di supporto integrato per Jenkins e fornisce strumenti utili per l'amministrazione e l'utilizzo del cluster. Ha un modello di sicurezza più rigoroso e un monitoraggio integrato. Per coloro che non vedono l'ora di programmare: Creare il pacchetto di un'applicazione Spring Boot in un contenitore Come distribuire Postgres in Docker e connettersi a un'applicazione Spring-Boot Webinar: Docker: come lavorare con i contenitori? — Sviluppo backend in Java
GO TO FULL VERSION