Kubernetes Operator

Per garantire flessibilità e scalabilità Kubernetes offre funzionalità iniziali limitate. I K8s Operator sono estensioni software che sfruttano le API di Kubernetes per estenderne il comportamento. Cosa c’è da sapere sul loro funzionamento e quali sono i vantaggi concreti?

Kubernetes ha un asso nella manica che lo rende ancora più utile, potente e flessibile. Quell'asso si chiama Operator. Ed è reso possibile dal fatto che Kubernetes è stato progettato fin dall’inizio per l'automazione, che è integrata direttamente nel cuore stesso del software. Con Kubernetes, infatti, si possono automatizzare non solo la distribuzione e l'esecuzione di workload ma anche il modo con il quale Kubernetes stesso lo fa. 

Per questo motivo gli Operator sono così potenti: consentono infatti di far funzionare in maniera automatica cluster e sistemi complessi sulla base di una serie di pattern e di principi. Gli Operator, cioè, sono dei pattern che consentono di estendere il comportamento del cluster senza modificare il codice di Kubernetes grazie alle API di quest’ultimo, che fungono infatti da controller di risorse personalizzate. 

Per capire a cosa serve un Operator occorre prima capire cos'è, e cioè capire come funziona Kubernetes e perché gli Operator sono così utili.

Perché Kubernetes ha bisogno degli Operator

Se stai leggendo questo articolo probabilmente conoscerai già Kubernetes. Facciamo solo un breve ripasso per capire come si inseriscono gli Operator nella sua logica. 

Kubernetes è un software open source per l'orchestrazione dei container, cioè per automatizzare il deployment, il dimensionamento e la gestione dei carichi di lavoro su container. Creato da Google nel 2014 - ispirato al proprio sistema di orchestrazione di workload, Borg - Kubernetes è stato donato alla Cloud Native Computing Foundation. Quest’ultima, parte della Linux Foundation, oggi lo mantiene e lo sviluppa insieme ad altre grandi aziende come Microsoft e Redhat.

Kubernetes segue due principi di base: semplicità e flessibilità da un lato, e la possibilità di rendere automatiche più funzioni possibili dall'altro. Questi sono i suoi principali punti di forza che lo rendono capace di scalare ed essere utilizzabile in contesti e con applicativi estremamente diversi tra loro. 

Tuttavia questi stessi principi ne limitano anche le funzionalità iniziali a un insieme ristretto di comandi e operazioni che sono esposti attraverso delle API. Per fare cose più complesse questo insieme deve essere esteso e vanno create delle automazioni più sofisticate, adatte a singoli applicativi e al loro dominio specifico di azione. È qui che entrano in gioco gli Operator.

Gli Operator di Kubernetes gestiscono la logica delle applicazioni e fanno parte del piano di controllo di Kubernetes. Come tali sono controller che eseguono dei loop per verificare lo stato reale del cluster e quello desiderato, agendo per riconciliarli quando i due stati si stanno allontanando. Semplicità e flessibilità più automazione non solo consentono la creazione degli Operator, ma sono i principi di base che costituiscono le pietre angolari dell’architettura di Kubernetes.

 

Prima di adottare K8s: leggi le best practice e gli errori da evitare!  Scarica il White Paper Guida all'adozione di Kubernetes

 

Cos’è un Kubernetes Operator

Il concetto di Operator è stato introdotto nel 2016 dal team di sviluppo di CoreOS Linux (poi Container Linux).

La definizione di Operator fornita dallo stesso progetto Kubernetes è semplice: "Gli Operator sono delle estensioni software che utilizzano delle custom resources per gestire le applicazioni e le loro componenti". Questo vuol dire che usando gli Operator è possibile considerare un'applicazione, anziché come un insieme di primitive (come Pods, Deployments, Services o ConfigMaps), come un singolo oggetto che espone solo le regolazioni che hanno senso per l'applicazione. 

Si può dire di più, perché in realtà gli Operator consentono di implementare in modo automatico le attività tipiche dei Day-1 (installazione, configurazione, ecc.) e dei Day-2 (riconfigurazione, aggiornamento, backup, failover, ripristino, ecc.) per un software in esecuzione all'interno del cluster Kubernetes, integrandosi in modo nativo con i concetti e le API Kubernetes. 

Questo è  il motivo per cui sono chiamate "applicazioni native di Kubernetes”.Questa definizione può essere anche vista in un altro modo, più operativo. I K8s Operator sono dei controller per il packaging, la gestione e il deploying di applicazioni su Kubernetes. Per farlo, l'Operator utilizza delle Custom Resource (CR) che definiscono la configurazione e lo stato voluto di una specifica applicazione tramite delle Custom Resource Definition (CRD)

