Kubernetes è una piattaforma pensata per gestire applicazioni in container in modo automatico, scalabile e affidabile. Questa serie di articoli raccoglie i concetti base spiegati in modo semplice e adatti a chi parte da zero.
Kubernetes è oggi una delle tecnologie più importanti nel mondo dello sviluppo e del DevOps. È lo standard con cui le aziende gestiscono applicazioni moderne, distribuite e costruite con container.
Le applicazioni moderne non sono più “un programma installato su un server”, ma un insieme di servizi che comunicano tra loro, devono essere aggiornati senza downtime e devono reggere carichi variabili. Kubernetes serve proprio a questo: gestire i container in modo automatico, distribuendo il carico, sostituendo componenti guasti e mantenendo sempre operativo tutto il sistema.
In pratica, Kubernetes è:- lo strumento più usato per orchestrare container
- una piattaforma adatta ai microservizi
- una tecnologia pensata per produzione e ambienti complessi
- utile a chi gestisce e mantiene applicazioni e servizi online
Per capire perché Kubernetes è diventato così importante è utile ripercorrere l’evoluzione dell’infrastruttura.
Server fisici
Un unico server, spesso sottoutilizzato, con applicazioni installate direttamente sul sistema operativo.- Problemi: conflitti, spreco di risorse, difficoltà di scalare.
Macchine virtuali (VM)
Grazie agli hypervisor è stato possibile creare più sistemi operativi separati sullo stesso server.- Vantaggi: isolamento e maggiore sfruttamento dell'hardware.
- Limiti: ogni VM richiede un proprio sistema operativo consumando molta RAM e CPU.
Container
Con i container (es. Docker) non serve più un sistema operativo completo per ogni applicazione. Sono leggeri, veloci e condividono il kernel con l’host. Perfetti per sviluppare e distribuire rapidamente.Kubernetes
Quando i container diventano tanti, su più server, serve un “direttore d’orchestra”. Kubernetes decide dove eseguire i container, li controlla, li sostituisce se cadono e distribuisce il traffico. È qui che nasce il vero vantaggio dell’orchestrazione.
Come funziona Kubernetes
Control Plane (Master Node)
- API Server: tutta la configurazione nel cluster kubernetes passa attraverso un nodo master con il processo chiamato server API:
- una interfaccia utente
- una dashboard kubernetes
- un'API che potrebbe essere uno script o una richiesta curl
- uno strumento a riga di comando come kubectl
- Scheduler: pianifica i container su diversi nodi in base al carico di lavoro e le risorse del server disponibili su ciascun nodo. Andrà ad allocare i nostri workload, i nostri microservizi, sulle macchine kubelet.
- Controllers monitora il cluster. Sono diversi applicativi che:
- verificano lo stato del cluster interagendo con l'API server
- verificano lo stato desiderato dall'utente e quello attuale sul cluster e vanno ad intraprendere delle azioni affinchè il cluster possa andare a convergere verso lo stato desiderato. Ad esempio, possiamo avere un'istanza di un microservizio il quale interagirà in maniera sottostante con una persistenza, un database.
- etcd: un archivio di backup di Kubernetes che mantiene in qualsiasi momento lo stato corrente del cluster kubernetes. All'interno ha tutti i dati di configurazione e tutti i dati di stato di ciascun nodo e ciascun contenitore all'interno di quel nodo. Il backup e il ripristino è realizzato dagli snapshot etcd. Un archivio dati di tipo chiave/valore di tipo distribuito.
Sono il cervello del nostro cluster, sempre di numero dispari, generalmnente uno o più di uno per avere affidabilità, questo perché etcd (il database distribuito che memorizza lo stato del cluster usa un meccanismo di quorum per prendere le decisioni) e con un numero dispari di membri, il cluster può sempre raggiungere un quorum anche se alcuni nodi cadono. Sono i nodi che vanno a coordinare le operazioni sul nostro cluster.
Kubernetes è un sistema di tipo dichiarativo quindi specificare lo stato desiderato con delle definizioni generalmente espresse in yaml e attraverso i nodi master andrà a convergere verso lo stato desiderato.
I componenti fondamentali dei nodi master:Worker Node
- Kubelet: è un applicativo che permette di interconnettere i Worker Node con i Master Node e permette di intraprendere delle azioni su ogni nodo. Ogni Kubelet è responsabile per il suo nodo e permetterà operazioni come ad esempio far partire o far terminare un container. Kubelet è un processo Kubernetes che consente ai cluster di parlare tra loro ed eseguire attività sui nodi come l'esecuzione di processi applicativi su ciascun nodo worker
- Kube-Proxy: gestisce il networking
- Container Runtime: ad esempio Containerd
Se i nodi master possono essere pensati come il cervello e i nodi devono essere di numero dispari, i nodi worker possono essere di numero dispari o pari e sono i nodi dove girano le applicazioni, hanno la caratteristica di far girare i container, i microservizi, che sono stati schedulati dal componente scheduler all'interno dei nodi master.
I componenti fondamentali dei nodi master:Gli oggetti fondamentali di Kubernetes
Gli oggetti fondamentali di Kubernetes come Pod, Deployment, Service, Ingress, ConfigMap, Secret, Volumi e StatefulSet non risiedono in un nodo specifico. Sono gestiti dal Control Plane e distribuiti automaticamente sui nodi worker in base alle esigenze del cluster.
Pod
L’unità base: contiene uno o più container che condividono rete e storage.
Deployment
Gestisce la vita dei Pod: quanti devono esistere, come aggiornarli, come ricrearli se cadono.
Service
Espone i Pod all’interno del cluster e gestisce il bilanciamento del carico. Un Service fornisce un IP stabile che non cambia anche se i Pod vengono ricreati.
Il Service non è uno per ogni Pod, ma espone un gruppo di Pod che svolgono la stessa funzione. Se un Pod muore e Kubernetes ne crea uno nuovo, il Service continua a funzionare con lo stesso IP e lo stesso endpoint, senza richiedere modifiche alle applicazioni che lo utilizzano.
Ingress
Permette di accedere ai servizi via HTTP/HTTPS usando domini e regole di routing.
ConfigMap
Utilizzati per configurare le applicazioni. Le ConfigMap contengono dati non sensibili.
Secret
simile a ConfigMap ma con la differenza che viene utilizzato per memorizzare dati segreti come archiviare le credenziali non in un formato di testo semplice ma in BASE64 in formato codificato.Utilizzati per configurare le applicazioni. I Secret contengono dati sensibili (es. password).
Volumi
Servono per conservare i dati anche se i Pod vengono ricreati.
StatefulSet
Se una delle repliche del Pod dell'applicazione muore, il service inoltrerà le richieste a un altro in modo che l'applicazione sia accessibile ancora per l'utente. Il Pod del database se muore anche l'applicazione non sarebbe accessibile, quindi abbiamo bisogno anche di una replica del database, tuttavia non possiamo replicare il database utilizzando un deployment. Lo Statefulset è pensato prr applicazioni come database o qualsiasi altra applicazione stateful database e no deployment: deployment per stateless apps e stafulset per stateful apps o database


