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 la rete, lo storage, la sicurezza, la telemetria ed altri servizi, per fornire 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 risolve molti dei noti problemi relativi 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 tutte le parti della tua infrastruttura di container.


Cosa puoi fare con 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 realizzare completamente 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 ricco catalogo di contenuti che offre i più comuni modelli di app.

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 è dotato di una struttura di supporto formale o, meglio, di una struttura di supporto a cui potresti affidare la tua attività. Se dovessero verificarsi problemi con l'implementazione di Kubernetes in produzione, tu ed i tuoi clienti potreste restare delusi.

È proprio qui che entra in gioco Red Hat OpenShift. OpenShift è Kubernetes per le aziende, ma offre molto di più. OpenShift include tutti i componenti aggiuntivi che rendono Kubernetes dinamico e utilizzabile dalle aziende. I componenti aggiuntivi includono: 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 commercializzare nuove iniziative, in modo rapido e facile.

È importante ricordare che OpenShift è 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 in 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 ad 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 ad un amministratore, il quale deve eseguirle manualmente su tutti i nodi, in tutti i container.

Scopri gli altri vantaggi offerti dai container