Kubernetes vs Docker Swarm: quale dovresti usare?

0
222

Kubernetes e la modalità Swarm di Docker sono due strumenti di orchestrazione dei container che consentono di ridimensionare le repliche del carico di lavoro su più macchine fisiche. Sebbene Kubernetes sia la scelta più popolare, Docker Swarm ha alcuni vantaggi unici che vale la pena considerare.

Ecco uno sguardo a come queste due tecnologie si confrontano tra le loro funzioni chiave. Entrambi hanno lo stesso obiettivo finale – che ti consente di ridimensionare i contenitori – ma ottenerlo in modi a volte molto diversi. Indipendentemente dalla tua scelta, sarai in grado di avviare e ridimensionare i contenitori creati da immagini create con Docker o un altro motore di contenitori popolare.

Panoramica

Kubernetes è stato inizialmente sviluppato come progetto open source presso Google. Ora risiede presso la Cloud Native Computing Foundation (CNCF), uno sforzo intersettoriale per promuovere e mantenere progetti cloud nativi ampiamente utilizzati.

La configurazione di Kubernetes richiede la creazione di un cluster di macchine fisiche chiamate nodi. Queste macchine eseguono i tuoi contenitori e sono controllate da un nodo primario centralizzato che emette le istruzioni di pianificazione del contenitore. I nodi di lavoro agiscono in base a queste istruzioni per estrarre le immagini dai registri e avviare i contenitori.

Kubernetes è pensato per essere di livello aziendale e pronto per la produzione. Le sue capacità di pianificazione includono la scalabilità automatica, il posizionamento automatico, la distribuzione del carico e il monitoraggio continuo per la chiusura e il riavvio dei container.

Pubblicità

La modalità Swarm è l'orchestrator integrato di Docker, incluso come parte della distribuzione standard di Docker. Qualsiasi macchina con docker installata può creare o unirsi a un cluster swarm.

Swarm ti consente anche di collegare più macchine fisiche indipendenti in un cluster. Unifica efficacemente un insieme di host Docker in un singolo host virtuale. C'è una curva di apprendimento relativamente superficiale e gli utenti che hanno familiarità con Docker a host singolo possono generalmente familiarizzare con la modalità Swarm rapidamente.

Come Kubernetes, un singolo nodo gestore Swarm è responsabile della pianificazione e del monitoraggio dei container. Il manager può reagire agli incidenti nel cluster, come un nodo che va offline, e ripianificare i contenitori di conseguenza. Supporta anche gli aggiornamenti in sequenza, consentendoti di ridimensionare i carichi di lavoro senza influire sulla disponibilità.

Aggiunta di nuovi carichi di lavoro

Kubernetesle applicazioni vengono distribuite creando una rappresentazione dichiarativa delle risorse del tuo stack in un file YAML. Lo YAML è “applicato” al tuo cluster, in genere utilizzando una CLI come kubectl, quindi agito dal piano di controllo Kubernetes in esecuzione sul nodo primario.

Strumenti aggiuntivi tramite progetti come Helm ti consentono di “installare” applicazioni che utilizzano “grafici.” Queste sono raccolte di file YAML che sono stati impacchettati per una facile aggiunta al tuo cluster.

Kubernetes offre dozzine di tipi di risorse che astraggono le funzioni del cluster come le distribuzioni di rete, archiviazione e container. L'apprendimento dei diversi tipi di risorse e dei loro ruoli presenta una curva di apprendimento piuttosto ripida per un nuovo arrivato. Ti invitiamo a guardare l'architettura complessiva del tuo sistema, non solo i dadi e i bulloni dei singoli contenitori.

Pubblicità

Docker Swarmutilizza anche file YAML ma è possibile creare semplici distribuzioni senza di essi. La CLI Swarm offre comandi imperativi come alternativa in modo da poter avviare un trio di contenitori NGINX eseguendo:

docker service create –replicas 3 –name nginx nginx:latest

