Container

Cos'è Kubernetes?

Kubernetes, noto anche come “k8s” (k+8 caratteri+s) e “kube”, è una piattaforma open source che automatizza le operazioni dei container Linux. Consente di eliminare molti dei processi manuali coinvolti nel deployment e nella scalabilità di applicazioni containerizzate. In altre parole, Kubernetes consente di gestire con semplicità ed efficienza cluster di host su cui vengono eseguiti container Linux. Questi cluster possono gestire host su cloud pubblici, privati o ibridi.

Kubernetes fu inizialmente progettato e sviluppato dagli ingegneri di Google. Google fu tra i primi a dare il proprio contributo alla tecnologia di container Linux. L'azienda ha spiegato pubblicamente come Google esegue tutte le attività nei container. (Questa è la tecnologia su cui si basano i servizi cloud di Google.) Google genera più di 2 miliardi di deployment di container alla settimana, tutti gestiti da una piattaforma interna: Borg. Borg fu il predecessore di Kubernetes, e l'esperienza nello sviluppo maturata nel corso negli anni ha assunto un'importanza fondamentale per gran parte della tecnologia Kubernetes.

Curiosità: i sette raggi del logo di Kubernetes fanno riferimento al nome originale del progetto, “Project Seven of Nine.”

Red Hat è stata una delle prime aziende a collaborare con Google all'iniziativa Kubernetes, sin da prima del lancio, ed è diventata il 2° contributore del progetto upstream di Kubernetes. Nel 2015 Google ha donato il progetto Kubernetes alla Cloud Native Computing Foundation, di recente formazione.


Perché usare Kubernetes?

Le applicazioni di produzione si espandono su più container, che devono essere distribuiti su più server host. Kubernetes ti offre le capacità di orchestrazione e gestione necessarie per distribuire i container, in modo scalabile, al fine di gestire i carichi di lavoro. L'orchestrazione di Kubernetes consente di creare servizi applicativi che si estendono su più container, programmare tali container in un cluster, gestirne la scalabilità e l'integrità nel tempo.

Kubernetes deve integrarsi anche con reti, storage, sicurezza, telemetria ed altri servizi, per mettere a disposizione un'infrastruttura container completa.

Kubernetes explained - diagram

Ovviamente, ciò dipende dal modo in cui utilizzi i container nel tuo ambiente. Un'applicazione rudimentale di container Linux tratta questi ultimi come macchine virtuali efficienti e veloci. Quando ciò avviene in un ambiente di produzione e in applicazioni multiple, sono necessari più container co-locati che cooperano per fornire i singoli servizi. In questo modo, il numero di container nel tuo ambiente si moltiplica, comportando un aumento della complessità.

Kubernetes supera molte delle difficoltà comuni legate alla proliferazione dei container, raggruppandoli in un ”pod.” I pod aggiungono un livello di astrazione ai cluster di container, aiutandoti a programmare i carichi di lavoro e a fornire i servizi necessari, tra cui rete e storage, ai container stessi. Kubernetes agevola, inoltre, il bilanciamento del carico all'interno dei pod e garantisce l'utilizzo di un numero di container adeguato per supportare i tuoi carichi di lavoro.

Grazie all'implementazione corretta di Kubernetes e al contributo di altri progetti open source come Atomic Registry, Open vSwitch, heapster, OAuth e SELinux puoi orchestrare tutti i componenti della tua infrastruttura di container.

Scopri come sfruttare al meglio i container


Gli utilizzi e i vantaggi di Kubernetes

Utilizzando Kubernetes nel tuo ambiente, potrai usufruire di una piattaforma per programmare ed eseguire i container su cluster di macchine fisiche o virtuali. Più in generale, Kubernetes ti permette di implementare e di fare pieno affidamento su un'infrastruttura containerizzata negli ambienti di produzione. E poiché si basa sulla totale automazione delle attività operative, consente di svolgere nei container molte delle attività possibili in altre piattaforme applicative o sistemi di gestione.

Con Kubernetes puoi:

  • Orchestrare i container su host multipli.
  • Sfruttare meglio l'hardware per massimizzare le risorse necessarie al fine di gestire le tue app aziendali.
  • Controllare e automatizzare i deployment e gli aggiornamenti delle applicazioni.
  • Montare e aggiungere storage per eseguire app stateful.
  • Gestire rapidamente la scalabilità delle applicazioni containerizzate e delle loro risorse.
  • Gestire in maniera aperta i servizi, garantendo il deployment delle applicazioni secondo le modalità di deployment da te stabilite.
  • Controllare lo stato di integrità delle applicazioni e gestire le correzioni con posizionamento, riavvio, replica e scalabilità automatici.

