Il caso di studio: realizzare una piattaforma per il rilascio di siti web
Per spiegare gli operator e i vantaggi di questo tipo di soluzione, Christian e Simone hanno preso come esempio la realizzazione di una piattaforma che permette il rilascio di siti web. A una prima analisi questa non sembra affatto una applicazione complessa, iniziamo però ad aggiungere alcuni requisiti:
- ogni sito deve essere indipendente e ogni problema al suo interno non deve compromettere il funzionamento degli altri;
- tutti i siti devono essere scalabili (per esempio, un sito che registra un carico extra improvviso deve continuare a funzionare) e veloci;
- la creazione deve essere totalmente dinamica.
Che opzioni abbiamo?
Dimentichiamoci di Kubernetes e affidiamoci a un professionista, per esempio un amministratore di siti web, il quale farebbe tutto il lavoro per noi. Opzione sconsigliata perché non dinamica, oltre che poco “automatica”.
Utilizziamo script che contengono il comando kubectl (comando principale per lanciare comandi verso un cluster Kubernetes) oppure ricorriamo a Helm, uno strumento per la gestione delle risorse Kubernetes (a tal proposito, leggete l’articolo di approfondimento “Helm: gestire in maniera semplice ed efficace i pod Kubernetes” scritto da Simone). Soluzioni del genere sono sicuramente veloci da implementare, ma sarebbero allo stesso tempo poco sicure perché richiederebbero l’esposizione delle API del cluster Kubernetes. Non solo. Queste soluzioni sono poco resilienti e non semplici da modificare, e comporterebbero un monitoraggio manuale, operazione che oltre a essere noiosa è anche tediosa.
E se esponessimo le API del Control Plane? (in un cluster Kubernetes, Control Plane è la risorsa base che permette di modificare il cluster. Sono delle API appunto, utilizzate da Christian e Simone nella demo mostrata durante la sessione). Una soluzione più sicura rispetto al precedente, ma non di semplice implementazione. Anche la fase di monitoraggio risulterebbe complessa.
Potremmo usare il pattern Operator. Sarebbe una strada totalmente sicura dato che non richiederebbe di esporre le API di Kubernetes e l’intera applicazione verrebbe eseguita sul cluster su cui si sta lavorando; è inoltre un pattern semplice da utilizzare che, tra le altre caratteristiche, gestisce molte complessità “out of the box”.
Vediamo quindi cosa vuol dire Operator e come funziona.