Quando vengono utilizzati file YAML, il formato è ancora molto più conciso delle risorse Kubernetes. Le definizioni dello stack Swarm sono molto simili ai file Docker Compose; Swarm può distribuire la maggior parte dei file Compose così come sono, il che ti consente di trasferire facilmente i tuoi carichi di lavoro Dockerized esistenti in operazioni scalabili in un cluster Swarm multi-nodo.

Kubernetes funziona con astrazioni che si trovano molto al di sopra dei tuoi container effettivi . È necessario comprendere termini come Set di repliche, Distribuzione e Pod e come si riferiscono ai contenitori in esecuzione. Al contrario, la definizione dei servizi Swarm risulterà familiare a chiunque abbia già utilizzato Docker e Docker Compose.

Ridimensionamento dei contenitori

Kubernetes e Docker Swarm sono entrambi realizzati con la scalabilità come obiettivo principale. A livello di base, ti consentono di replicare i tuoi container su più nodi di lavoro isolati, migliorando la tua resilienza ai guasti hardware e permettendoti di aggiungere nuove istanze di container per soddisfare la domanda.

Kubernetesfornisce solide garanzie di replica, coerenza e distribuzione. Può scalare automaticamente i tuoi servizi in base a fattori esterni, garantendo che i tuoi carichi di lavoro rimangano accessibili anche durante i periodi di picco della domanda. Questa automazione può essere un fattore decisivo per i team operativi impegnati.

Docker Swarm richiede che il ridimensionamento venga condotto manualmente, aggiornando il file Compose dello stack o utilizzando una CLI comando per modificare il conteggio delle repliche. È semplice ma efficace: le modifiche si applicano molto più rapidamente di Kubernetes, poiché Swarm è un sistema meno complicato. Ciò significa che può essere la scelta migliore se hai bisogno di un'estrema reattività.

Pubblicità

Entrambi gli agenti di orchestrazione sono anche efficaci nel mantenere un'elevata disponibilità. Kubernetes e Docker Swarm riprogrammano i container se uno non riesce o se un nodo di lavoro va offline. Questo comportamento mantiene automaticamente il numero di repliche specificato, supponendo che siano disponibili risorse sufficienti sugli altri nodi.

Rete e bilanciamento del carico

Kubernetesespone i carichi di lavoro tramite i “servizi” che fungono da bilanciatori del carico in cluster. Il traffico di solito raggiunge il servizio tramite un Ingress, una risorsa che consente di filtrare le richieste in entrata in base a proprietà come il nome host e l'URL.

Come al solito con Kubernetes, questo significa che ci sono diversi passaggi e astrazioni da imparare. I tuoi contenitori Pod devono fare riferimento a un servizio, a cui fa riferimento un Ingress che definisce le tue regole di routing. Il vantaggio è che tutto questo è integrato in Kubernetes; l'unico prerequisito è un sistema di bilanciamento del carico esterno che punta all'indirizzo IP primario del cluster. I provider di cloud Kubernetes gestiti di solito offrono un metodo con un clic per creare un simile sistema di bilanciamento del carico.

La rete si comporta in modo diverso in Docker Swarm. In modo simile ai normali contenitori Docker, puoi pubblicare facilmente le porte su una rete in ingresso accessibile da tutti gli host dello sciame. Questo incorpora una mesh di routing che garantisce che le richieste in entrata raggiungano un'istanza del tuo container su uno qualsiasi dei nodi disponibili. Swarm offre anche una modalità di rete per host in cui le porte vengono aperte solo sui singoli host su cui vengono eseguiti i contenitori.

Quello che manca a Swarm è un modo integrato di instradare il traffico ai container in base alle caratteristiche della richiesta come il nome host e l'URL. Per ottenere ciò, di solito aggiungi un proxy inverso come NGINX, Traefik o HAProxy che funge da punto di ingresso per il tuo sciame, abbina le richieste in arrivo e le inoltra al contenitore appropriato. L'aggiunta di un componente aggiuntivo dell'infrastruttura per esporre i servizi dietro diversi nomi di dominio può rendere Swarm meno adatto a più carichi di lavoro di produzione.

