Quale orchestrazione di container è la migliore per te?

Molte scelte vengono presentate ai team IT (Information Technology) durante l’esecuzione di applicazioni containerizzate, affrontando tutti i livelli di competenza tecnica.

Può essere difficile selezionarne uno, considerando che dopo aver fatto la tua scelta, probabilmente non migrerai presto a un’altra opzione.

Questo post contrappone due opzioni importanti: Amazon Elastic Container Service (ECS) e Kubernetes.

Entrambe sono piattaforme capaci nei domini di orchestrazione dei container e di gestione dei microservizi. E poco prima di andare oltre, un ripasso sui container non fa male. I contenitori sono stati resi popolari per facilitare lo sviluppo, la promozione e la distribuzione del codice in molti ambienti. Sono astrazioni a livello di applicazione, che racchiudono il codice con le dipendenze, le librerie e le impostazioni dell’ambiente necessarie in un pacchetto eseguibile.

Sebbene l’obiettivo principale dell’utilizzo dei container sia semplificare il processo di distribuzione del codice, la gestione di migliaia di essi diventa sempre più impegnativa. È necessario un altro meccanismo per implementare distribuzioni altamente affidabili, ridimensionare le applicazioni in base al carico, scambiare container non integri con quelli nuovi, bilanciare il carico ed esporre le porte.

È qui che l’orchestrazione dei container viene in aiuto. A parte questo, sono necessari i mezzi per eseguire i container e gestire la loro infrastruttura complessiva. Sono disponibili molti strumenti per risolvere questo problema, ma restringiamo l’attenzione ad alcuni.

Questo pezzo mette a confronto ECS e Kubernetes, evidenziando i vantaggi di ciascuno, e si conclude con una direzione sulla scelta di quello giusto in base al tuo progetto.

Cos’è Amazon ECS?

Amazon ECS è un servizio di orchestrazione dei container che semplifica la distribuzione, la gestione e il ridimensionamento delle applicazioni containerizzate. Fondamentalmente, definisci la tua applicazione e le sue risorse richieste. Quindi, Amazon ECS avvia, monitora e ridimensiona la tua app attraverso le opzioni di calcolo, consentendo l’integrazione di altri servizi AWS necessari. Ad esempio, puoi controllare lo stato e modificare i tuoi cluster a livello di programmazione.

ECS ti consente di distribuire le tue app attraverso un gruppo di server, chiamati cluster, utilizzando definizioni di attività e chiamate API (Application Program Interfaces).

Leggi anche: Quali istanze AWS EC2 dovresti usare?

