Kubernetes operatori: kā palaist statusa lietojumprogrammas

Problēma ar statusful lietojumprogrammām Kubernetes

Lietojumprogrammu un pakalpojumu konfigurÄ“Å”ana, palaiÅ”ana un turpmāka mērogoÅ”ana ir vienkārÅ”a, ja runa ir par gadÄ«jumiem, kas klasificēti kā bezvalstnieki, t.i. nesaglabājot datus. Šādus pakalpojumus ir ērti palaist Kubernetes, izmantojot tā standarta API, jo viss notiek ā€œno kastesā€: pēc standarta konfigurācijām, neiesaistot nekādu specifiku vai maÄ£iju.

VienkārÅ”i sakot, lai konteineru klasterÄ« palaistu vēl piecas aizmugursistēmas kopijas PHP/Ruby/Python, jums tikai piecas reizes ir jāiestata jauns serveris un jākopē avoti. Tā kā attēlā ir gan avota kods, gan sākuma skripts, bezvalsts lietojumprogrammas mērogoÅ”ana kļūst pavisam vienkārÅ”a. Kā konteineru un mikropakalpojumu arhitektÅ«ras fani labi zina, grÅ«tÄ«bas sākas ar to statusa saturoŔās lietotnes, t.i. ar datu noturÄ«bu, piemēram, datubāzēm un keÅ”atmiņām (MySQL, PostgreSQL, Redis, ElasticSearch, Cassandra...). Tas attiecas gan uz programmatÅ«ru, kas neatkarÄ«gi ievieÅ” kvoruma kopu (piemēram, Percona XtraDB un Cassandra), gan uz programmatÅ«ru, kurai nepiecieÅ”amas atseviŔķas pārvaldÄ«bas utilÄ«tas (piemēram, Redis, MySQL, PostgreSQL...).

GrÅ«tÄ«bas rodas tāpēc, ka vairs nepietiek ar pirmkodu un pakalpojuma palaiÅ”anu - jums ir jāveic vēl dažas darbÄ«bas. Vismaz kopējiet datus un/vai pievienojieties klasterim. PrecÄ«zāk, Å”iem pakalpojumiem ir nepiecieÅ”ama izpratne par to, kā tos pareizi mērogot, atjaunināt un pārkonfigurēt bez datu zuduma vai Ä«slaicÄ«gas nepieejamÄ«bas. Å o vajadzÄ«bu ņemÅ”anu vērā sauc par ā€œdarbÄ«bas zināŔanāmā€.

CoreOS operatori

Lai "ieprogrammētu" darbÄ«bas zināŔanas, pagājuŔā gada beigās CoreOS projekts ieviesa ā€œjauna programmatÅ«ras klaseā€ Kubernetes platformai ā€“ Operatori (no angļu valodas ā€œoperationā€, t.i., ā€œoperationā€).

Operatori, kas izmanto un paplaÅ”ina Kubernetes pamatiespējas (t.sk. StatefulSets, skatiet tālāk norādÄ«to atŔķirÄ«bu) ļauj DevOps speciālistiem pievienot lietojumprogrammas kodam darbÄ«bas zināŔanas.

Operatora mērÄ·is ā€” nodroÅ”ināt lietotājam API, kas ļauj pārvaldÄ«t vairākas statusnoturÄ«gas lietojumprogrammu entÄ«tijas Kubernetes klasterÄ«, nedomājot par to, kas ir zem pārsega (kādus datus un ko ar tiem darÄ«t, kādas komandas vēl ir jāizpilda, lai uzturētu klasteru ). Faktiski Operators ir paredzēts, lai pēc iespējas vienkārÅ”otu darbu ar lietojumprogrammu klasterÄ«, automatizējot to darbÄ«bas uzdevumu izpildi, kas iepriekÅ” bija jāatrisina manuāli.

Kā darbojas operatori

ReplicaSets Kubernetes ļauj norādÄ«t vēlamo darbÄ«go podiņu skaitu, un kontrolieri nodroÅ”ina to skaita saglabāŔanu (izveidojot un dzÄ“Å”ot podus). Operators darbojas lÄ«dzÄ«gi, pievienojot standarta Kubernetes resursam un kontrolierim darbÄ«bas zināŔanu kopu, kas ļauj veikt papildu darbÄ«bas, lai atbalstÄ«tu nepiecieÅ”amo lietojumprogrammu entÄ«tiju skaitu.

