Guida Rubrica KUBE 1: Introduzione a Kubernetes

Kode

Utente Emerald
10 Dicembre 2013
1,226
81
371
623

kube_1.jpg
I. Prefazione
Questa guida è dedicata principalmente ad informatici che, nel loro ciclo di studi, si sono appassionati al mondo delle reti dei calcolatori. Nello specifico andremo a parlare di Kubernetes, una soluzione in ambito IT completamente gratuita. La rubrica è divisa in vari capitoli che affronta i differenti concetti dell'argomento nel seguente ordine:

II. Capitoli
1. Introduzione a Kubernetes: cos'è, infrastruttura su cui si basa, vantaggi, caratteristiche e nomenclatura.
2.
Architettura di Kubernetes: Architettura Cluster, Container, Pods, Admin Cluster, Storage e Scheduling.
3. Configurazione di un ambiente Kubernetes: Set up, configurazione dei container, dei pods ed esecuzione di applicazioni.
4. Creazione della prima applicazione su Kubernetes: Hello MiniKube!
5. Creazione di un'applicazione stateless su Kubernetes
(*) La rubrica potrebbe subire delle estensioni in caso il progetto riceva un buon feedback.
1. Cos'è Kubernetes?

Kubernetes è una piattaforma scalabile, indipendente e open-source in grado di gestire carichi di lavoro massivi attraverso l'utilizzo di applicazioni o servizi eseguiti all'interno di container indipendenti. Tale piattaforma viene utilizzata principalmente per automatizzare servizi remoti andando ad assicurare l'affidabilità e la scalabilità dei servizi in esecuzione.


2. Infrastruttura basata sui Container

Prima di approfondire l'architettura su cui si basa Kubernetes, andiamo ad analizzare la sua struttura di base. Nello specifico andremo a parlare dell'infrastruttura basata su container e del deployment delle applicazioni all'interno di essi.

La struttura su cui si fonda Kubernetes è stratificata. Abbiamo alle fondamenta l'hardware e il sistema operativo che identificano le componenti di base di una macchina che esegue le applicazioni mantenute all'interno di container. I container sono simili alle macchine virtuali ma presentano un sistema di isolamento più leggero. Questo permette di riuscire a far comunicare più container tra di loro andando ad utilizzare lo strato sottostante chiamato Container Runtime Layer.

Quando si vuole eseguire un'applicazione su un container, bisogna che il gestore dei container (Kubernetes nel nostro caso), abbia delle immagini delle applicazioni che possano essere eseguiti all'interno di processi rappresentanti una istanza di quel programma dentro un container dedicato.

Screenshot 2020-09-19 at 19.55.56.png

1. Infrastruttura di base di Kubernetes

Caratteristiche:

Le caratteristiche di Kubernetes sono:

  • Scalabilità: Un sistema di questo genere può generare più copie della stessa applicazione (partendo dalla sua immagine) in modo da distribuire il carico di lavoro su più container (ognuno con un processo legato all'applicazione in sovraccarico).
  • Portabilità: Una immagine riesce ad essere eseguita su un container che si appoggia su qualsiasi sistema operativo. Quindi se abbiamo una immagine di un'applicazione A, essa può essere eseguita, per esempio, in un container su Ubuntu e un container su Windows.
  • Usabilità: I vari container sono indipendenti, questo significa che la gestione di ogni singolo container è fine a se stessa, non bisogna tener conto delle dipendenze al di fuori del container stesso.
  • Affidabilità: In sistemi legati a microservizi o gestione di risorse distribuite su più container, un malfunzionamento in fase di runtime su uno dei container non è rilevante per il sistema complessivo, poiché diventa self-tolerance.
  • Astrazione: Il livello di astrazione aumenta dall'esecuzione di un sistema operativo su hardware virtualizzato all'esecuzione di un'applicazione su un sistema operativo utilizzando risorse logiche.
  • Sicurezza: Uno dei punti forti di Kubernetes è la sicurezza, questo perché uno dei problemi con altre piattaforme container-managed è proprio uno scarso livello di sicurezza dovuti alla comunicazione da e verso un container. Kubernetes fornisce meccanismi in grado di analizzare le comunicazioni, intercettare possibili azioni malevoli e bloccarle ancor prima della loro esecuzione.
  • Persistenza: Vedremo successivamente come sia possibile utilizzare servizi di storaging condivisi tra i vari container in modo da poter adattare Kubernetes verso database distribuiti e Cloud.

2.1 Vantaggi

Kubernetes si incentra sull'automatizzazione della gestione dei servizi, con essa 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.


Per semplificare, 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.

3. Glossario dei termini nativi di Kubernetes

Concludiamo il capitolo andando a definire alcuni termini comuni nel mondo Kubernetes che, se compresi, possono evitare alcuni ostacoli durante lo studio e la comprensione della piattaforma.

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.


Fonti:
(Documentazione Ufficiale - Kubernetes) https://kubernetes.io/docs/home/
(Red Hat - Vantaggi di Kubernetes) https://www.redhat.com/it/topics/containers/what-is-kubernetes

>_ kode
 
Ho usato kubernetes in un ambiente aziendale interno. Ho avuto modo di poter manipolare vari PV, però sinceramente non mi sono concentrato molto sui PVC annessi (compito dato ad un'altro mio collega del mio team).
Più avanti, se la guida riscuoterà successo, cercherò di fare un capitolo dedicato (o anche due, data la vastità degli argomenti...)
Se hai qualche problema con kubernetes nei relativi PV o tra i vari PVC ti consiglio di aprire un thread apposito cosi da poter condividerlo con il resto della community di Inforge.