Osservabilità

Kubernetes e Docker Swarmentrambi dispongono di strumenti di registrazione e monitoraggio incorporati che consentono di ispezionare i registri del contenitore e il consumo di risorse. Nel caso di Kubernetes, puoi osservare il tuo cluster utilizzando strumenti CLI popolari come kubectl o passare a un'interfaccia basata sul Web come la dashboard ufficiale. Swarm espone i log tramite la sua CLI in modo simile ai normali log del container Docker – utilizzare i log del servizio docker per eseguire lo streaming da un servizio.

Annuncio

Dove Kubernetes’ il supporto per l'osservabilità si estende oltre Swarm è nelle sue integrazioni con strumenti di terze parti. L'aggiunta di un sistema di monitoraggio come Prometheus consente di interrogare, visualizzare e archiviare metriche e avvisi, mentre gli aggregatori come Fluentd forniscono funzionalità simili per i log. Questi ti aiutano a sviluppare un cluster altamente osservabile che puoi facilmente ispezionare dall'esterno.

Questi strumenti possono ancora essere utilizzati con Docker Swarm, ma dovrai impostare le tue procedure per spostare i dati dal tuo swarm alle tue piattaforme di aggregazione. Kubernetes offre un'esperienza più fluida in cui gli strumenti vengono eseguiti all'interno del tuo cluster, ispezionandolo dall'interno.

Conclusione

Kubernetes e Docker Swarm sono due orchestratori di container che puoi usare per scalare i tuoi servizi. Quale dovresti usare dipende dalle dimensioni e dalla complessità del tuo servizio, dai tuoi obiettivi di replica e da eventuali requisiti speciali che hai per il networking e l'osservabilità.

Kubernetes è un sistema di livello produttivo che include la scalabilità automatica, l'ingresso in rete e integrazioni di facile osservabilità nella sua installazione predefinita. Questa installazione può essere più complicata da realizzare in quanto dovrai mantenere il tuo cluster o crearne uno con un provider di cloud pubblico. L'autogestione del piano di controllo può essere piuttosto complicata, con l'amministrazione Kubernetes ora comunemente vista come un titolo di lavoro a sé stante.

La distribuzione in Kubernetes richiede la comprensione dei concetti sottostanti, di come astraggono i fondamenti del contenitore, e il tipo di risorsa da utilizzare in ogni scenario. Ciò rende la curva di apprendimento relativamente ripida; Kubernetes ha la reputazione di essere complesso e di creare confusione tra i nuovi arrivati, cosa che vale la pena tenere a mente se non si dispone di un team operativo dedicato.

Docker Swarm è molto più semplice da eseguire. Se hai installato Docker, hai già tutto ciò di cui hai bisogno. Swarm può distribuire orizzontalmente i tuoi container, riprogrammarli in una situazione di failover e ridimensionarli su richiesta.

Pubblicità

L'uso quotidiano è molto simile ai flussi di lavoro Docker consolidati. I comandi principali della CLI ricordano le normali operazioni del contenitore Docker e c'è compatibilità con i file Docker Compose esistenti. Ciò rende Swarm ideale per un utilizzo rapido in ambienti interni e sandbox per sviluppatori già pesantemente Dockerized.

Non è necessario riunire tutto in un'unica piattaforma: molti team utilizzano sia Swarm che Kubernetes per sistemi diversi , consentendo di realizzare i vantaggi di entrambi. Swarm è più semplice, più facile da mantenere, più familiare agli sviluppatori e più veloce per scalare i tuoi servizi. Kubernetes è più esigente da utilizzare e si basa sulle proprie astrazioni, ma offre automazione, una soluzione di rete completamente integrata e l'accesso a un ecosistema in crescita di strumenti di supporto.