Kā tas atŔķiras no StatefulSets, kas paredzētas lietojumprogrammām, kurām klasterim ir jānodroÅ”ina statusu saturoÅ”ie resursi, piemēram, datu glabāŔana vai statiskie IP? Šādām lietojumprogrammām operatori var izmantot StatefulSets (nevis ReplicaSets) kā pamats, piedāvājums papildu automatizācija: veikt nepiecieÅ”amās darbÄ«bas avāriju gadÄ«jumā, izveidot dublējumus, atjaunināt konfigurāciju utt.

Tātad, kā tas viss darbojas? Operators ir pārvaldnieka dēmons, kas:

  1. abonē notikumu API Kubernetes;
  2. saņem no tā datus par sistēmu (par to ReplicaSets, pods, Pakalpojumi un tā tālāk.);
  3. saņem datus par TreÅ”o puÅ”u resursi (skatiet piemērus zemāk);
  4. reaģē uz izskatu/pārmaiņām TreÅ”o puÅ”u resursi (piemēram, lai mainÄ«tu izmēru, mainÄ«tu versiju un tā tālāk);
  5. reaģē uz izmaiņām sistēmas stāvoklī (par tās ReplicaSets, pods, Pakalpojumi un tā tālāk.);
  6. vissvarīgākais:
    1. aicina Kubernetes API izveidot visu nepiecieŔamo (atkal savu ReplicaSets, pods, Pakalpojumi...),
    2. veic kādu maÄ£iju (vienkārŔāk var domāt, ka operators pats ieiet podiņos un izsauc komandas, piemēram, lai pievienotos klasterim vai atjauninātu datu formātu, atjauninot versiju).

Kubernetes operatori: kā palaist statusa lietojumprogrammas
Faktiski, kā redzams attēlā, Kubernetes vienkārÅ”i tiek pievienota atseviŔķa lietojumprogramma (parasta IzvietoÅ”anas с ReplicaSet), ko sauc par operatoru. Tas dzÄ«vo parastā pākstÄ« (parasti tikai vienā) un, kā likums, ir atbildÄ«gs tikai par to Vārdu telpa. Å Ä« operatora lietojumprogramma ievieÅ” savu API - lai gan ne tieÅ”i, bet caur TreÅ”o puÅ”u resursi in Kubernetes.

Tādējādi pēc tam, kad esam izveidojuÅ”i Vārdu telpa Operator, mēs varam to papildināt TreÅ”o puÅ”u resursi.

Piemērs etcd (sīkāku informāciju skatīt zemāk):

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

Elasticsearch piemērs:

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

Prasības operatoriem

CoreOS formulēja galvenos modeļus, ko inženieri ieguva, strādājot pie operatoriem. Neskatoties uz to, ka visi operatori ir individuāli (izveidoti konkrētai lietojumprogrammai ar savām Ä«paŔībām un vajadzÄ«bām), to izveidei ir jābalstās uz sava veida ietvaru, kas izvirza Ŕādas prasÄ«bas:

  1. UzstādīŔana jāveic, izmantojot vienu IzvietoŔanas: kubectl create -f SOME_OPERATOR_URL/deployment.yaml - un neprasa papildu darbības.
  2. Instalējot operatoru Kubernetes, ir jāizveido jauns treŔās puses tips (TreŔās puses resurss). Lai palaistu lietojumprogrammu gadÄ«jumus (klasteru gadÄ«jumus) un turpinātu to pārvaldÄ«bu (versiju atjaunināŔana, izmēru maiņa utt.), lietotājs izmantos Å”o veidu.
  3. Kad vien iespējams, jāizmanto Kubernetes iebÅ«vētie primitÄ«vie, piemēram, Pakalpojumi Šø ReplicaSetsizmantot labi pārbaudÄ«tu un saprotamu kodu.
  4. NepiecieŔama operatoru atgriezeniskā saderība un atbalsts vecākām lietotāju izveidoto resursu versijām.
  5. Ja operators tiek noņemts, paÅ”ai lietojumprogrammai jāturpina darboties bez izmaiņām.
  6. Lietotājiem jāspēj definēt vēlamo lietojumprogrammas versiju un organizēt lietojumprogrammas versiju atjauninājumus. ProgrammatÅ«ras atjauninājumu trÅ«kums ir izplatÄ«ts darbÄ«bas un droŔības problēmu avots, tāpēc operatoriem ir jāpalÄ«dz lietotājiem Å”ajā jautājumā.
  7. Operatori jāpārbauda ar tādu rīku kā Chaos Monkey, kas identificē iespējamās kļūmes podiņos, konfigurācijās un tīklā.

etcd operators