Il ruolo dell'Operator è quello di riconciliare lo stato reale dell'applicazione con quello voluto dalla CRD usando un loop di controllo nel quale può automaticamente far scalare, aggiornare o riavviare l'applicazione. In pratica, Kubernetes offre dei comandi base, delle primitive, che possono essere utilizzate dagli Operator per definire azioni più complesse

In definitiva gli Operator sono dei programmi veri e propri che girano nel cluster e interagiscono tramite le API di Kubernetes per automatizzare funzioni più complesse di quelle nativamente gestite da Kubernetes stesso.

Leggi anche: Kubernetes: quali sono i vantaggi per le aziende

K8s Operator: a che cosa serve e quali problemi risolve

Se tutto questo ti suona come un software automatico per l'amministrazione di un sistema, beh, hai ragione. Un Operator se vogliamo è proprio quello: un esperto al quale indicare cosa vogliamo e con quali strumenti, e che poi lavora incessantemente per raggiungere quell'obiettivo

Da questo punto di vista gli Operator sono degli strumenti dichiarativi e non imperativi, perché il nostro ruolo è definire gli obiettivi e le risorse desiderate mentre la loro responsabilità è quella di adeguare il sistema per mantenerlo il più possibile vicino allo stato voluto.

Il numero di cose che possono essere automatizzate tramite un Operator è pressoché infinito, anche se ci sono alcune operazioni tipiche che sono più comuni

  • La possibilità di fare il deploying on demand di una applicazione;
  • Fare backup dello stato di un'applicazione o ripartire da un determinato backup; 
  • Gestire l'aggiornamento di un’applicazione con tutte le sue dipendenze inclusi i nuovi settaggi di configurazione e le modifiche necessarie al database; 
  • Esporre un servizio a delle applicazioni che non supportano le API di Kubernetes.

Sono solo alcune delle possibili applicazioni dei K8s Operator. Il limite di quello che si può fare con gli Operator è legato alle capacità di chi li programma e alle necessità del progetto. 

Mettiamola in questo modo: rispetto a Kubernetes, che permette di gestire un’applicazione utilizzando le sue API (e kubectl), un Operator è un controller che estende le funzionalità delle API e gestisce istanze complesse dell'applicazione al posto dell'utente. Per farlo usa da un lato le risorse proprie di Kubernetes e dall'altro delle competenze specifiche per quella particolare applicazione o dominio. 

In questo modo gli Operator servono per automatizzare l'intero ciclo di vita del software che gestiscono, prendendo in carico le classiche attività da fare per il day 1 e day 2 che, senza automazione, sarebbero attività legate a uno o più operatori umani.

I vantaggi dei Kubernetes Operator

Gli Operator sono molto utili perché sono dei controller specifici per la singola applicazione, che estendono le funzionalità delle API di Kubernetes. In altre parole gli Operator insegnano nuovi trucchi a Kubernetes. Ma quali sono i vantaggi concreti che offrono? Vediamo un elenco dei principali benefici.

  1. Gli Operator permettono di estendere le funzionalità di Kubernetes anche alle applicazioni di tipo stateful e non solo a quelle stateless. E già questo è un notevolissimo vantaggio, perché le applicazioni e i servizi cloud stateful sono molto più complessi da gestire di quelle stateless. Tra gli operatori stateful possiamo segnalare: Prometheus Operator per la soluzione di monitoraggio e Postgres Operator per gestire cluster di database PostgreSQL ad alta disponibilità. 
  2. Standardizzano le attività manuali e creano un approccio all'automazione comune e coerente. 
  3. Gli Operator possono essere facilmente trasportati da un ambiente all'altro e da un progetto all'altro. Questo ha permesso la nascita di un ecosistema con molti Operator più generici scaricabili, configurabili e utilizzabili per progetti diversi, senza bisogno di svilupparli internamente. Più avanti vedremo quali sono gli hub più popolari per trovare Operator generici. 

Quest'ultimo vantaggio non è da sottovalutare. Infatti, la creazione da zero di un Operator non è propriamente facile. Per fortuna ci sono diverse alternative.

Operator prefabbricati e soluzioni Custom

Gli Operator sono decisamente complessi da creare da zero. Richiedono competenze di programmazione (GO preferibilmente, ma possono essere implementati in ogni linguaggio in quanto comunicazioni client/server) e una conoscenza approfondita dei controller nativi di Kubernetes e dei suoi meccanismi di funzionamento (reconciliation loop). 

