Secondo il principio di programmazione KISS (keep it short and simple), un sistema va sviluppato mantenendolo più semplice possibile. Ciò vale anche per Kubernetes, un software Open Source che svolge bene il proprio compito, cioè l’orchestrazione di container in tutti gli ambienti di sviluppo, testing e produzione. Proprio perché aderente a questo principio di semplicità e specializzazione, Kubernetes non si occupa di altre operazioni che, invece, demanda ai cosiddetti Kubernetes operators.
Cosa sono i Kubernetes Operators
I Kubernetes Operators eseguono in automatico operazioni che altrimenti andrebbero svolte in modalità manuale dal team DevOps. Queste operazioni riguardano, ad esempio, la manutenzione automatica di sistemi complessi, come può essere la gestione di un cluster: l’operatore Kubernetes può regolare la scalabilità del cluster, eseguirne il backup e, cosa particolarmente importante, gestirne la reconciliation, ossia assicurare che lo stato attuale del sistema, quindi lo stato effettivo del cluster, corrisponda con lo stato desiderato.
Scendendo più nel dettaglio tecnico, come illustra lo stesso progetto Open Source, i Kubernetes Operators sono estensioni software di Kubernetes, e in qualità di controller fanno uso di risorse personalizzate (CR – custom resources) per gestire le applicazioni e i relativi componenti.
Kubernetes Operators, dove trovarli già pronti per l’uso
Online sono largamente disponibili operatori Kubernetes già pronti all’uso. Ad esempio, navigando nel portale OperatorHub.io, dove si trova il repository creato dalla comunità Kubernetes per la condivisione degli operatori, è possibile reperire operatori Kubernetes in svariate categorie applicative: intelligenza artificiale e machine learning, database, tool di sviluppo, monitoraggio, networking, sicurezza, storage, e quant’altro. Un altro repository è il catalogo dell’ecosistema di Red Hat, con i Certified OpenShift operators, che aiutano nell’installazione di software complesso e distribuito su OpenShift.
I Kubernetes Operators di classe enterprise consentono di ottenere anche il supporto del relativo vendor. La società Crunchy Data, ad esempio, fornisce PGO (Postgres Operator), un operatore Kubernetes per il database Open Source PostgreSQL. PGO rappresenta in sostanza una soluzione dichiarativa Postgres per gestire in automatico cluster PostgreSQL su Kubernetes. Su questo tema, comunque, va specificato che, prima di affidare a Kubernetes la gestione di workload stateful (con persistenza dei dati) come i database Postgres, è bene chiedersi se sia davvero il caso di farlo, in quanto non sempre questa può rivelarsi la soluzione migliore e più sicura. I workload di tipo database amministrano infatti dati, quindi elementi molto sensibili e critici dell’infrastruttura; inoltre, i workload relativi a database relazionali come Postgres si possono tranquillamente amministrare attraverso macchina virtuale (VM), perché non hanno particolare necessità di “scalare” in maniera elastica, come invece accade, ad esempio, per i workload Apache Kafka, che è certamente corretto gestire utilizzando Kubernetes.
Apache Kafka è infatti una piattaforma Open Source di event streaming che si caratterizza per la creazione di cluster ad elevata scalabilità.
Sempre parlando di disponibilità online degli operatori, tra i Kubernetes Operators comunitari, spesso utilizzati anche da Sourcesense, si può citare Prometheus Operator, che amministra i cluster Prometheus su Kubernetes. Per inciso, Prometheus è un toolkit Open Source di monitoraggio e segnalazione di sistemi costituiti da microservizi e container.
Un ultimo operatore interessante è Strimzi, in grado di gestire un cluster Apache Kafka su Kubernetes in diverse configurazioni di implementazione. Alcuni Kubernetes Operators, come Prometheus Operator, sono installabili anche tramite Helm, il package manager per Kubernetes.
Sourcesense a seconda delle necessità utilizza anche Kustomize per il deploy di oggetti in Kubernetes, proprio per mantenere più agnosticismo possibile e soddisfare qualsiasi necessità del cliente. “Cliente diverso” talvolta è infatti sinonimo di “ecosistema diverso”.
Framework per Kubernetes Operators
Quando, nell’ecosistema dei Kubernetes Operators disponibili online, non esiste un operatore già sviluppato e pronto per svolgere il compito che si desidera, è sempre possibile decidere di scriverne uno ex novo in autonomia, capace di soddisfare le specifiche necessità: per farlo esistono numerose tipologie di framework, ossia insiemi di strumenti e kit SDK (software development kit), che aiutano nel processo di sviluppo, e tra cui si possono menzionare Java Operator SDK, kubebuilder, Operator Framework.
Tuttavia, seguendo il buon principio di “non reinventare la ruota”, è sconsigliabile scrivere da zero un Kubernetes Operator, quando magari ne esiste uno già pronto (ad esempio, Prometheus Operator, Strimzi), ben supportato e adatto a incontrare i requisiti del proprio business. In questo modo, infatti, si può fare affidamento su un prodotto software che ha una propria storia di sviluppo ben documentata, e può beneficiare del continuo confronto con l’intera community.