Operatora ievieÅ”anas piemērs - etcd operators, sagatavots Ŕīs koncepcijas izsludināŔanas dienā. Etdd klastera konfigurācija var bÅ«t sarežģīta, jo ir jāuztur kvorums, jāpārkonfigurē klastera dalÄ«ba, jāizveido dublējumkopijas utt. Piemēram, manuāla etcd klastera mērogoÅ”ana nozÄ«mē, ka jums ir jāizveido DNS nosaukums jaunam klastera dalÄ«bniekam, jāuzsāk jauna etcd entÄ«tija un jābrÄ«dina klasteris par jauno dalÄ«bnieku (etcdctl dalÄ«bnieka pievienoÅ”ana). Operatora gadÄ«jumā lietotājam bÅ«s jāmaina tikai klastera lielums - viss pārējais notiks automātiski.

Un tā kā etcd tika izveidots arÄ« CoreOS, bija diezgan loÄ£iski redzēt, ka vispirms parādās tā operators. Kā viņŔ strādā? Operatora loÄ£ika utt To nosaka trÄ«s komponenti:

  1. Ievērojiet. Operators uzrauga klastera stāvokli, izmantojot Kubernetes API.
  2. AnalÄ«ze. Atrod atŔķirÄ«bas starp paÅ”reizējo un vēlamo statusu (nosaka lietotāja konfigurācija).
  3. DarbÄ«ba. Atrisina konstatētās atŔķirÄ«bas, izmantojot etcd un/vai Kubernetes pakalpojumu API.

Kubernetes operatori: kā palaist statusa lietojumprogrammas

Lai Ä«stenotu Å”o loÄ£iku, Operatorā ir sagatavotas funkcijas Izveidot/iznÄ«cināt (izveidot un dzÄ“Å”ot etcd klastera dalÄ«bniekus) un Resize (klastera dalÄ«bnieku skaita izmaiņas). Tās darbÄ«bas pareizÄ«ba tika pārbaudÄ«ta, izmantojot utilÄ«tu, kas izveidots pēc Chaos Monkey lÄ«dzÄ«bas no Netflix, t.i. nogalinot etcd pākstis nejauÅ”i.

PilnÄ«gai etcd darbÄ«bai operators nodroÅ”ina papildu funkcijas: rezerves (automātiska un lietotājiem neredzama rezerves kopiju izveide - konfigurācijā pietiek noteikt, cik bieži tās jāizveido un cik daudz jāuzglabā - un pēc tam datu atjaunoÅ”ana no tiem) un Upgrade (etcd instalāciju atjaunināŔana bez dÄ«kstāves).

Kā izskatās darbs ar operatoru?

$ 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

PaÅ”reizējais etcd Operator statuss ir beta versija, kuras darbÄ«bai nepiecieÅ”ama Kubernetes 1.5.3+ un etcd 3.0+. Avota kods un dokumentācija (ieskaitot lietoÅ”anas instrukcijas) ir pieejama vietnē GitHub.

Ir izveidots vēl viens CoreOS ievieÅ”anas piemērs - Prometejs operators, bet tas joprojām ir alfa versijā (nav visas plānotās funkcijas ir ieviestas).

Statuss un izredzes

Ir pagājuÅ”i 5 mēneÅ”i kopÅ” Kubernetes Operatoru paziņojuma. Oficiālajā CoreOS repozitorijā joprojām ir pieejamas tikai divas implementācijas (etcd un Prometheus). Abi vēl nav sasnieguÅ”i savas stabilās versijas, taču apņemÅ”anās tiek novērota ikdienā.

Izstrādātāji paredz "nākotni, kurā lietotāji instalēs Postgres Operatorus, Cassandra Operatorus vai Redis Operatorus savos Kubernetes klasteros un strādās ar Å”o lietojumprogrammu mērogojamajām entÄ«tijām tikpat viegli, kā Å”odien ir bezvalstnieku tÄ«mekļa lietojumprogrammu kopiju izvietoÅ”ana." Pirmkārt Operatori no treÅ”o puÅ”u izstrādātājiem tieŔām sāka parādÄ«ties:

Lielākajā Eiropas bezmaksas programmatÅ«ras konferencē FOSDEM, kas notika 2017. gada februārÄ« Briselē, Josh Wood no CoreOS paziņoja Operatorus Ziņot (saitē ir pieejams video!), kam vajadzētu veicināt Ŕīs koncepcijas popularitātes pieaugumu plaŔākā Open Source kopienā.

PS Paldies par interesi par rakstu! Abonējiet mÅ«su centru, lai nepalaistu garām jaunus materiālus un receptes par DevOps un GNU/Linux sistēmu administrÄ“Å”anu - tos publicēsim regulāri!

Avots: www.habr.com

Pievieno komentāru