DevOps/SRE

Il ruolo degli operatori di k8 nel mondo DevOps/SRE

Nel mondo Kubernetes ci sono diverse alternative quando si tratta di gestire il ciclo di vita delle applicazioni.

Una delle alternative sono gli Operatori, che sono posizionati come una soluzione per il confezionamento, la distribuzione e la manutenzione delle applicazioni.

Dal punto di vista dello sviluppatore, gli operatori forniscono un mezzo coerente per distribuire il software da distribuire sul cluster.

Dal punto di vista degli ingegneri operativi / SRE, gli operatori facilitano il deployment dell’applicazione e tutte le sue dipendenze.

Dal punto di vista di Kubernetes, qualsiasi applicazione distribuita su un cluster, così come tutte le sue dipendenze, possono essere trattate come risorse personalizzate (che hanno iniziato ad essere utilizzate nella versione 1.2 di Kubernetes), e come tali, estendono l’API del cluster una volta distribuite, fornendo un endpoint da cui interagire con l’applicazione originale (come qualsiasi altra risorsa accessibile dalle API).

Gli operatori sono fondamentalmente la combinazione di queste risorse personalizzate (la nostra app) e i controllori personalizzati (ReplicaSet), essendo questi ultimi quelli che gestiscono i pod che ospitano i contenitori per quanto riguarda il loro avvio, lo scaling e il recupero (spiegherò più avanti altri elementi di questa combinazione).

Intorno al mondo degli Operatori c’è un’importante comunità che condivide il proprio lavoro utilizzando il repository OperatorHub.io. Ha un indice di ricerca che facilita la localizzazione di ciò che stiamo cercando e una struttura basata su Categorie che li raggruppa.

OperatorHub.io vuole assicurarsi che gli Operatori condivisi non solo servano come mezzo per pubblicizzare il lavoro dei contributori, ma che gli utenti che li scaricano possano facilmente iniziare a usare gli Operatori e abbiano procedure che semplificano la loro manutenzione, sia evolutiva che correttiva.

Uno dei principali contributori è Red Hat, che ha sviluppato il Red Hat Operator Framework e contiene l’Operator Lifecycle Manager che è responsabile dell’installazione, della gestione e dell’aggiornamento degli operatori. Ha anche un sistema (Operator Metering) che permette di misurare l’uso delle risorse utilizzate nel cluster (come CPU, memoria e altre risorse, permettendo di calcolare i costi dei servizi di infrastruttura in uso).

Considerando tutti i compiti per scrivere un operatore (creare definizioni di risorse personalizzate, controllori personalizzati, ruoli, account di servizio, immagini di base per la containerizzazione, proprietà dell’applicazione in ConfigMaps, ecc) sarebbe ottimale avere uno strumento che, una volta che abbiamo l’applicazione Kubernetes costruita e in esecuzione nel cluster, legge l’implementazione e costruisce l’operatore. Qui è dove Operator Lifecycle Manager di Red Hat ci fornisce (da linea di comando) una soluzione per creare l’operatore utilizzando il codice in HELM, Ansible o Go. In questo modo saremo in grado di trasformare le applicazioni Kubernetes in Operatori e avere i vantaggi descritti finora.

Considerando le opzioni fornite dal Red Hat Framework, possiamo pensare a 5 livelli di maturità operativa: installazione e aggiornamento delle versioni, capacità di gestione dell’operazione, osservabilità e autogestione.

Questo Red Hat Framework risolve diverse delle principali preoccupazioni di ogni DevOps / SRE:

  • Garantire il funzionamento dei sistemi (anche se sono coinvolti in continui cambiamenti di applicazioni e utenti).
  • Stabilire meccanismi per evitare il degrado e/o l’interruzione dei servizi
  • Riduzione della “fatica” (compiti manuali, o compiti che, pur dovendo essere ripetuti frequentemente, non sono ancora automatizzati e
    sono privi di valore, oltre ad aumentare quantitativamente man mano che il servizio viene scalato).

  • Permettere al modello di automazione di evolversi
      Permettono di avanzare verso modelli di Architettura Immutabili (teniamo conto che una delle caratteristiche degli Operatori è l’Idempotenza, che assicura il suo funzionamento indipendentemente dal numero di volte che lo eseguiamo).

      Altri progetti Red Hat Opensource che potrebbero interessarti: Red Hat