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ì:

  1. abbonate à l'API di l'avvenimentu in Kubernetes;
  2. riceve da ellu dati nantu à u sistema (circa u so ReplicaSets, baccelli, Services eccetera.);
  3. riceve dati circa Risorse di terzu (vede l'esempii sottu);
  4. reagisce à l'apparenza / cambiamentu Risorse di terzu (per esempiu, per cambià a dimensione, cambià a versione, etc.);
  5. reagisce à i cambiamenti in u statu di u sistema (circa u so ReplicaSets, baccelli, Services eccetera.);
  6. più impurtanti:
    1. chjama à l'API Kubernetes per creà tuttu ciò chì hà bisognu (di novu, u so propiu ReplicaSets, baccelli, Services...),
    2. 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).

Operatori per Kubernetes: cumu eseguisce applicazioni stateful
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.

Esempiu per etcd (vede quì sottu per i dettagli):

apiVersion: etcd.coreos.com/v1beta1
kind: Cluster
metadata:
  name: example-etcd-cluster
spec:
  size: 3
  version: 3.1.0

Esempiu per Elasticsearch:

apiVersion: enterprises.upmc.com/v1
kind: ElasticsearchCluster
metadata:
  name: example-es-cluster
spec:
  client-node-replicas: 3
  master-node-replicas: 2
  data-node-replicas: 3
  zones:
  - us-east-1c
  - us-east-1d
  - us-east-1e
  data-volume-size: 10Gi
  java-options: "-Xms1024m -Xmx1024m"
  snapshot:
    scheduler-enabled: true
    bucket-name: elasticsnapshots99
    cron-schedule: "@every 2m"
  storage:
    type: gp2
    storage-class-provisioner: kubernetes.io/aws-ebs

Requisiti per l'operatori

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:

  1. A stallazione deve esse fatta à traversu una sola Mudellu: kubectl create -f SOME_OPERATOR_URL/deployment.yaml - è ùn anu micca bisognu di azioni supplementari.
  2. 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.
  3. Sempre chì hè pussibule, duvete aduprà i primitivi integrati in Kubernetes, cum'è Services и ReplicaSetsà aduprà codice bè pruvati è capisci.
  4. Richiede una compatibilità inversa di Operatori è supportu per e versioni più vechje di risorse create da l'utilizatori.
  5. Se l'Operatore hè sguassatu, l'applicazione stessa deve cuntinuà à funziunà senza cambiamenti.
  6. 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.
  7. 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:

  1. Osservà. L'operatore monitoreghja u statu di u cluster cù l'API Kubernetes.
  2. Analisi. Trova differenze trà u statu attuale è quellu desideratu (definitu da a cunfigurazione d'utilizatore).
  3. Azzione. Risolve e differenze rilevate utilizendu l'API di serviziu etcd è / o Kubernetes.

Operatori per Kubernetes: cumu eseguisce applicazioni stateful

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 !

Source: www.habr.com

Add a comment