ProHoster > Blogs > AdministrÄcija > Postgres otrdiena Nr. 5: āPostgreSQL un Kubernetes. CI/CD. Testa automatizÄcija"
Postgres otrdiena Nr. 5: āPostgreSQL un Kubernetes. CI/CD. Testa automatizÄcija"
PagÄjuÅ”Ä gada nogalÄ notika vÄl viena Krievijas PostgreSQL kopienas tieÅ”raide #RuPostgres, kuras laikÄ tÄs lÄ«dzdibinÄtÄjs Nikolajs Samohvalovs runÄja ar Flant tehnisko direktoru Dmitriju Stoļarovu par Å”o DBVS Kubernetes kontekstÄ.
PublicÄjam Ŕīs diskusijas galvenÄs daļas atÅ”ifrÄjumu, un plkst Kopienas YouTube kanÄls Pilns video ievietots:
Datu bÄzes un Kubernetes
NS: MÄs Å”odien nerunÄsim par VAKUUMU un PÄRBAUDES PUNKTIEM. MÄs vÄlamies runÄt par Kubernetes. Es zinu, ka jums ir daudzu gadu pieredze. Es noskatÄ«jos jÅ«su videoklipus un pat noskatÄ«jos dažus no tiem atkÄrtoti... SÄksim uzreiz pie lietas: kÄpÄc Postgres vai MySQL vispÄr K8s?
DS: Uz Å”o jautÄjumu nav un nevar bÅ«t konkrÄtas atbildes. Bet kopumÄ tÄ ir vienkÄrŔība un ÄrtÄ«bas... potenciÄls. Ikviens vÄlas pÄrvaldÄ«tus pakalpojumus.
NS: āJebkurā ir labs punkts. Lielajos uzÅÄmumos viss atrodas dažÄdÄs vietÄs. KÄpÄc tad, ja tas ir liels uzÅÄmums, neÅemt gatavu risinÄjumu? PiemÄram, Nutanix ir savas izstrÄdes, citiem uzÅÄmumiem (VMware...) ir tas pats āRDS, tikai mÄjÄsā.
DS: Bet mÄs runÄjam par atseviŔķu ievieÅ”anu, kas darbosies tikai noteiktos apstÄkļos. Un, ja mÄs runÄjam par Kubernetes, tad tur ir ļoti daudz dažÄdu infrastruktÅ«ru (kas var bÅ«t K8s). BÅ«tÄ«bÄ Å”is ir mÄkoÅa API standarts...
NS: Tas ir arī bez maksas!
DS: Tas nav tik svarÄ«gi. BrÄ«vÄ«ba ir svarÄ«ga ne pÄrÄk lielam tirgus segmentam. SvarÄ«gs ir kas cits... JÅ«s droÅ”i vien atceraties ziÅojumu āDatu bÄzes un Kubernetes"?
NS: JÄ.
DS: Sapratu, ka tas tika uztverts ļoti neviennozÄ«mÄ«gi. Dažiem likÄs, ka es saku: "PuiÅ”i, ielaidÄ«sim visas datubÄzes Kubernetes!", bet citi uzskatÄ«ja, ka tie visi ir briesmÄ«gi velosipÄdi. Bet man gribÄjÄs teikt pavisam ko citu: āPaskatieties, kas notiek, kÄdas ir problÄmas un kÄ tÄs var atrisinÄt. Vai mums tagad vajadzÄtu izmantot Kubernetes datu bÄzes? RažoÅ”ana? Nu, tikai tad, ja jums patÄ«k... darÄ«t noteiktas lietas. Bet izstrÄdÄtÄjam varu teikt, ka iesaku. IzstrÄdÄtÄjiem vides izveides/dzÄÅ”anas dinamisms ir ļoti svarÄ«gs.
NS: Vai ar izstrÄdÄtÄju jÅ«s domÄjat visas vides, kas nav ražotas? IestudÄjums, kvalitÄtes nodroÅ”inÄÅ”anaā¦
DS: Ja mÄs runÄjam par perf stendiem, tad droÅ”i vien nÄ, jo prasÄ«bas tur ir specifiskas. Ja mÄs runÄjam par Ä«paÅ”iem gadÄ«jumiem, kad inscenÄÅ”anai nepiecieÅ”ama ļoti liela datu bÄze, tad droÅ”i vien nÄ... Ja Ŕī ir statiska, ilgstoÅ”a vide, tad kÄds labums no tÄ, ka datubÄze atrodas K8s?
NS: Nav. Bet kur mÄs redzam statisku vidi? RÄ«t statiska vide kļūs novecojusi.
DS: IestudÄjums var bÅ«t statisks. Mums ir klienti...
NS: JÄ, man arÄ« tÄds ir. TÄ ir liela problÄma, ja jums ir 10 TB datu bÄze un 200 GB inscenÄjums...
DS: Man ir ļoti forÅ”s gadÄ«jums! UzstÄdÄ«Å”anas laikÄ ir produktu datu bÄze, kurÄ tiek veiktas izmaiÅas. Un ir poga: āizrullÄt uz ražoÅ”anuā. Å Ä«s izmaiÅas - deltas - tiek pievienotas (Ŕķiet, ka tÄs ir vienkÄrÅ”i sinhronizÄtas, izmantojot API) ražoÅ”anÄ. Å Ä« ir ļoti eksotiska iespÄja.
NS: Esmu redzÄjis jaunuzÅÄmumus Valley, kas darbojas RDS vai pat Heroku ā tie ir stÄsti pirms 2ā3 gadiem ā un viÅi lejupielÄdÄ izgÄztuvi savÄ klÄpjdatorÄ. Jo datubÄze joprojÄm ir tikai 80 GB, un klÄpjdatorÄ ir vieta. Tad viÅi iegÄdÄjas papildu diskus katram, lai viÅiem bÅ«tu 3 datu bÄzes, lai veiktu dažÄdas izstrÄdes. TÄ tas arÄ« notiek. Es arÄ« redzÄju, ka viÅi nebaidÄs kopÄt prod iestudÄjumÄ - tas ir ļoti atkarÄ«gs no uzÅÄmuma. Bet es arÄ« redzÄju, ka viÅi ļoti baidÄs, un viÅiem bieži vien nepietiek laika un roku. Bet, pirms mÄs pÄrejam pie Ŕīs tÄmas, es vÄlos dzirdÄt par Kubernetes. Vai es pareizi saprotu, ka neviens vÄl nav prod?
DS: Mums ir nelielas datu bÄzes ražoÅ”anÄ. MÄs runÄjam par desmitiem gigabaitu apjomiem un nekritiskiem pakalpojumiem, kuriem mÄs bijÄm pÄrÄk slinki, lai izveidotu kopijas (un tÄdas vajadzÄ«bas nav). Un ar nosacÄ«jumu, ka zem Kubernetes ir normÄla krÄtuve. Å Ä« datu bÄze darbojÄs virtuÄlajÄ maŔīnÄ - nosacÄ«ti VMware, virs atmiÅas sistÄmas. MÄs to ievietojÄm PV un tagad mÄs varam to pÄrsÅ«tÄ«t no maŔīnas uz maŔīnu.
NS: Å Äda izmÄra datu bÄzes, lÄ«dz 100 GB, var izvilkt dažu minÅ«Å”u laikÄ labos diskos un labÄ tÄ«klÄ, vai ne? Ätrums 1 GB sekundÄ vairs nav eksotisks.
DS: JÄ, lineÄrai darbÄ«bai tÄ nav problÄma.
NS: Labi, mums tikai jÄdomÄ par prod. Un, ja mÄs apsveram Kubernetes izmantoÅ”anu vidÄm, kas nav ražotas, kas mums jÄdara? Es to redzu Zalando darÄ«t operatoru, in Crunchy zÄÄ£ÄÅ”ana, ir vÄl dažas iespÄjas. Un ir OnGres - tas ir mÅ«su labs draugs Alvaro no SpÄnijas: tas, ko viÅi dara, bÅ«tÄ«bÄ nav tikai operators, un viss sadalÄ«jums (StackGres), kurÄ bez paÅ”a Postgres nolÄma iebÄzt arÄ« rezerves kopiju, Envoy proxy...
DS: Sūtni par ko? Vai īpaŔi līdzsvarot Postgres trafiku?
NS: JÄ. Tas ir, viÅi to uztver Å”Ädi: ja izmantojat Linux izplatÄ«Å”anu un kodolu, tad parastais PostgreSQL ir kodols, un viÅi vÄlas izveidot izplatÄ«Å”anu, kas bÅ«s draudzÄ«ga mÄkoÅiem un darbosies Kubernetes. ViÅi saliek komponentus (dublÄjumus utt.) un atkļūdo, lai tie darbotos labi.
DS: Ä»oti forÅ”s! BÅ«tÄ«bÄ Å”Ä« ir programmatÅ«ra, lai izveidotu savu pÄrvaldÄ«to Postgres.
NS: Linux distribÅ«cijÄm ir mūžīgas problÄmas: kÄ izveidot draiverus, lai tiktu atbalstÄ«ta visa aparatÅ«ra. Un viÅiem ir doma, ka viÅi strÄdÄs Kubernetes. Es zinu, ka Zalando operatorÄ mÄs nesen redzÄjÄm savienojumu ar AWS, un tas vairs nav pÄrÄk labs. NevajadzÄtu bÅ«t saistÄ«tai ar konkrÄtu infrastruktÅ«ru ā kÄda tad jÄga?
DS: Es precÄ«zi nezinu, kÄdÄ situÄcijÄ Zalando nokļuva, bet Kubernetes krÄtuve tagad ir izveidota tÄ, ka nav iespÄjams veikt diska dublÄjumu, izmantojot vispÄrÄ«gu metodi. Nesen standarta - jaunÄkajÄ versijÄ CSI specifikÄcijas ā mÄs padarÄ«jÄm iespÄjamus momentuzÅÄmumus, bet kur tas tiek Ä«stenots? GodÄ«gi sakot, viss vÄl ir tik neapstrÄdÄts... MÄÄ£inÄm CSI virsÅ« AWS, GCE, Azure, vSphere, bet tiklÄ«dz sÄc lietot, var redzÄt, ka tas vÄl nav gatavs.
NS: TÄpÄc mums dažreiz ir jÄpaļaujas uz infrastruktÅ«ru. Es domÄju, ka tas vÄl ir sÄkuma posms - augÅ”anas sÄpes. JautÄjums: KÄdu padomu jÅ«s sniegtu iesÄcÄjiem, kuri vÄlas izmÄÄ£inÄt PgSQL K8s? KÄds operators varbÅ«t?
DS: ProblÄma ir tÄda, ka Postgres mums ir 3%. Mums ir arÄ« ļoti liels dažÄdu programmatÅ«ru saraksts Kubernetes, es pat neuzskaitÄ«Å”u visu. PiemÄram, Elasticsearch. Operatoru ir daudz: daži aktÄ«vi attÄ«stÄs, citi ne. Esam sev izstrÄdÄjuÅ”i prasÄ«bas, kam jÄbÅ«t operatoram, lai mÄs to uztvertu nopietni. OperatorÄ speciÄli Kubernetes - nevis "operatorÄ, lai kaut ko darÄ«tu Amazones apstÄkļos"... PatiesÄ«bÄ mÄs diezgan plaÅ”i (= gandrÄ«z visi klienti) izmantojam vienu operatoru - par Redisu(drÄ«zumÄ publicÄsim rakstu par viÅu).
NS: Un arÄ« ne MySQL? Es zinu, ka Percona... tÄ kÄ viÅi tagad strÄdÄ pie MySQL, MongoDB un Postgres, viÅiem bÅ«s jÄizveido kaut kÄds universÄls risinÄjums: visÄm datu bÄzÄm, visiem mÄkoÅa pakalpojumu sniedzÄjiem.
DS: Mums nebija laika apskatÄ«t MySQL operatorus. Å obrÄ«d tas nav mÅ«su galvenais uzsvars. MySQL darbojas labi atseviŔķi. KÄpÄc izmantot operatoru, ja var vienkÄrÅ”i palaist datu bÄzi... Varat palaist Docker konteineru ar Postrges, vai arÄ« varat to palaist vienkÄrÅ”Ä veidÄ.
NS: Par Å”o arÄ« bija jautÄjums. Nav operatora vispÄr?
DS: JÄ, 100% no mums PostgreSQL darbojas bez operatora. LÄ«dz Å”im tÄ. MÄs aktÄ«vi izmantojam operatoru Prometheus un Redis. Esam plÄnojuÅ”i atrast Elasticsearch operatoru - tas ir visvairÄk āugunsā, jo 100% gadÄ«jumu vÄlamies to uzstÄdÄ«t Kubernetes. TÄpat kÄ mÄs vÄlamies nodroÅ”inÄt, ka MongoDB vienmÄr tiek instalÄts arÄ« Kubernetes. Te parÄdÄs zinÄmas vÄlmes ā ir sajÅ«ta, ka Å”ajos gadÄ«jumos kaut ko var izdarÄ«t. Un mÄs pat nepaskatÄ«jÄmies uz Postgresu. Protams, mÄs zinÄm, ka ir dažÄdas iespÄjas, bet patiesÄ«bÄ mums ir savrupa.
DB pÄrbaudei Kubernetes
NS: PÄriesim pie tÄmas par testÄÅ”anu. KÄ ieviest izmaiÅas datu bÄzÄ ā no DevOps viedokļa. Ir mikropakalpojumi, daudzas datu bÄzes, visu laiku kaut kas mainÄs. KÄ nodroÅ”inÄt normÄlu CI/CD, lai no DBVS viedokļa viss bÅ«tu kÄrtÄ«bÄ. KÄda ir jÅ«su pieeja?
DS: Viena atbilde nevar bÅ«t. Ir vairÄkas iespÄjas. Pirmais ir pamatnes izmÄrs, kuru vÄlamies izrullÄt. JÅ«s pats minÄjÄt, ka uzÅÄmumiem ir atŔķirÄ«ga attieksme pret prod datu bÄzes kopiju izstrÄdÄ un stadijÄ.
NS: Un GDPR apstÄkļos, manuprÄt, viÅi ir arvien uzmanÄ«gÄki... Varu teikt, ka EiropÄ jau ir sÄkuÅ”i uzlikt sodus.
DS: Bet bieži vien jÅ«s varat rakstÄ«t programmatÅ«ru, kas paÅem izgÄztuvi no ražoÅ”anas un aptumÅ”o to. Prod dati tiek iegÅ«ti (momentuzÅÄmums, dump, binÄrÄ kopija...), taÄu tie ir anonimizÄti. TÄ vietÄ var bÅ«t Ä£enerÄÅ”anas skripti: tie var bÅ«t fiksatori vai vienkÄrÅ”i skripti, kas Ä£enerÄ lielu datu bÄzi. ProblÄma ir: cik ilgs laiks nepiecieÅ”ams, lai izveidotu pamata attÄlu? Un cik ilgs laiks nepiecieÅ”ams, lai to izvietotu vÄlamajÄ vidÄ?
MÄs nonÄcÄm pie shÄmas: ja klientam ir fiksÄta datu kopa (minimÄlÄ datu bÄzes versija), tad mÄs tos izmantojam pÄc noklusÄjuma. Ja mÄs runÄjam par pÄrskatÄ«Å”anas vidÄm, izveidojot filiÄli, mÄs izvietojÄm lietojumprogrammas instanci - mÄs tur izlaižam nelielu datu bÄzi. Bet sanÄca labi iespÄja, kad mÄs reizi dienÄ (naktÄ«) paÅemam izgÄztuvi no ražoÅ”anas un izveidojam Docker konteineru ar PostgreSQL un MySQL, pamatojoties uz Å”iem ielÄdÄtajiem datiem. Ja jums ir nepiecieÅ”ams paplaÅ”inÄt datu bÄzi 50 reizes no Ŕī attÄla, tas tiek darÄ«ts diezgan vienkÄrÅ”i un Ätri.
NS: ar vienkÄrÅ”u kopÄÅ”anu?
DS: dati tiek glabÄti tieÅ”i Docker attÄlÄ. Tie. Mums ir gatavs attÄls, lai gan 100 GB. Pateicoties Docker slÄÅiem, mÄs varam Ätri izvietot Å”o attÄlu tik reižu, cik nepiecieÅ”ams. Metode ir muļķīga, bet tÄ darbojas labi.
NS: Tad, pÄrbaudot, tas mainÄs tieÅ”i Docker iekÅ”ienÄ, vai ne? KopÄÅ”ana-uzrakstÄ«Å”ana iekÅ”Ä Docker - izmet un ej vÄlreiz, viss kÄrtÄ«bÄ. Klase! Un vai jÅ«s to jau izmantojat pilnÄ«bÄ?
DS: Ilgu laiku.
NS: MÄs darÄm ļoti lÄ«dzÄ«gas lietas. Tikai mÄs neizmantojam Docker's copy-on-write, bet gan kÄdu citu.
DS: Tas nav vispÄrÄ«gs. Un Docker darbojas visur.
NS: TeorÄtiski jÄ. Bet mums tur ir arÄ« moduļi, jÅ«s varat izgatavot dažÄdus moduļus un strÄdÄt ar dažÄdÄm failu sistÄmÄm. KÄds te brÄ«dis. No Postgres puses mÄs uz to visu skatÄmies savÄdÄk. Tagad es paskatÄ«jos no Docker puses un redzÄju, ka viss darbojas jÅ«su labÄ. Bet, ja datu bÄze ir milzÄ«ga, piemÄram, 1 TB, tad tas viss aizÅem ilgu laiku: operÄcijas naktÄ«, un visu sabÄzÅ”ana Docker... Un ja 5 TB iebÄza Docker... Vai arÄ« viss ir kÄrtÄ«bÄ?
DS: KÄda ir atŔķirÄ«ba: tie ir lÄses, tikai biti un baiti.
NS: AtŔķirÄ«ba ir Å”Äda: vai jÅ«s to darÄt, izmantojot izgÄztuvi un atjaunoÅ”anu?
DS: Nemaz nav nepiecieÅ”ams. Å Ä« attÄla Ä£enerÄÅ”anas metodes var bÅ«t dažÄdas.
NS: Dažiem klientiem esam izveidojuÅ”i tÄ, ka tÄ vietÄ, lai regulÄri Ä£enerÄtu bÄzes attÄlu, mÄs to pastÄvÄ«gi atjauninÄm. TÄ bÅ«tÄ«bÄ ir kopija, taÄu tÄ saÅem datus nevis tieÅ”i no galvenÄ, bet gan caur arhÄ«vu. BinÄrais arhÄ«vs, kurÄ katru dienu tiek lejupielÄdÄti WAL, kur tiek veidotas dublÄjumkopijas... PÄc tam Å”ie WAL ar nelielu kavÄÅ”anos (burtiski 1-2 sekundes) sasniedz bÄzes attÄlu. MÄs no tÄ klonÄjam jebkurÄ veidÄ - tagad mums pÄc noklusÄjuma ir ZFS.
DS: Bet ar ZFS jūs aprobežojaties ar vienu mezglu.
NS: JÄ. Bet ZFS ir arÄ« maÄ£isks sÅ«tÄ«t: ar to jÅ«s varat nosÅ«tÄ«t momentuzÅÄmumu un pat (es vÄl neesmu Ä«sti pÄrbaudÄ«jis, bet...) jÅ«s varat nosÅ«tÄ«t delta starp diviem PGDATA. PatiesÄ«bÄ mums ir vÄl viens rÄ«ks, ko mÄs neesam Ä«sti apsvÄruÅ”i Å”Ädiem uzdevumiem. PostgreSQL ir pg_rewind, kas darbojas kÄ āviedaisā rsync, izlaižot daudz no tÄ, kas nav jÄskatÄs, jo tur nekas nav mainÄ«jies. MÄs varam veikt Ätru sinhronizÄciju starp diviem serveriem un attÄ«t atpakaļ tÄdÄ paÅ”Ä veidÄ.
TÄtad, no Ŕīs, vairÄk DBA puses, mÄs cenÅ”amies izveidot rÄ«ku, kas ļauj mums darÄ«t to paÅ”u, ko jÅ«s teicÄt: mums ir viena datu bÄze, bet mÄs vÄlamies kaut ko pÄrbaudÄ«t 50 reizes, gandrÄ«z vienlaikus.
DS: 50 reizes nozÄ«mÄ, ka jums ir jÄpasÅ«ta 50 Spot gadÄ«jumi.
NS: NÄ, mÄs visu darÄm ar vienu maŔīnu.
DS: Bet kÄ jÅ«s paplaÅ”inÄsiet 50 reizes, ja Ŕī viena datubÄze ir, teiksim, terabaits. VisticamÄk, viÅai vajag nosacÄ«tu 256 GB RAM?
NS: JÄ, dažreiz jums ir nepiecieÅ”ams daudz atmiÅas - tas ir normÄli. Bet tas ir piemÄrs no dzÄ«ves. RažoÅ”anas iekÄrtai ir 96 kodoli un 600 GB. TajÄ paÅ”Ä laikÄ datubÄzei tiek izmantoti 32 kodoli (pat 16 kodoli tagad dažreiz) un 100-120 GB atmiÅa.
DS: Un 50 eksemplÄri tur iederas?
NS: TÄtad ir tikai viens eksemplÄrs, tad copy-on-write (ZFS) darbi... PastÄstÄ«Å”u sÄ«kÄk.
PiemÄram, mums ir 10 TB datu bÄze. UztaisÄ«ja tam disku, ZFS arÄ« saspieda tÄ izmÄru par 30-40 procentiem. TÄ kÄ mÄs neveicam slodzes testÄÅ”anu, precÄ«zs reakcijas laiks mums nav svarÄ«gs: ļaujiet tam bÅ«t lÄ«dz 2 reizÄm lÄnÄk - tas ir labi.
MÄs dodam iespÄju programmÄtÄjiem, QA, DBA u.c. veikt testÄÅ”anu 1-2 pavedienos. PiemÄram, viÅi var veikt sava veida migrÄciju. Tam nav nepiecieÅ”ami 10 kodoli vienlaikus - tam ir nepiecieÅ”ams 1 Postgres aizmugursistÄma, 1 kodols. SÄksies migrÄcija ā varbÅ«t autovakuums joprojÄm sÄksies, tad tiks izmantots otrais kodols. Mums ir atvÄlÄti 16-32 kodoli, tÄtad 10 cilvÄki var strÄdÄt vienlaicÄ«gi, bez problÄmÄm.
Jo fiziski PGDATA tas pats, izrÄdÄs, ka mÄs patiesÄ«bÄ maldinÄm Postgresu. ViltÄ«ba ir Å”Äda: piemÄram, vienlaikus tiek palaistas 10 Postgres. KÄda parasti ir problÄma? ViÅi liek share_buffers, pieÅemsim, ka 25%. AttiecÄ«gi tas ir 200 GB. JÅ«s nevarÄsit palaist vairÄk kÄ trÄ«s no tiem, jo āābeigsies atmiÅa.
Bet kÄdÄ brÄ«dÄ« mÄs sapratÄm, ka tas nav nepiecieÅ”ams: mÄs iestatÄ«jÄm share_buffers uz 2 GB. PostgreSQL ir efektÄ«vas_keÅ”atmiÅas_izmÄrs, un patiesÄ«bÄ tas ir vienÄ«gais, kas ietekmÄ plÄniem. MÄs iestatÄ«jÄm to uz 0,5 TB. Un tas pat nav svarÄ«gi, ka tie patiesÄ«bÄ neeksistÄ: viÅÅ” plÄno plÄnus tÄ, it kÄ tie pastÄvÄtu.
AttiecÄ«gi, kad mÄs pÄrbaudÄm kaut kÄdu migrÄciju, mÄs varam savÄkt visus plÄnus - mÄs redzÄsim, kÄ tas notiks ražoÅ”anÄ. Sekundes tur bÅ«s dažÄdas (lÄnÄkas), bet dati, kurus mÄs faktiski nolasÄm, un paÅ”i plÄni (kÄdi tur ir JOIN utt.) izrÄdÄs tieÅ”i tÄdi paÅ”i kÄ ražoÅ”anÄ. Un jÅ«s varat veikt daudzas Å”Ädas pÄrbaudes paralÄli vienÄ maŔīnÄ.
DS: Vai jums neŔķiet, ka Å”eit ir dažas problÄmas? Pirmais ir risinÄjums, kas darbojas tikai uz PostgreSQL. Å Ä« pieeja ir ļoti privÄta, tÄ nav vispÄrÄ«ga. Otrais ir tas, ka Kubernetes (un viss, ko tagad izmanto mÄkoÅtehnoloÄ£ijas) ietver daudzus mezglus, un Å”ie mezgli ir Ä«slaicÄ«gi. Un jÅ«su gadÄ«jumÄ tas ir stÄvoÅ”s, pastÄvÄ«gs mezgls. Å Ä«s lietas man rada pretrunas.
NS: PirmkÄrt, es piekrÄ«tu, Å”is ir tikai Postgres stÄsts. Es domÄju, ka, ja mums ir kaut kÄds tieÅ”ais IO un bufera baseins gandrÄ«z visai atmiÅai, Ŕī pieeja nedarbosies - plÄni bÅ«s atŔķirÄ«gi. Bet pagaidÄm strÄdÄjam tikai ar Postgres, par citiem nedomÄjam.
Par Kubernetes. JÅ«s pats mums visur sakÄt, ka mums ir pastÄvÄ«ga datubÄze. Ja gadÄ«jums neizdodas, galvenais ir saglabÄt disku. Å eit mums ir arÄ« visa platforma Kubernetes, un komponents ar Postgres ir atseviŔķs (lai gan kÄdu dienu tas tur bÅ«s). TÄpÄc viss ir tÄ: instance nokrita, bet mÄs saglabÄjÄm tÄs PV un vienkÄrÅ”i pieslÄdzÄm citai (jaunai) instancei, it kÄ nekas nebÅ«tu noticis.
DS: No mana viedokļa, mÄs veidojam pÄkstis Kubernetes. K8s - elastÄ«gs: mezgli tiek pasÅ«tÄ«ti pÄc nepiecieÅ”amÄ«bas. Uzdevums ir vienkÄrÅ”i izveidot podziÅu un pateikt, ka tam vajag X resursu daudzumu, un tad K8s to izdomÄs pats. Bet Kubernetes krÄtuves atbalsts joprojÄm ir nestabils: 1.16Uz 1.17 (Å”is izdevums tika izlaists NedÄļas pirms) Ŕīs funkcijas kļūst tikai par beta versiju.
Paies seÅ”i mÄneÅ”i lÄ«dz gads - tas kļūs vairÄk vai mazÄk stabils vai vismaz par tÄdu tiks deklarÄts. Tad momentuzÅÄmumu un izmÄru maiÅas iespÄja pilnÄ«bÄ atrisina jÅ«su problÄmu. Jo jums ir bÄze. JÄ, tas var nebÅ«t ļoti Ätrs, bet Ätrums ir atkarÄ«gs no tÄ, kas atrodas āzem pÄrsegaā, jo dažas implementÄcijas var kopÄt un kopÄt uz rakstÄ«Å”anas diska apakÅ”sistÄmas lÄ«menÄ«.
NS: Ir arÄ« nepiecieÅ”ams, lai visi dzinÄji (Amazon, Google...) sÄktu atbalstÄ«t Å”o versiju - tas arÄ« aizÅem kÄdu laiku.
DS: MÄs tos vÄl neizmantojam. MÄs izmantojam savÄjo.
VietÄjÄ attÄ«stÄ«ba Kubernetes
NS: Vai esat kÄdreiz saskÄruÅ”ies ar Å”Ädu vÄlmi, kad jums ir jÄuzstÄda visi podi vienÄ maŔīnÄ un jÄveic tik mazs tests. Lai Ätri iegÅ«tu koncepcijas pierÄdÄ«jumu, pÄrbaudiet, vai lietojumprogramma darbojas Kubernetes, nevelkot tai virkni maŔīnu. Tur ir Minikube, vai ne?
DS: Man Ŕķiet, ka Ŕī lieta, kas izvietota vienÄ mezglÄ, ir saistÄ«ta tikai ar vietÄjo attÄ«stÄ«bu. Vai dažas Å”Äda modeļa izpausmes. Äst Minikube, Tur ir k3, KIND. MÄs virzÄmies uz Kubernetes IN Docker izmantoÅ”anu. Tagad mÄs sÄkÄm strÄdÄt ar to testu veikÅ”anai.
NS: AgrÄk domÄju, ka tas ir mÄÄ£inÄjums ietÄ«t visus pÄkstis vienÄ Docker attÄlÄ. TaÄu izrÄdÄ«jÄs, ka runa ir par pavisam ko citu. JebkurÄ gadÄ«jumÄ ir atseviŔķi konteineri, atseviŔķi podi - tikai Docker.
DS: JÄ. Un ir izveidota diezgan smieklÄ«ga imitÄcija, bet nozÄ«me ir tÄda... Mums ir utilÄ«ta izvietoÅ”anai - werf. MÄs vÄlamies to padarÄ«t par nosacÄ«tu režīmu werf up: "Atnesiet man vietÄjo Kubernetes." Un tad tur palaist nosacÄ«to werf follow. PÄc tam izstrÄdÄtÄjs varÄs rediÄ£Ät IDE, un sistÄmÄ tiks palaists process, kas redz izmaiÅas un pÄrbÅ«vÄ attÄlus, pÄrizvietojot tos uz vietÄjiem K8. TÄ mÄs vÄlamies mÄÄ£inÄt atrisinÄt vietÄjÄs attÄ«stÄ«bas problÄmu.
MomentuzÅÄmumi un datu bÄzes klonÄÅ”ana K8s realitÄtÄ
NS: Ja mÄs atgriežamies pie kopÄÅ”anas-rakstÄ«Å”anas. PamanÄ«ju, ka mÄkoÅiem ir arÄ« momentuzÅÄmumi. ViÅi strÄdÄ savÄdÄk. PiemÄram, GSP: jums ir vairÄku terabaitu instance Amerikas Savienoto Valstu austrumu krastÄ. JÅ«s periodiski uzÅemat momentuzÅÄmumus. JÅ«s paÅemat diska kopiju rietumu krastÄ no momentuzÅÄmuma - pÄc dažÄm minÅ«tÄm viss ir gatavs, tas darbojas ļoti Ätri, tikai keÅ”atmiÅa ir jÄaizpilda atmiÅÄ. Bet Å”ie kloni (momentuzÅÄmumi) ir paredzÄti jauna apjoma nodroÅ”inÄÅ”anai. Tas ir lieliski, ja jums ir jÄizveido daudz gadÄ«jumu.
Bet testiem man liekas, ka momentuzÅÄmumi, par kuriem tu runÄ Docker vai es runÄju par ZFS, btrfs un pat LVM... - tie ļauj neveidot Ä«sti jaunus datus uz vienas maŔīnas. MÄkonÄ« jÅ«s joprojÄm maksÄsit par tiem katru reizi un gaidÄ«sit nevis sekundes, bet minÅ«tes (un gadÄ«jumÄ slinka slodze, iespÄjams, pulkstenis).
TÄ vietÄ varat iegÅ«t Å”os datus sekundÄ vai divÄs, palaist pÄrbaudi un izmest tos. Å ie momentuzÅÄmumi atrisina dažÄdas problÄmas. PirmajÄ gadÄ«jumÄ - lai palielinÄtu mÄrogu un iegÅ«tu jaunas kopijas, bet otrajÄ - testiem.
DS: Es nepiekrÄ«tu. Pareiza apjoma klonÄÅ”ana ir mÄkoÅa uzdevums. Es neesmu apskatÄ«jis to ievieÅ”anu, bet es zinu, kÄ mÄs to darÄm ar aparatÅ«ru. Mums ir Ceph, tas pieļauj jebkuru fizisko apjomu (RBD) teikt klons un iegÅ«stiet otru tilpumu ar tÄdÄm paÅ”Äm Ä«paŔībÄm desmitos milisekundÄs, IOPSāami utt. Jums jÄsaprot, ka iekÅ”Ä ir viltÄ«ga kopÄÅ”ana uz rakstÄ«Å”anas. KÄpÄc lai mÄkonis nedarÄ«tu to paÅ”u? Esmu pÄrliecinÄts, ka viÅi tÄ vai citÄdi cenÅ”as to darÄ«t.
NS: Bet viÅiem joprojÄm bÅ«s vajadzÄ«gas sekundes, desmitiem sekunžu, lai paceltu instanci, nogÄdÄtu Dockeru utt.
DS: KÄpÄc ir nepiecieÅ”ams izvirzÄ«t visu instanci? Mums ir eksemplÄrs ar 32 kodoliem, 16... un tajÄ var ietilpt - piemÄram, Äetri. Kad pasÅ«tÄ«sim piekto, instance jau tiks pacelta, un tad tÄ tiks dzÄsta.
NS: JÄ, interesanti, Kubernetes izrÄdÄs cits stÄsts. MÅ«su datubÄze nav K8s, un mums ir viens gadÄ«jums. Bet vairÄku terabaitu datu bÄzes klonÄÅ”ana aizÅem ne vairÄk kÄ divas sekundes.
DS: Tas ir lieliski. Bet mans sÄkotnÄjais viedoklis ir tÄds, ka tas nav vispÄrÄjs risinÄjums. JÄ, tas ir forÅ”i, taÄu tas ir piemÄrots tikai Postgres un tikai vienÄ mezglÄ.
NS: Tas ir piemÄrots ne tikai Postgres: Å”ie plÄni, kÄ es aprakstÄ«ju, darbosies tikai tajÄ. Bet, ja mÄs neuztraucamies par plÄniem un mums ir nepiecieÅ”ami tikai visi dati funkcionÄlajai pÄrbaudei, tad tas ir piemÄrots jebkurai DBVS.
DS: Pirms daudziem gadiem mÄs kaut ko lÄ«dzÄ«gu darÄ«jÄm LVM momentuzÅÄmumos. Å Ä« ir klasika. Å Ä« pieeja tika ļoti aktÄ«vi izmantota. NozÄ«mÄ«gi mezgli ir tikai sÄpes. TÄ kÄ tos nedrÄ«kst nomest, tie vienmÄr jÄatceras...
NS: Vai jÅ«s Å”eit redzat kÄdu hibrÄ«da iespÄju? PieÅemsim, ka statusful ir sava veida pods, tas darbojas vairÄkiem cilvÄkiem (daudziem testÄtÄjiem). Mums ir viens sÄjums, bet, pateicoties failu sistÄmai, kloni ir lokÄli. Ja pods nokrÄ«t, bet disks paliek, pods pacelsies, saskaitÄ«s informÄciju par visiem kloniem, paÅems visu vÄlreiz un saka: "Å eit ir jÅ«su kloni, kas darbojas Å”ajos portos, turpiniet strÄdÄt ar tiem."
DS: Tehniski tas nozÄ«mÄ, ka Kubernetes tas ir viens pods, kurÄ mÄs darbinÄm daudzus Postgres.
NS: JÄ. ViÅam ir ierobežojums: pieÅemsim, ka ar viÅu vienlaikus strÄdÄ ne vairÄk kÄ 10 cilvÄki. Ja jums ir nepiecieÅ”ami 20, mÄs izlaidÄ«sim otru Å”Ädu podziÅu. MÄs to pilnÄ«bÄ klonÄsim, saÅemot otro pilno sÄjumu, tam bÅ«s tie paÅ”i 10 āplÄnieā kloni. Vai jÅ«s neredzat Å”o iespÄju?
DS: Å”eit ir jÄpievieno droŔības jautÄjumi. Å Äda veida organizÄcija nozÄ«mÄ, ka Å”im podam ir augstas privilÄÄ£ijas (iespÄjas), jo tas var veikt nestandarta darbÄ«bas failu sistÄmÄ... Bet es atkÄrtoju: es uzskatu, ka vidÄjÄ termiÅÄ viÅi sakÄrtos krÄtuvi Kubernetes, un mÄkoÅus viÅi visu stÄstu salabos ar apjomiem - viss "vienkÄrÅ”i darbosies". BÅ«s izmÄru maiÅa, klonÄÅ”ana... Ir sÄjums - sakÄm: āIzveidojiet jaunu, pamatojoties uz to,ā un pÄc pusotras sekundes mÄs iegÅ«stam vajadzÄ«go.
NS: Es neticu pusotrai sekundei daudziem terabaitiem. Uz Ceph jÅ«s to darÄt pats, bet jÅ«s runÄjat par mÄkoÅiem. Dodieties uz mÄkoni, izveidojiet vairÄku terabaitu EBS sÄjuma klonu uz EC2 un skatieties, kÄds bÅ«s sniegums. Tas neaizÅems dažas sekundes. Mani ļoti interesÄ, kad viÅi sasniegs Å”o lÄ«meni. Es saprotu, ko jÅ«s sakÄt, bet es lÅ«dzu atŔķirties.
DS: Labi, bet es teicu vidÄjÄ termiÅÄ, nevis Ä«stermiÅÄ. Jau vairÄkus gadus.
Par PostgreSQL operatoru no Zalando
Å Ä«s sanÄksmes vidÅ« arÄ« Aleksejs Kļukins, bijuÅ”ais Zalando izstrÄdÄtÄjs, pievienojÄs un runÄja par PostgreSQL operatora vÄsturi:
Lieliski, ka Ŕī tÄma tiek skarta kopumÄ: gan Postgres, gan Kubernetes. Kad 2017. gadÄ sÄkÄm to darÄ«t Zalando, tÄ bija tÄma, ko visi gribÄja darÄ«t, bet neviens nedarÄ«ja. Visiem jau bija Kubernetes, bet kad jautÄja, ko darÄ«t ar datu bÄzÄm, pat cilvÄkiem patÄ«k Kelsija Haitora, kurÅ” sludinÄja K8s, teica apmÄram Å”Ädi:
āDodieties uz pÄrvaldÄ«tajiem pakalpojumiem un izmantojiet tos, nepalaidiet datu bÄzi Kubernetes. PretÄjÄ gadÄ«jumÄ jÅ«su K8s nolems, piemÄram, veikt jauninÄÅ”anu, izslÄgt visus mezglus, un jÅ«su dati lidos tÄlu, tÄlu.
MÄs nolÄmÄm izveidot operatoru, kas pretÄji Å”im ieteikumam palaidÄ«s Postgres datubÄzi Kubernetes. Un mums bija labs iemesls - Patroni. Å Ä« ir automÄtiska PostgreSQL kļūmjpÄrlÄce, kas veikta pareizi, t.i. izmantojot etcd, consul vai ZooKeeper kÄ informÄcijas krÄtuvi par kopu. TÄda krÄtuve, kas katram, kas jautÄs, piemÄram, kÄds ir paÅ”reizÄjais vadÄ«tÄjs, dos vienu un to paÅ”u informÄciju - neskatoties uz to, ka mums viss ir sadalÄ«ts - lai nav saŔķeltu smadzenes. TurklÄt mums bija Docker attÄls viÅam.
KopumÄ uzÅÄmuma vajadzÄ«ba pÄc automÄtiskÄs kļūmjpÄrlÄces parÄdÄ«jÄs pÄc migrÄÅ”anas no iekÅ”ÄjÄ aparatÅ«ras datu centra uz mÄkoni. MÄkoÅa pamatÄ bija patentÄts PaaS (Platform-as-a-Service) risinÄjums. Tas ir atvÄrts avots, taÄu bija nepiecieÅ”ams daudz darba, lai to izveidotu un palaistu. Tas saucÄs STUPS.
SÄkotnÄji Kubernetes nebija. PrecÄ«zÄk, kad tika ieviests mÅ«su paÅ”u risinÄjums, K8 jau pastÄvÄja, taÄu tas bija tik neapstrÄdÄts, ka nebija piemÄrots ražoÅ”anai. Tas, manuprÄt, bija 2015. vai 2016. gads. LÄ«dz 2017. gadam Kubernetes bija vairÄk vai mazÄk nobrieduÅ”as ā tur bija jÄmigrÄ.
Un mums jau bija Docker konteiners. Bija PaaS, kas izmantoja Docker. KÄpÄc gan neizmÄÄ£inÄt K8s? KÄpÄc gan neuzrakstÄ«t savu operatoru? Murats Kabilovs, kurÅ” ieradÄs pie mums no Avito, sÄka to kÄ projektu pÄc savas iniciatÄ«vas - "spÄlÄt" - un projekts "pacÄlÄs".
Bet kopumÄ es gribÄju runÄt par AWS. KÄpÄc bija vÄsturisks ar AWS saistÄ«ts kods...
Palaižot kaut ko Kubernetes, jÄsaprot, ka K8s ir tÄds nepabeigts darbs. Tas pastÄvÄ«gi attÄ«stÄs, uzlabojas un ik pa laikam pat sabojÄjas. Jums rÅ«pÄ«gi jÄseko lÄ«dzi visÄm Kubernetes izmaiÅÄm, jÄbÅ«t gatavam tajÄ ienirt, ja kaut kas notiek, un detalizÄti uzzinÄt, kÄ tas darbojas - varbÅ«t vairÄk, nekÄ jÅ«s vÄlÄtos. Tas principÄ attiecas uz jebkuru platformu, kurÄ izmantojat savas datu bÄzes...
TÄtad, kad mÄs sagatavojÄm paziÅojumu, Postgres darbojÄs ÄrÄjÄ sÄjumÄ (Å”ajÄ gadÄ«jumÄ EBS, jo mÄs strÄdÄjÄm pie AWS). DatubÄze pieauga, kaut kad bija nepiecieÅ”ams to mainÄ«t: piemÄram, EBS sÄkotnÄjais izmÄrs bija 100 TB, datu bÄze izauga lÄ«dz tai, tagad gribam uztaisÄ«t EBS 200 TB. KÄ? PieÅemsim, ka varat veikt izgÄzÅ”anu/atjaunoÅ”anu jaunÄ instancÄ, taÄu tas prasÄ«s ilgu laiku un dÄ«kstÄvi.
TÄpÄc es gribÄju mainÄ«t izmÄru, kas palielinÄtu EBS nodalÄ«jumu un pÄc tam liktu failu sistÄmai izmantot jauno vietu. Un mÄs to izdarÄ«jÄm, bet tajÄ laikÄ Kubernetes nebija API izmÄra maiÅas darbÄ«bai. TÄ kÄ mÄs strÄdÄjÄm pie AWS, mÄs rakstÄ«jÄm kodu tÄ API.
Neviens neliedz jums darÄ«t to paÅ”u attiecÄ«bÄ uz citÄm platformÄm. PaziÅojumÄ nav mÄjienu, ka to var palaist tikai AWS, un tas nedarbosies ar visu pÄrÄjo. KopumÄ Å”is ir atvÄrtÄ koda projekts: ja kÄds vÄlas paÄtrinÄt jaunÄ API lietoÅ”anas raÅ”anos, laipni lÅ«dzam. Äst GitHub, pull pieprasÄ«jumus - Zalando komanda cenÅ”as diezgan Ätri atbildÄt uz tiem un reklamÄt operatoru. Cik man zinÄms, projekts piedalÄ«jÄs Google Summer of Code un dažÄs citÄs lÄ«dzÄ«gÄs iniciatÄ«vÄs. Zalando ļoti aktÄ«vi strÄdÄ pie tÄ.
P.S. Bonuss!
Ja jÅ«s interesÄ PostgreSQL un Kubernetes tÄma, lÅ«dzu, Åemiet vÄrÄ, ka nÄkamÄ Postgres otrdiena notika pagÄjuÅ”ajÄ nedÄļÄ, kurÄ es runÄju ar Nikolaju Aleksandrs KukuÅ”kins no Zalando. Ir pieejams video no tÄ Å”eit.