Kubernetes, tuttavia, fa affidamento su altri progetti per fornire appieno questi servizi orchestrati. Con l'aggiunta di altri progetti open source, puoi sfruttare al meglio il potenziale di Kubernetes. Tra i progetti indispensabili sono inclusi:

  • Registro, attraverso progetti come Atomic Registry o Docker Registry.
  • Rete, attraverso progetti come OpenvSwitch ed edge routing intelligente.
  • Telemetria, attraverso progetti come heapster, kibana, hawkular ed elastic.
  • Sicurezza, attraverso progetti come LDAP, SELinux, RBAC e OAUTH con livelli multi-tenancy.
  • Automazione, con l'aggiunta di playbook Ansible per l'installazione e la gestione del ciclo di vita dei cluster.
  • Servizi, attraverso un esaustivo catalogo che offre contenuti per i modelli di app più comuni.

Il linguaggio di Kubernetes

Ogni tecnologia presenta una serie di termini specifici che possono rappresentare un ostacolo. Analizziamo alcuni dei termini più comuni per capire meglio Kubernetes.

Master: la macchina che controlla i nodi Kubernetes. È il punto di origine di tutte le attività assegnate.

Nodi: queste macchine eseguono le attività assegnate richieste. Sono controllate dal nodo master di Kubernetes.

Pod: un gruppo di uno o più container distribuiti su un singolo nodo. Tutti i container presenti in un pod condividono indirizzo IP, IPC, nome host ed altre risorse. I pod astraggono la rete e lo storage dal container sottostante, consentendoti di spostare i container nei cluster con maggiore facilità.

Controller di replica: controlla il numero di copie identiche di un pod che devono essere eseguite in un punto preciso sul cluster.

Servizio: disaccoppia le definizioni del lavoro dai pod. I proxy di servizio di Kubernetes ricevono automaticamente le richieste di servizio al pod corretto, indipendentemente dagli spostamenti nel cluster, anche nel caso in cui esso sia stato riposizionato.

Kubelet: questo servizio viene eseguito sui nodi, legge i manifest del container e garantisce che i container definiti vengano avviati ed eseguiti.

kubectl: lo strumento di configurazione della riga di comando di Kubernetes.


Uso di Kubernetes in produzione

Kubernetes è open source e in quanto tale, non è una tecnologia dotata di un supporto strutturato in maniera formale a cui affidare il tuo business. Eventuali problemi con l'implementazione di Kubernetes in fase di produzione metterebbero in difficoltà la tua azienda e i tuoi clienti.

Con Red Hat OpenShift, superare questi ostacoli è possibile. OpenShift aggiunge altri vantaggi a Kubernetes. OpenShift include tutti i componenti aggiuntivi che rendono Kubernetes dinamico e utilizzabile dalle aziende, tra cui: registro, rete, telemetria, sicurezza, automazione e servizi. Con OpenShift, i tuoi sviluppatori possono creare nuove app containerizzate, ospitarle e distribuirle nel cloud con la scalabilità, il controllo e l'orchestrazione necessari per permetterti di lanciare le tue iniziative sul mercato prima della concorrenza.

È importante ricordare che OpenShift è una piattaforma supportata e sviluppata dal leader dell'open source, Red Hat.


Kubernetes si adatta alla tua infrastruttura

Kubernetes diagram

Kubernetes viene eseguito su un sistema operativo (Red Hat Enterprise Linux Atomic Host, ad esempio) e interagisce con pod di container eseguiti sui nodi. Il nodo master di Kubernetes riceve i comandi da un amministratore (o team DevOps) e trasmette le istruzioni ai nodi sottostanti. Questo passaggio avviene per una serie di servizi e consente di stabilire automaticamente quale nodo è più adatto per un'attività. A quel punto assegna le risorse e i pod a quel nodo per eseguire il lavoro richiesto.

Quindi, da un punto di vista dell'infrastruttura, la differenza sul modo in cui vengono gestiti i container è minima. Il controllo sui container avviene a un livello superiore, consentendo un maggiore controllo senza dover gestire ogni singolo container o nodo. Resta soltanto la necessità di assegnare un nodo master Kubernetes e definire nodi e pod.

Il ruolo di Docker

La tecnologia docker mantiene le proprie funzioni. Quando Kubernetes assegna un pod a un nodo, il kubelet su quel nodo chiede a docker di lanciare i container specificati. Quindi, il kubelet legge in maniera continua lo stato di quei container da docker e aggrega le informazioni nel nodo master. Docker invia i container sul nodo, avvia e arresta normalmente i container. La differenza è che un sistema automatizzato chiede a docker di eseguire queste operazioni, anziché assegnarle a un amministratore, il quale dovrebbe eseguirle manualmente su tutti i nodi, in tutti i container.

Scopri altri vantaggi offerti dai container