Kubernetes e Docker

Crea, distribuisci e ridimensiona le app più rapidamente grazie a tecnologie dei contenitori che funzionano perfettamente in combinazione.

La scelta tra Kubernetes e Docker

Quando si parla di Kubernetes e Docker spesso ci si chiede quale soluzione usare tra le due, Kubernetes o Docker? Ma l'idea di dover scegliere l'una o l'altra soluzione è sbagliata ed è come mettere a confronto mele e torte di mele.

Non bisogna pensare a due soluzioni che si escludono a vicenda, bensì a due soluzioni complementari. Kubernetes e Docker sono fondamentalmente due tecnologie diverse che funzionano bene in combinazione per la creazione, la distribuzione e il ridimensionamenti di app in contenitori e non è necessario scegliere l'una o l'altra.

Docker e lo sviluppo della containerizzazione

Docker è una tecnologia open source, nonché un formato di file dei contenitori, che consente di automatizzare la distribuzione di applicazioni come contenitori portabili e autosufficienti che è possibile eseguire nel cloud o in locale. Docker, Inc., che condivide un nome simile, è una delle aziende che si occupa dello sviluppo della tecnologia Docker open source per l'esecuzione in Linux e Windows in collaborazione con provider di servizi cloud come Microsoft.

Sebbene l'idea di isolare gli ambienti non rappresenti una novità e nonostante vi siano altri tipi di software di containerizzazione, negli ultimi anni Docker è diventato il formato predefinito per i contenitori. Docker include il motore Docker, che è un ambiente di runtime. Questo strumento consente di creare ed eseguire i contenitori in qualsiasi computer di sviluppo, quindi archiviare o condividere le immagini dei contenitori tramite un registro contenitori come Docker Hub o Registro Azure Container.

Quando le applicazioni crescono occupando più contenitori in diversi server, la gestione diventa più complessa. Docker fornisce uno standard aperto per la creazione di pacchetti e la distribuzione di app in contenitori, tuttavia le complessità possono aumentare rapidamente. Come puoi coordinare e pianificare numerosi contenitori? In che modo i diversi contenitori presenti nella tua app possono comunicare tra di loro? Come puoi ridimensionare numerose istanze di contenitori? È qui che entra in gioco Kubernetes.

Kubernetes e l'orchestrazione di contenitori

Kubernetes è un software di orchestrazione open source che fornisce un'API che consente di controllare come e dove eseguire i contenitori. Ti permette di eseguire contenitori e carichi di lavoro Docker e di affrontare con successo alcune delle complessità operative legate al ridimensionamento di più contenitori distribuiti in più server.

Con Kubernetes puoi orchestrare un cluster di macchine virtuali e pianificare l'esecuzione dei contenitori al loro interno in base alle risorse di calcolo disponibili e ai requisiti di risorse di ogni contenitore. I contenitori sono raggruppati in pod, ossia l'unità operativa di base per Kubernetes. Contenitori e pod possono essere ridimensionati fino allo stato desiderato e puoi gestirne il ciclo di vita per mantenere operative le tue app.

Qual è la differenza tra Kubernetes e Docker?

Sebbene spesso si mettano a confronto Kubernetes e Docker, un confronto più appropriato può essere fatto tra Kubernetes e Docker Swarm. Docker Swarm è la tecnologia di orchestrazione di Docker incentrata sul clustering di contenitori Docker, strettamente integrata nell'ecosistema Docker e che usa una propria API.

Una differenza fondamentale tra Kubernetes e Docker è legata al fatto che Kubernetes è progettato per l'esecuzione in un cluster mentre Docker viene eseguito in un singolo nodo. Kubernetes è una soluzione più estesa rispetto a Docker Swarm e consente di coordinare cluster di nodi su larga scala in un ambiente di produzione in modo efficiente. I pod Kubernetes sono unità di pianificazione che possono includere uno o più contenitori nell'ecosistema Kubernetess e vengono distribuiti tra i nodi per fornire disponibilità elevata.

Kubernetes e Docker: l'unione fa la forza

Mentre i contenitori consentono di scrivere codice che è possibile eseguire ovunque, Kubernetes fornisce il potenziale per orchestrare e gestire tutte le risorse dei contenitori da un singolo piano di controllo. Vengono forniti i componenti utili per rete, bilanciamento del carico, sicurezza e scalabilità in tutti i nodi Kubernetes che eseguono i contenitori. Kubernetes offre anche un meccanismo di isolamento predefinito sotto forma di spazi dei nomi che consentono di raggruppare le risorse dei contenitori in base ad autorizzazione di accesso, ambienti di gestione temporanea e molto altro. Questi costrutti permettono al personale IT di offrire facilmente agli sviluppatori l'accesso a risorse self-service e consentono agli sviluppatori di collaborare alle architetture di microservizi più complesse senza dover simulare l'intera applicazione nell'ambiente di sviluppo. Combinando le procedure DevOps con i contenitori e con Kubernetes, è ancora più facile ottenere un'architettura di microservizi di base che consente la distribuzione rapida e l'orchestrazione scalabile di applicazioni native del cloud.

