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:
abonÄ notikumu API Kubernetes;
saÅem no tÄ datus par sistÄmu (par to ReplicaSets, pods, Pakalpojumi un tÄ tÄlÄk.);
saÅem datus par TreÅ”o puÅ”u resursi (skatiet piemÄrus zemÄk);
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);
reaÄ£Ä uz izmaiÅÄm sistÄmas stÄvoklÄ« (par tÄs ReplicaSets, pods, Pakalpojumi un tÄ tÄlÄk.);
vissvarÄ«gÄkais:
aicina Kubernetes API izveidot visu nepiecieŔamo (atkal savu ReplicaSets, pods, Pakalpojumi...),
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).
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.
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:
UzstÄdÄ«Å”ana jÄveic, izmantojot vienu IzvietoÅ”anas: kubectl create -f SOME_OPERATOR_URL/deployment.yaml - un neprasa papildu darbÄ«bas.
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.
Kad vien iespÄjams, jÄizmanto Kubernetes iebÅ«vÄtie primitÄ«vie, piemÄram, Pakalpojumi Šø ReplicaSetsizmantot labi pÄrbaudÄ«tu un saprotamu kodu.
NepiecieÅ”ama operatoru atgriezeniskÄ saderÄ«ba un atbalsts vecÄkÄm lietotÄju izveidoto resursu versijÄm.
Ja operators tiek noÅemts, paÅ”ai lietojumprogrammai jÄturpina darboties bez izmaiÅÄm.
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Ä.
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:
IevÄrojiet. Operators uzrauga klastera stÄvokli, izmantojot Kubernetes API.
AnalÄ«ze. Atrod atŔķirÄ«bas starp paÅ”reizÄjo un vÄlamo statusu (nosaka lietotÄja konfigurÄcija).
DarbÄ«ba. Atrisina konstatÄtÄs atŔķirÄ«bas, izmantojot etcd un/vai Kubernetes pakalpojumu API.
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!