Vantaggi di Amazon ECS

  • ECS tradizionale: questa versione è stata lanciata nel 2015 ed è alimentata da Amazon EC2 per eseguire facilmente i container Docker nel cloud. L’ECS tradizionale offre il controllo sottostante sulle opzioni EC2 consentendo flessibilità. Significa che scegli i tipi di istanze che desideri eseguire sul tuo contenitore. Il modello ti collega ulteriormente con altri servizi AWS che puoi utilizzare per monitorare e registrare l’attività sulle istanze EC2.
  • Fargate ECS – Rilasciato nel 2017 per eseguire i container senza la necessità di gestire le opzioni di elaborazione EC2 sottostanti. Fargate adotta un approccio diverso calcolando la CPU e la memoria richieste. Se desideri che i carichi di lavoro siano operativi rapidamente, questa potrebbe essere l’opzione migliore, poiché non dovrai preoccuparti delle opzioni di elaborazione sottostanti.
  • Architetture applicative semplificate: ECS è una buona opzione per le applicazioni con pochi microservizi (quelle con poche dipendenze esterne o con poche parti mobili) che funzionano in modo indipendente.
  • Monitoraggio e registrazione semplici: puoi integrare facilmente ECS con gli strumenti di registrazione e monitoraggio di AWS come CloudWatch. Non è necessario configurare la visibilità nei carichi di lavoro dei container, risparmiando tempo.
  • Facile curva di apprendimento – ECS è facile da imparare. Hosted Kubernetes sta guadagnando più popolarità rispetto ai modelli tradizionali come i sapori KOPS e Kubeadm.
  • Infrastruttura serverless: ECS consente di eseguire container senza la necessità di gestire macchine virtuali; distribuisce i container mentre è libero dall’intervento umano.
  • Sicurezza integrata: per impostazione predefinita, Amazon ECS è protetto e applica a cascata le misure di sicurezza tramite un meccanismo di rete Virtual Private Cloud isolato.
  • Limitazioni dell’ECS

  • Archiviazione limitata: l’archiviazione esterna è limitata esclusivamente ad Amazon, fino ad Amazon EBS.
  • Limitazioni di convalida: ECS è un prodotto basato su Amazon, quindi non disponibile per distribuzioni pubbliche al di fuori di Amazon.
  • Vendor lock-in – ECS è prevenuto; può gestire solo i suoi contenitori creati.
  • Indisponibilità del codice ECS: gran parte del codice ECS non è disponibile al pubblico. Strumenti come AWS Blox (un framework per la creazione di pianificatori personalizzati) hanno una sezione molto piccola delle loro basi di codice open-source.
  • Cos’è Kubernetes?

    Kubernetes, comunemente chiamato K8, è un software open source per automatizzare la distribuzione, il ridimensionamento e l’amministrazione delle applicazioni containerizzate.

    Sfruttando 15 anni di esperienza nell’esecuzione di carichi di lavoro di produzione di Google (combinando le migliori idee e pratiche della community), K8s raggruppa i tuoi contenitori di applicazioni in unità logiche che puoi facilmente scoprire e gestire.

    Inoltre, le funzionalità principali di K8, come il bilanciamento del carico, l’archiviazione persistente, i rollback automatici per le app containerizzate, i segreti, l’auto-riparazione per i cluster Kubernetes e la gestione della configurazione.

    Leggi anche: Guida introduttiva a Kubernetes: un’introduzione per principianti

    Vantaggi di Kubernetes

  • Open source (nessun vendor lock-in): sia in esecuzione on-premise che nel cloud, puoi utilizzare Kubernetes senza riprogettare la strategia di orchestrazione. A differenza del software tradizionale che comporta alcuni costi di licenza, K8s è gratuito e open source. Come se non bastasse, i cluster K8 vengono eseguiti su cloud pubblici e privati ​​fornendo risorse di virtualizzazione su entrambe le entità.
  • Flessibilità ad alta potenza: K8s è un’ottima soluzione se le tue applicazioni richiedono un’elevata disponibilità supportando al tempo stesso efficienza e scalabilità. Questa caratteristica è tatticamente utile nelle applicazioni che generano entrate elevate. In poche parole, è un controllo granulare sui tuoi carichi di lavoro. Nei casi in cui desideri trasferire le tue applicazioni su piattaforme più potenti, K8s non si limita ai vincoli del fornitore come ECS.
  • Elevata disponibilità: come accennato in precedenza, il design di K8 è orientato a fornire la disponibilità delle applicazioni e dell’infrastruttura necessaria, rendendola una caratteristica necessaria per i container in produzione. In alta disponibilità, ci sono alcune tecniche:
    • Controlli di integrità e autoriparazione: Kubernetes salvaguarda le tue applicazioni dai guasti attraverso ispezioni regolari dei nodi. Se una cialda o un contenitore viene schiacciato a causa di un errore, K8s si avvale automaticamente di una sostituzione.
    • Bilanciamento del carico e instradamento del traffico: per quanto riguarda l’instradamento del traffico, i K8 invieranno solo le richieste ai contenitori appropriati. E con il bilanciamento del carico, K8s distribuisce i carichi tra i pod, bilanciando le tue risorse per diverse istanze come interruzioni, picchi di traffico accidentali o elaborazione in batch. Ancora una volta, puoi anche utilizzare bilanciatori di carico esterni se lo desideri.
  • Scalabilità del carico di lavoro: sebbene menzionato sopra, analizziamolo ulteriormente. K8s utilizza le sue risorse per fornire un ridimensionamento efficiente nei seguenti criteri.
    • Ridimensionamento automatico: questa funzione consente di regolare automaticamente il numero di container in esecuzione in base all’utilizzo della CPU e ad altri parametri della CPU.
    • Ridimensionamento manuale: con l’aiuto di questa funzione, puoi ridimensionare il conteggio dei contenitori in esecuzione tramite la riga di comando o l’interfaccia.
    • Controller di replica: questo strumento consente di determinare il numero di pod che corrispondono alla specifica del cluster; se sono pochi, ricomincia da capo, e se sono troppi, li termina.
  • Progettato per l’implementazione: K8s è appositamente progettato per accelerare il processo di creazione, test e spedizione del software. Ecco alcune delle sue caratteristiche offerte:
    • Rollback e implementazioni automatizzati: durante lo sviluppo, potresti voler implementare alcune nuove configurazioni o aggiornamenti dell’applicazione. K8s ti consente di attuare il processo senza tempi di inattività dell’applicazione. In caso di guasto, i K8 tornano automaticamente alla versione precedente.
    • Distribuzioni canary: puoi sfruttare questa funzionalità testando nuove distribuzioni in produzione parallelamente alla versione precedente; K8s ti consente di ridimensionare l’ultima versione dell’app e contemporaneamente aumentare l’ultima versione.
    • Supporto diversificato per linguaggi e framework di programmazione: indipendentemente dal fatto che tu provenga dal background dei linguaggi di programmazione Go, Java o .Net, Kubernetes supporta molti linguaggi e framework di sviluppo. Se un’app può essere eseguita su un contenitore, viene eseguita su K8.
  • Scoperta dei servizi: ogni sviluppatore desidera che tutti i servizi forniti abbiano un modo per comunicare tra loro. Tuttavia, il modello operativo di K8s prevede la creazione e la distruzione continua di container, rendendo inesistenti alcuni servizi in determinate località. Nello sviluppo tradizionale, un registro dei servizi verrebbe adattato per tenere traccia delle posizioni di questi servizi. K8s risolve questo problema attraverso un concetto di servizio nativo per raggruppare i pod e scoprire i servizi senza problemi. Pertanto, K8s fornisce gli indirizzi IP per tutti i pod, alloca i nomi DNS per ogni set di pod e quindi bilancia il traffico di carico su ogni set di pod. Questa architettura genera un ambiente in cui l’individuazione dei servizi è astratta da ogni contenitore.
  • Comunità vivace: K8s è supportato da una vivace comunità con migliaia di sviluppatori che sfruttano i suoi servizi. Al momento in cui scriviamo, oltre 100 milioni di sviluppatori utilizzano K8 per scoprire, contribuendo a 330 milioni di progetti. La comunità non mostra segni di rallentamento e incoraggia la collaborazione tra gli sviluppatori.
  • Limitazioni di Kubernetes

  • Curva di apprendimento ripida: per iniziare con Kubernetes, devi comprenderne il panorama. Inoltre, fornire una soluzione end-to-end richiede l’inclusione di una varietà di tecnologie e servizi. E con le tecnologie supplementari che variano in modo significativo (a volte, alcune soluzioni risalgono all’UNIX dominato mentre altre sono nuove tecnologie con una bassa adozione), capire quali includere può essere frenetico. Dovresti anche capire come tutti i componenti si incastrano per fornire una soluzione più completa per problemi particolari. La documentazione è disponibile, ma dovrai capire come fornire e gestire questi servizi.
  • Funzionalità e progetti differenzianti: comprendere le differenze tra progetti e funzionalità può essere difficile. Sebbene tu possa facilmente ottenere consigli sulla gestione dei progetti, potresti non ottenere una chiara distinzione tra funzionalità e progetti della comunità.
  • Conoscenza oltre Kubernetes: Kubernetes è una piattaforma sofisticata. Con tutta questa complessità nel fornire soluzioni, probabilmente incontrerai un po’ di confusione, specialmente se sei nuovo. Tuttavia, le organizzazioni vogliono ancora fornire soluzioni (come i data store-as-a-service), amplificando la curva di apprendimento. Se utilizzi tali servizi sul tuo prodotto, devi ampliare le tue conoscenze oltre Kubernetes.
  • Gestire Kubernetes è difficile: arrivare alla produzione con i K8 è una cosa. Dovrai fornire tutte le risorse necessarie affinché le tue applicazioni possano gestirlo. Dovrai anche gestire tutta la sicurezza e integrarla con la tua infrastruttura. Inoltre, avrai bisogno di alcune competenze di alto livello per elaborare e utilizzare i suoi strumenti in modo efficace. Dovrai acquisire una conoscenza approfondita per gestire i cluster Kubernetes, monitorare e risolvere i problemi dei cluster e supportarli su larga scala.
  • Confronto tra ECS e Kubernetes

    Ecco un confronto fianco a fianco che mostra le differenze:

    Punto di differenzaKubernetesAmazon ECSDefinizione dell’applicazioneLe applicazioni vengono distribuite combinando pod, nodi e servizi.La distribuzione dell’applicazione assume la forma di attività. Le attività sono istanze di container, ad esempio container Docker in esecuzione su istanze ECS.DistribuzioneComplessa in quanto è necessario distribuire e configurare i cluster manualmente.Distribuzione semplice tramite la console AWS.Supporto per nodi (numero di macchine)5000 nodi per cluster.1000 nodi per cluster .ContenitoriFino a 300.000 contenitori per cluster.Limitato dalla capacità dell’infrastruttura utilizzata.I pod di bilanciamento del carico vengono esposti tramite i servizi utilizzati come bilanciatori del carico dietro i controller di ingresso.Due bilanciatori del carico disponibili; ELB-Application o Network.PricingFree.ECS è gratuito, ma devi pagare per le risorse EC2.OttimizzazioneBen ottimizzato per un singolo cluster di grandi dimensioni.Preconfigurato con requisiti e requisiti del contenitore.AutoscalingDefinisci i parametri di scalabilità automatica durante la creazione di distribuzioni.Utilizzi servizi di monitoraggio come CloudWatch per la scalabilità automatica in base a CPU, memoria e parametri personalizzati.Controllo integritàSono disponibili due controlli integrità: prontezza e attività.Raggiunto tramite servizi di monitoraggio come CloudWatch.Scoperta del servizioAttuato tramite variabili di ambiente o DNS.Raggiunto tramite servizi di monitoraggio: CloudWatch.Vendor-lock inNo.Sì.

    Casi d’uso di ECS e Kubernetes

    Ecco come la tecnologia di containerizzazione di ECS e Kubernetes sta rivoluzionando i settori:

    ECS INC International evidenzia numerosi casi d’uso in cui è stata implementata la tecnologia ECS. Nei moderni dispositivi medici troverai metodi rivoluzionati per trattare i pazienti e tecniche di somministrazione dei farmaci. Esistono molti strumenti, come inalatori elettronici, autoiniettori medici e pompe per infusione.

    Nel dominio IoT, abbiamo dispositivi domestici intelligenti. Se sposti l’attenzione sull’industria automobilistica, abbiamo auto elettriche intelligenti con una migliore esperienza di guida e misure di sicurezza migliorate come i sistemi di frenata assistita.

    Finora, questa è la punta dell’iceberg; puoi controllare più applicazioni di ECS che non si limitano alla tecnologia wireless, ai dispositivi indossabili e ai casi di utilizzo industriale.

    Dall’altra parte, Kubernetes ha la sua quota di applicazioni pratiche. Innanzitutto, il cloud IBM offre funzionalità private, pubbliche e ibride su un’ampia gamma di runtime.

    Spotify, un gigante nel campo dello streaming musicale, sfrutta la tecnologia Kubernetes per facilitare operazioni senza soluzione di continuità, fino a 10 milioni di richieste al secondo. Sebbene si tratti di casi d’uso reali, K8 offre più funzionalità nell’architettura dei microservizi, funzioni di rete native del cloud, apprendimento automatico e rotazione del ciclo di vita dello sviluppo del software.

    Parole finali

    Dopo aver esaminato questa guida, hai una solida panoramica dei meriti e dei demeriti della scelta di ECS o K8. La chiave per scegliere l’opzione giusta si basa su alcuni argomenti. Dovrai soppesare tra costo, limitazioni del servizio e costo del talento.

    Se desideri utilizzare un servizio gratuito, K8s sarà la tua scelta numero uno. Tuttavia, avrai bisogno di talento o abilità solide per gestire la complessità che ne deriva. Sebbene K8s non abbia limiti di vincolo del fornitore, richiederà una comprensione approfondita del funzionamento della piattaforma. ECS, d’altra parte, ha ottenuto configurazioni veloci.

    Successivamente, consulta la guida dettagliata su Kubernetes vs. Docker.