In breve, puoi usare Kubernetes insieme a Docker per:

  • Migliorare la solidità dell'infrastruttura e la disponibilità elevata delle app. L'app rimane online anche se alcuni nodi vanno offline.
  • Rendere più scalabili le applicazioni. Se il carico ricevuto dall'app aumenta e devi ampliare il livello di servizio per offrire un'esperienza utente migliore, puoi avviare più contenitori o aggiungere più nodi al cluster Kubernetes in modo semplice.

Kubernetes e Docker sono interoperabili. Docker fornisce uno standard aperto per la creazione di pacchetti e la distribuzione di applicazioni containerizzate. Con Docker, puoi creare ed eseguire contenitori, nonché archiviare e condividere le relative immagini. È possibile eseguire facilmente una build di Docker in un cluster Kubernetes, ma Kubernetes di per sé non è una soluzione completa. Per ottimizzare Kubernetes in un ambiente di produzione, implementa servizi e strumenti aggiuntivi per gestire sicurezza, governance, identità e accesso, nonché flussi di lavoro di integrazione continua/distribuzione continua e altre procedure DevOps.

Architetture delle soluzioni Kubernetes e Docker in ambiente di produzione

Förenkla distributionen och hanteringen av mikrotjänstbaserade programFörenkla distributionen och hanteringen av mikrotjänstbaserade program12345567778
  1. Panoramica
  2. Flusso

Panoramica

Usa il servizio Azure Kubernetes per semplificare l'aumento delle prestazioni, la riparazione automatica, il bilanciamento del carico e la gestione dei segreti.

Flusso

  1. 1 Usa un ambiente di sviluppo integrato, ad esempio Visual Studio, per eseguire il commit delle modifiche in GitHub.
  2. 2 GitHub attiva una nuova compilazione in Azure DevOps
  3. 3 Azure DevOps crea un pacchetto di microservizi come contenitori e ne esegue il push nel Registro Azure Container
  4. 4 I contenitori vengono distribuiti nel cluster del servizio Azure Kubernetes
  5. 5 Per controllare l'accesso alle risorse, si usa Azure Active Directory
  6. 6 Gli utenti accedono ai servizi tramite le app e i siti Web
  7. 7 Gli amministratori accedono alle app tramite un portale di amministrazione separato
  8. 8 I microservizi usano i database per archiviare e recuperare le informazioni
Secure DevOps for AKSDevOps and Kubernetes are better together. Implementing secure DevOps together with Kubernetes on Azure, you can achieve the balance between speed and security and deliver code faster at scale. Put guardrails around the development processes using CI/CD with dynamic policy controls and accelerate feedback loop with constant monitoring. Use Azure Pipelines to deliver fast while ensuring enforcement of critical policies with Azure Policy. Azure provides you real-time observability for your build and release pipelines, and the ability to apply compliance audit and reconfigurations easily.123456789
  1. Panoramica
  2. Flusso

Panoramica

DevOps e Kubernetes, collaborazione perfetta. Implementando DevOps sicuro con Kubernetes in Azure puoi ottenere il perfetto equilibrio tra velocità e sicurezza e puoi distribuire codice più rapidamente su larga scala. Puoi applicare tutele ai processi di sviluppo usando CI/CD con controlli dei criteri dinamici e puoi accelerare il ciclo di feedback con il monitoraggio costante. Usa Azure Pipelines per una distribuzione veloce, assicurando al tempo stesso l'applicazione di criteri essenziali con Criteri di Azure. Azure ti offre la visibilità in tempo reale per le pipeline di compilazione e di rilascio e la possibilità di applicare il controllo della conformità e le riconfigurazioni.

Flusso

  1. 1 Esegui rapidamente l'iterazione, il test e il debug di diverse parti di un'applicazione contemporaneamente nello stesso cluster Kubernetes
  2. 2 Viene eseguito il merge del codice in un repository GitHub e quindi le compilazioni e i test automatici vengono eseguiti da Azure Pipelines
  3. 3 L'immagine del contenitore viene registrata in un Registro Azure Container
  4. 4 I cluster Kubernetes vengono sottoposti a provisioning con strumenti quali Terraform. I grafici Helm installati da Terraform definiscono lo stato desiderato di risorse e configurazioni delle app
  5. 5 Gli operatori impongono i criteri per gestire le distribuzioni nei cluster del servizio Azure Kubernetes
  6. 6 La pipeline di versione esegue automaticamente una strategia di distribuzione predefinita con ogni modifica al codice
  7. 7 L'applicazione dei criteri e il controllo vengono aggiunti alla pipeline CI/CD con Criteri di Azure
  8. 8 La telemetria delle app, il monitoraggio dell'integrità dei contenitori e le analisi dei log in tempo reale vengono ottenuti con Monitoraggio di Azure
  9. 9 Le informazioni dettagliate vengono usate per risolvere i problemi e vengono inserite nei piani degli sprint successivi

Sfrutta i punti di forza di Kubernetes con Azure

Il servizio Azure Kubernetes semplifica la distribuzione e la gestione di applicazioni in contenitori. Questo servizio offre Kubernetes serverless, un'esperienza CI/CD integrata, nonché sicurezza e governance di livello enterprise. Unifica i team di sviluppo e delle operazioni in una singola piattaforma per velocizzare le attività di compilazione, distribuzione e ridimensionamento delle applicazioni, in tutta sicurezza.

Introduzione a Kubernetes e Docker