Operatori per Kubernetes: cumu eseguisce applicazioni stateful
U prublema cù l'applicazioni stateful in Kubernetes
A cunfigurazione, u lanciu è a scala più avanzata di l'applicazioni è i servizii hè faciule quandu si tratta di casi classificati cum'è senza statu, i.e. senza salvà dati. Hè cunvenutu per eseguisce tali servizii in Kubernetes, utilizendu i so API standard, perchè tuttu succede "fora di a scatula": secondu cunfigurazioni standard, senza implicazione di specificità o magia.
Simply put, to launch five more copies of the backend in PHP/Ruby/Python in a cluster of containers, basta à stallà un novu servitore 5 volte è copià e fonti. Siccomu u codice fonte è u script init sò in l'imaghjini, a scala di una applicazione senza statu diventa cumplettamente elementare. Cum'è l'amatori di cuntenituri è l'architettura di microserviziu sanu bè, a difficultà principia app stateful, i.e. cù persistenza di dati cum'è basa di dati è cache (MySQL, PostgreSQL, Redis, ElasticSearch, Cassandra...). Questu hè appiicatu à u software chì implementa indipindentamente un cluster di quorum (per esempiu, Percona XtraDB è Cassandra), è u software chì necessita utilità di gestione separati (cum'è Redis, MySQL, PostgreSQL ...).
I difficultà si sviluppanu perchè u codice fonte è u lanciamentu di u serviziu ùn sò più abbastanza - avete bisognu di fà un pocu di più passi. À u minimu, copià e dati è / o unisce à u cluster. Più precisamente, questi servizii necessitanu una cunniscenza di cumu scala, aghjurnà è ricunfigurate bè senza perdita di dati o indisponibilità temporale. Pigliendu questi bisogni in contu hè chjamatu "cunniscenza operativa".
Operatori CoreOS
Per "prugrammà" a cunniscenza operativa, a fini di l'annu passatu u prughjettu CoreOS introduttu "una nova classa di software" per a piattaforma Kubernetes - Operatori (da l'inglese "operazione", vale à dì "operazione").
Operatori chì utilizanu è estendenu e capacità core di Kubernetes (incl. StatefulSets, vede a diffarenza quì sottu) permette à i specialisti di DevOps aghjunghje cunniscenze operative à u codice di l'applicazione.
U scopu di l'operatore - furnisce l'utilizatore cù una API chì permette di gestisce parechje entità di l'applicazione stateful in un cluster Kubernetes, senza pensà à ciò chì hè sottu à u cappucciu (chì dati è ciò chì fà cun ellu, quali cumandamenti anu da esse eseguitu per mantene u cluster). ). In fattu, l'Operatore hè pensatu per simplificà u travagliu cù l'applicazione in u cluster quantu pussibule, automatizendu l'esekzione di e funzioni operative chì prima avianu da esse risolte manualmente.
Cumu l'operatori travaglianu
ReplicaSets Kubernetes permette di specificà u numeru desideratu di pods in esecuzione, è i cuntrolli assicuranu chì u so numeru hè mantinutu (creendu è sguassà pods). Un Operatore travaglia in una manera simile, aghjunghjendu un set di cunniscenze operative à una risorsa standard Kubernetes è un controller chì vi permette di realizà azioni supplementari per sustene u numeru necessariu di entità di l'applicazione.
Cumu hè questu sfarente da StatefulSets, cuncepitu per l'applicazioni chì necessitanu chì u cluster li furnisce risorse stateful cum'è l'almacenamiento di dati o IP statichi? Per tali applicazioni, l'operatori ponu aduprà StatefulSets (invece di ReplicaSets) cum'è una basa, offre automatizazione supplementu: eseguite l'azzioni necessarii in casu di crash, fate backups, aghjurnà a cunfigurazione, etc.
Cusì, cumu funziona tuttu questu? L'operatore hè un daemon manager chì:
abbonate à l'API di l'avvenimentu in Kubernetes;
riceve da ellu dati nantu à u sistema (circa u so ReplicaSets, baccelli, Services eccetera.);
riceve dati circa Risorse di terzu (vede l'esempii sottu);
reagisce à l'apparenza / cambiamentu Risorse di terzu (per esempiu, per cambià a dimensione, cambià a versione, etc.);
reagisce à i cambiamenti in u statu di u sistema (circa u so ReplicaSets, baccelli, Services eccetera.);
più impurtanti:
chjama à l'API Kubernetes per creà tuttu ciò chì hà bisognu (di novu, u so propiu ReplicaSets, baccelli, Services...),
esegue una certa magia (per simplificà, pudete pensà chì l'Operatore entra in i podi stessi è chjama cumandamenti, per esempiu, per unisce à un cluster o per aghjurnà u formatu di dati quandu aghjurnà una versione).
In fatti, cum'è pò esse vistu da a stampa, una applicazione separata hè solu aghjunta à Kubernetes (una regula Mudellu с ReplicaSet), chì hè chjamatu Operatore. Vive in un pod ordinariu (di solitu solu unu) è, in regula, hè rispunsevule solu per u so Spaziu di nomi. Questa applicazione operatore implementa a so API - ancu micca direttamente, ma attraversu Risorse di terzu in Kubernetes.
Cusì, dopu avè creatu in Spaziu di nomi Operatore, pudemu aghjunghje Risorse di terzu.
CoreOS hà formulatu i mudelli principali ottenuti da l'ingegneri mentre travagliavanu in Operatori. Malgradu u fattu chì tutti l'Operatori sò individuali (creati per una applicazione specifica cù e so caratteristiche è bisogni), a so creazione deve esse basatu annantu à un tipu di quadru chì impone i seguenti requisiti:
A stallazione deve esse fatta à traversu una sola Mudellu: kubectl create -f SOME_OPERATOR_URL/deployment.yaml - è ùn anu micca bisognu di azioni supplementari.
Quandu si stallanu un Operatore in Kubernetes, deve esse creatu un novu tipu di terzu (Risorse di terze parti). Per lancià e istanze di l'applicazione (istanze di cluster) è più gestite (aghjurnà e versioni, ridimensionamentu, etc.), l'utilizatore aduprà stu tipu.
Sempre chì hè pussibule, duvete aduprà i primitivi integrati in Kubernetes, cum'è Services и ReplicaSetsà aduprà codice bè pruvati è capisci.
Richiede una compatibilità inversa di Operatori è supportu per e versioni più vechje di risorse create da l'utilizatori.
Se l'Operatore hè sguassatu, l'applicazione stessa deve cuntinuà à funziunà senza cambiamenti.
L'utilizatori devenu esse capaci di definisce a versione di l'applicazione desiderata è orchestrate l'aghjurnamenti di a versione di l'applicazione. A mancanza di l'aghjurnamenti di u software hè una fonte cumuna di prublemi operativi è di sicurezza, cusì l'Operatori devenu aiutà l'utilizatori in questa materia.
L'operatori anu da esse pruvati cù un strumentu cum'è Chaos Monkey, chì identificanu eventuali fallimenti in pods, cunfigurazioni è a rete.
Operatore etcd
Esempiu di implementazione di l'operatore - Operatore etcd, preparatu u ghjornu di l'annunziu di stu cuncettu. A cunfigurazione di u cluster d'etcd pò esse cumplessa per a necessità di mantene u quorum, a necessità di cunfigurà l'appartenenza à u cluster, creà backups, etc. Per esempiu, scaling manualmente un cluster etcd significa chì avete bisognu di creà un nome DNS per un novu membru di u cluster, inizià una nova entità etcd, è avvisate u cluster nantu à u novu membru (etcdctl membru aghjunghje). In u casu di l'operatore, l'utilizatori solu bisognu di cambià a dimensione di u cluster - tuttu u restu succede automaticamente.
E postu chì etcd hè statu ancu creatu in CoreOS, era abbastanza logicu per vede u so Operatore cumparisce prima. Cumu travaglia ? Lògica di l'operatore etcd hè determinatu da trè cumpunenti:
Osservà. L'operatore monitoreghja u statu di u cluster cù l'API Kubernetes.
Analisi. Trova differenze trà u statu attuale è quellu desideratu (definitu da a cunfigurazione d'utilizatore).
Azzione. Risolve e differenze rilevate utilizendu l'API di serviziu etcd è / o Kubernetes.
Per implementà sta logica, e funzioni sò state preparate in l'Operatore Crea / Distrughje (creendu è sguassà i membri di u cluster etcd) è Resize (cambiamentu in u numeru di membri di u cluster). A correttezza di u so funziunamentu hè stata verificata utilizendu una utilità creata à a similitudine di Chaos Monkey da Netflix, i.e. uccidendu pods etcd in modu casuale.
Per u funziunamentu cumpletu di etcd, l'operatore furnisce funzioni supplementari: Salvà a basa (creazione automatica è invisibili per l'utilizatori di copie di salvezza - in a cunfigurazione hè abbastanza per determinà quante volte per fà è quante per almacenà - è a risturazione successiva di dati da elli) è aghjurnamentu (aghjurnà installazioni etcd senza downtime).
Cume hè u travagliu cù un Operatore?
$ kubectl create -f https://coreos.com/operators/etcd/latest/deployment.yaml
$ kubectl create -f https://coreos.com/operators/etcd/latest/example-etcd-cluster.yaml
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
etcd-cluster-0000 1/1 Running 0 23s
etcd-cluster-0001 1/1 Running 0 16s
etcd-cluster-0002 1/1 Running 0 8s
etcd-cluster-backup-tool-rhygq 1/1 Running 0 18s
U statutu attuale di l'operatore etcd hè una versione beta, chì richiede Kubernetes 1.5.3+ è etcd 3.0+ per eseguisce. U codice fonte è a documentazione (cumprese l'istruzzioni per l'usu) sò dispunibuli à GitHub.
Un altru esempiu di implementazione da CoreOS hè statu creatu - Operatore Prometheus, ma hè sempre in versione alfa (micca tutte e funzioni pianificate sò state implementate).
Status è prospettive
5 mesi sò passati da l'annunziu di l'Operatori Kubernetes. Ci hè ancu solu duie implementazioni dispunibili in u repositoriu ufficiale di CoreOS (per etcd è Prometheus). Tramindui ùn anu ancu ghjuntu à a so versione stabile, ma i cummissioni sò osservati ogni ghjornu.
I sviluppatori prevedenu "un futuru in quale l'utilizatori installanu Operatori Postgres, Operatori Cassandra o Operatori Redis in i so cluster Kubernetes è travaglià cù l'entità scalabili di queste applicazioni cusì facilmente cum'è l'implementazione di repliche di l'applicazioni web senza statu oghje". Primu Operatori da sviluppatori di terzu veramente cuminciatu à apparisce:
À a più grande cunferenza europea di software liberu FOSDEM, chì hè accaduta in ferraghju 2017 in Bruxelles, Josh Wood da CoreOS hà annunziatu Operatori in raportu (Un video hè dispunibule à u ligame!), Chì duverebbe cuntribuisce à a crescita di pupularità di stu cuncettu in a più larga comunità Open Source.
PS Grazie per u vostru interessu in l'articulu! Abbonate à u nostru hub, per ùn mancassi novi materiali è ricette nantu à DevOps è l'amministrazione di u sistema GNU/Linux - li publicheremu regularmente !