Accedi / Registrati Account

Container

I vantaggi di 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. Ecco perché Kubernetes è la piattaforma ideale per l'hosting di applicazioni cloud-native caratterizzate da un'elevata scalabilità, come lo streaming di dati in tempo reale tramite Apache Kafka.

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.


A cosa serve Kubernetes?

Le applicazioni di produzione si espandono su più container, che devono essere distribuiti su più server host. La sicurezza per i container è suddivisa in più livelli, pertanto può risultare complessa, ma Kubernetes può essere d'aiuto. 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 permette di migliorare notevolmente la sicurezza IT.

Kubernetes deve integrarsi anche con reti, storage, sicurezza, telemetria ed altri servizi, per mettere a disposizione un'infrastruttura di 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.


I vantaggi di Kubernetes

Utilizzando Kubernetes nel tuo ambiente, soprattutto se desideri ottimizzare lo sviluppo applicativo per il cloud, 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 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.


Kubernetes e Red Hat OpenShift

Kubernetes è open source e in quanto tale, non è dotato di una struttura di supporto formale o, meglio, di una struttura di supporto a cui poter affidare un business. Eventuali problemi con l'implementazione di Kubernetes in produzione metterebbero in difficoltà la tua azienda 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, tra cui: registro, reti, 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 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.

Docker e Kubernetes

La tecnologia docker mantiene le proprie funzioni. Quando Kubernetes assegna un pod a un nodo, il kubelet presente su quel nodo chiede a docker di avviare 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 i vantaggi dei container Linux