Kubernetes: cosa può fare questo strumento?
I container hanno cambiato radicalmente lo sviluppo di software, ma anche altre aree dell'informatica. Il software funziona con la nuova tecnologia in un ambiente virtuale progettato appositamente. Tutto ciò di cui ha bisogno l'applicazione è e rimane nel container, in modo sicuro e affidabile. Molteplici istanze possono anche funzionare contemporaneamente.
Per poter gestire facilmente questi container, dato che si lavora raramente con uno solo per volta, sono necessari strumenti di supporto. Kubernetes (noto anche come "K8s") è uno strumento di gestione di container che può organizzare anche grandi quantità di container.
- Configurazione automatica dei cluster Kubernetes
- Archiviazione persistente completamente integrata
- Assistenza clienti 24/7
Che cos'è Kubernetes? Storia e obiettivi
Kubernetes è un'applicazione piuttosto recente, ma si è già guadagnata una buona reputazione. Una delle ragioni potrebbe essere la sua relazione con il gigante informatico Google. Infatti è stato proprio Google ad avviare questo progetto open source, a cui hanno collaborato alcuni dei suoi dipendenti, oltre a diversi sviluppatori esterni. Nel 2015 è stata finalmente rilasciata una prima versione di Kubernetes. Ad oggi, lo strumento è compatibile con diverse piattaforme cloud, come Azure o AWS.
L'obiettivo iniziale era però un altro. Punto di partenza di Kubernetes sono stati i sistemi Borg e Omega di Google, che dovevano gestire cluster internamente. Le applicazioni cloud virtuali non erano nemmeno state prese in considerazione a quel tempo. Poi si decise, invece, di pubblicare una versione open source, rendendo pubblico lo sviluppo di Kubernetes.
Kubernetes è scritto nel linguaggio di programmazione sviluppato da Google Go ed è destinato sia all'uso nel cloud, sia su computer o in data center locali. L'interesse nei cloud si riflette anche nell'ulteriore sviluppo del progetto: con l'aiuto di una comunità molto vasta, Google e diverse altre aziende della Cloud Native Computing Foundation stanno portando avanti questo progetto open source.
Il produttore di giochi mobile Niantic ha sviluppato Pokémon GO con l'aiuto di Kubernetes. Potete scoprire di più sulla procedura in questo interessante case study.
Come funziona Kubernetes?
Kubernetes è un sistema di orchestrazione di container. Questo significa che il software non deve creare container, bensì gestirli. Per farlo, Kubernetes si affida all'automazione dei processi, che rende le fasi di test, manutenzione e pubblicazione di applicazioni più facili per gli sviluppatori. L'architettura di Kubernetes consiste in una chiara gerarchia, composta da:
- Container: un container contiene applicazioni e ambienti software.
- Pod: questa unità dell'architettura Kubernetes raccoglie i container che devono lavorare insieme per un'applicazione.
- Nodo: uno o più pod operano su un nodo, che può essere una macchina virtuale o fisica.
- Cluster: in Kubernetes, diversi nodi formano un cluster.
L'architettura Kubernetes si basa, inoltre, sul principio di master e slave. I nodi sono utilizzati come slave, cioè le parti controllate del sistema, che sono sotto la gestione e il controllo del master di Kubernetes.
Uno dei compiti del master è quello di distribuire i pod ai nodi. Il monitoraggio costante permette al master di intervenire non appena un nodo incontra dei problemi e di duplicarlo direttamente per compensare il guasto. Le condizioni attuali vengono sempre confrontate con le condizioni standard e, se necessario, adattate. Tali processi avvengono automaticamente. Il master è anche il punto di accesso per gli amministratori, che possono poi orchestrare i container.
Sia il master sia i nodi sono caratterizzati da una struttura specifica.
- vCPU estremamente vantaggiose e potenti core dedicati
- Massima flessibilità senza periodo contrattuale minimo
- Servizio di assistenza tecnica 24 ore su 24, 7 giorni su 7
Nodo di Kubernetes
Lo slave (o minion) è un server fisico o virtuale su cui sono attivi uno o più container. Il nodo contiene un ambiente runtime per i container. È attivo, inoltre, il cosiddetto Kubelet, ovvero un servizio che consente la comunicazione con il master e avvia e arresta i container. Il cAdvisor è un servizio del Kubelet che registra l'utilizzo delle risorse ed è molto utile per eseguire delle analisi. Infine c'è il Kube-proxy, che funge da load balancer e abilita le connessioni di rete su TCP o altri protocolli.
Master di Kubernetes
Anche il master è un server. Per garantire il controllo e il monitoraggio dei nodi, il Controller Manager lavora sul master. Questo servizio, a sua volta, combina diversi processi:
- Il Node Controller controlla i nodi e reagisce in caso di guasto dei nodi.
- Il Replication Controller assicura che il numero impostato di pod funzioni sempre contemporaneamente.
- L'Endpoints Controller si occupa dell'oggetto endpoint che è responsabile della connessione di servizi e pod.
- I Service Account & Token Controller gestiscono lo spazio dei nomi e creano token di accesso alle API.
Accanto al Controller Manager viene eseguito un database chiamato etcd o database key-value, nel quale è memorizzata la configurazione del cluster di cui è responsabile il master. Lo Scheduler consente al master di distribuire automaticamente i pod ai nodi. La connessione al nodo funziona tramite il server API integrato nel master, che fornisce un'interfaccia REST e scambia informazioni con il cluster tramite JSON. Questo permette ai diversi controller, ad esempio, di accedere ai nodi.
L'orchestrazione di cluster funziona anche con IONOS. Offriamo diversi pacchetti per la creazione individuale di cluster Kubernetes.
Kubernetes e Docker sono concorrenti?
Alla domanda se usare Kubernetes o Docker non è possibile rispondere, dato che i due programmi vengono usati insieme. Docker (o qualsiasi altra piattaforma di container come rkt) è responsabile anche in Kubernetes della combinazione e dell'esecuzione dei container. Kubernetes accede a questi container e orchestra o automatizza i processi, ma non può creare autonomamente dei container.
Esiste invece una certa concorrenza con Docker Swarm, uno strumento di orchestrazione del produttore di Docker. Anche questo strumento funziona con i cluster e offre funzioni simili a Kubernetes.
Trovate ulteriori informazioni sulle differenze e le possibilità di combinazione dei due sistemi nel nostro confronto tra Docker e Kubernetes.
Kubernetes in pratica: applicazione e vantaggi
Kubernetes svolge ormai un ruolo importante nello sviluppo di software, specialmente per quanto riguarda i progetti agili. Il ciclo di sviluppo, test e deployment (e tutte le possibili fasi intermedie) è semplificato dall'orchestrazione dei container. Kubernetes permette di spostare facilmente i container da un livello all'altro e di automatizzare molte fasi di lavoro.
La scalabilità è un fattore cruciale, specialmente in termini di risparmio sui costi e di cloud storage esterni. Kubernetes può, infatti, determinare il modo più efficiente per utilizzare le risorse; in questo modo, invece di mantenere in funzione le macchine non necessarie, può rilasciare queste risorse e utilizzarle per altri compiti o non usarle affatto. Grazie all'autoscaling, Kubernetes fa automaticamente attenzione a non consumare più risorse di quelle effettivamente necessarie. Un dimensionamento rapido è importante anche per altri aspetti: quando si pubblica un software per la prima volta, a volte è impossibile stimare correttamente come sarà l'afflusso. Kubernetes può fornire rapidamente istanze aggiuntive in modo che il sistema non collassi in caso di una domanda superiore alle attese.
Un altro vantaggio di Kubernetes è la possibilità di collegare tra loro diverse piattaforme. Il sistema può, ad esempio, essere utilizzato in un cloud ibrido. In questo caso, il sistema è in parte collocato sui propri server locali e in parte in un centro dati remoto, ovvero il cloud. Questo a sua volta aumenta ulteriormente la scalabilità: se sono necessarie più risorse, queste possono di solito essere prenotate in modo semplice e rapido presso il fornitore del cloud.
Infine, Kubernetes aiuta gli sviluppatori anche a mantenere una visione d'insieme. Ogni container è contrassegnato in modo univoco e si possono ottenere informazioni sullo stato di ogni istanza. Kubernetes include, inoltre, un controllo delle versioni, che consente di monitorare gli aggiornamenti. In generale, la pubblicazione degli aggiornamenti è uno dei principali vantaggi del sistema: le versioni nuove possono essere lanciate senza causare tempi di inattività. A questo scopo, i pod vengono modificati poco a poco piuttosto che contemporaneamente. Questo vale sia per le versioni di prova interne che per il rilascio di nuove versioni agli utenti finali.
Poiché Kubernetes configura molti aspetti dell'orchestrazione in modo indipendente, non ci sono insidie durante il lavoro. Per questo motivo Kubernetes è generalmente considerato un sistema sicuro: guasti sono molto rari, e se qualche volta un pod non dovesse funzionare come previsto, il master di Kubernetes lo rileva immediatamente e lo sostituisce.
Volete lavorare con Kubernetes? Scoprite come usarlo con il nostro tutorial su Kubernetes.