Esistono però framework che permettono di ridurre questa complessità come:

Per fortuna, come abbiamo visto, gli Operator possono essere trasferiti da un ambiente all'altro e configurati in modo semplice. Per questo motivo è nata una vera e propria cottage economy che ha l'obiettivo di arricchire e semplificare le operazioni di deploy, gestione e dimensionamento delle applicazioni su Kubernetes tramite gli Operator.

Kubernetes Operator: alcuni esempi

Ad oggi, le fonti ufficiali dove poter cercare gli Operator esistenti in modo semplice, sono queste due applicazioni: 

  • Artifact HUB - dove troviamo sia operators che helm charts (CNCF project)
  • Operator Hub - dedicato esclusivamente agli Operator (Redhat project)

Gli Operator ci permettono di trovare soluzioni a problemi molto diversi tra loro. Anziché da una lista di Operator, partiamo da alcune situazioni da risolvere e facciamo alcuni esempi.

Vuoi monitorare il tuo cluster?

Una soluzione end-to-end molto efficiente per il monitoraggio del cluster Kubernetes è basata sullo stack kube-prometheus. Si tratta di una raccolta di manifest Kubernetes, dashboard Grafana e regole Prometheus combinate con documentazione e script che forniscono un monitoraggio di facile utilizzo sfruttando l'Operator Prometheus.

Vuoi automatizzare la gestione dei certificati TLS

In questo caso possiamo utilizzare Cert-manager Kubernetes Operator che permette di ottenere certificati SSL emessi da una lista di certification authority configurate nel cluster. In questo modo possono essere richiesti nuovi certificati al volo a ciascuno degli emittenti e utilizzati nel ciclo di vita dei servizi in maniera automatica.

Vuoi automatizzare la gestione di una service mesh basata su Istio

Con Istio Operator possiamo installare, aggiornare e risolvere problemi di conflitti di Istio automaticamente. Questo Operator ha pochissimi prerequisiti (praticamente solo istioctl) e poi permette non solo di installare ma anche di validare tutte le API. 

L'utilizzo sia in scenari DevOps che SRE permette di automatizzare fin dall'inizio la gestione mesh dei microservizi usati nel cluster Kubernetes: gestione, orchestrazione, sicurezza, comunicazioni e monitoraggio. Dopodiché si potrà rifinire questa iniziale implementazione in maniera non traumatica.

Automatizzare la creazione di risorse su public cloud

Crossplane è un Kubernetes Operator che permette di creare e gestire risorse in cloud tramite la sintassi dichiarativa di Kubernetes, mappando una collezione di CRD, fornite dai crossplane-provider, con i servizi cloud offerti dal vendor specifico. Il tutto è finalizzato all'utilizzo da parte dei team delle applicazioni, che per farlo non hanno bisogno di scrivere alcun codice. Si tratta, in pratica, di automatizzare la creazione di risorse sul cloud pubblico.

Come spiegano gli autori stessi del progetto, che fa parte della CNCF: “abbiamo creato Crossplane per aiutare le organizzazioni a creare i propri cloud come i fornitori di cloud creano i propri: con un control plane.”

Come gestire l’Elastic Cloud nel nostro cluster

L'Elastic Kubernetes Operator - realizzato ufficialmente dal progetto di Elastic - permette di automatizzare Elastic Search e Kibana su Kubernetes con delle configurazioni di deployment molto semplificate e una gestione resa facile. L'Operator supporta sia i Frozen Indices per gli storage di dimensioni maggiori che i Kibana Spaces, Canvas ed Elastic Maps, più la parte di monitoraggio dell'infrastruttura Kubernetes.

Conclusioni

Come abbiamo detto, gli Operator che abbiamo visto fin qui sono solo alcuni esempi. Esistono moltissimi altri Operator: da KNative a Cloud Foundry on Kubernetes fino ad Azure Spring Cloud. E ovviamente ci sono Operator anche per molte altre delle più diffuse tipologie di servizi e applicazioni: Grafana, Jaeger, ArgoCD, MongoDB, Rbac (il modello di Controllo d’accesso basato sui ruoli o Role Based Access Control).

In tutti i casi tuttavia, seppur molto diversi tra loro, vale sempre lo stesso principio. Il vantaggio degli Operator è di espandere le possibilità di automazione di Kubernetes. La presenza di un ampio ecosistema di K8s Operator consente di trovare soluzioni già pronte per la maggior parte dei casi d'uso. 

guida adozione kubernetes