
Eelmisel aastal toimus taas otseĂŒlekanne Venemaa PostgreSQL-i kogukonnast , mille raames rÀÀkis selle kaasasutaja Nikolai Samohvalov Flanti tehnilise direktori Dmitri Stolyaroviga sellest andmebaasisĂŒsteemist Kubernetes'i kontekstis.
Avaldame selle arutelu pÔhiosa stenogrammi ning on avaldatud tÀielik videosalvestus:

Andmebaasid ja Kubernetes
ĐĐĄ: TĂ€na ei rÀÀgi me VACUUM-ist ja CHECKPOINT'itest. Soovime rÀÀkida Kubernetes'est. Ma tean, et sul on juba palju aastaid kogemusi. Olen vaadanud sinu videosid ja mĂ”ned neist isegi mitu korda⊠Alustame kohe: miks ĂŒldse Postgres vĂ”i MySQL K8s-is?
ĐĐĄ: Sellele kĂŒsimusele ei ole ĂŒhtegi kindlat vastust. Kuid ĂŒldiselt, see on lihtsus ja mugavus⊠potentsiaalsed. KĂ”igile meeldib managed-teenuseid saada.
ĐĐĄ: Kas nagu , vaid enda juures?
ĐĐĄ: Jah: et oleks nagu RDS, aga igal pool.
ĐĐĄ: "Igal pool" â see on hea mĂ€rkuset. Suurtes ettevĂ”tetes on kĂ”ik eraldi kohtades. Aga miks sel juhul, kui see on suur ettevĂ”te, mitte vĂ”tta valmis lahendust? NĂ€iteks Nutanixâil on oma arengud, teistel ettevĂ”tetel (VMwareâŠ) on samuti "RDS, aga enda juures".
ĐĐĄ: Kuid rÀÀgime me siiski ĂŒksikust rakendusest, mis töötab ainult kindlates tingimustes. Kui jutt on Kubernetes'est, siis siin on tohutu infrastruktuuri mitmekesisus (mis vĂ”ib K8s-is olla). Sisuliselt on see standard pilve API-le...
ĐĐĄ: Ja veel tasuta!
ĐĐĄ: See pole nii oluline. Tasuta on tĂ€htis ainult vĂ€iksemale turusegmendile. Oluline on midagi muud⊠Sa kindlasti mĂ€letad ettekannet "»?
ĐĐĄ: Jah.
ĐĐĄ: Ma sain aru, et seda vĂ”eti vĂ€ga erinevalt. Osa inimesi arvas, et ma jÀÀn öelda: "Inimesed, lĂ€hme kĂ”igi andmebaasidega Kubernetes'esse!", â ja teised leidsid, et see on kĂ”ik kohutav jalgratas. Kuid ma tahtsin öelda hoopis teistsugust: "Vaadake, mis toimub, milliseid probleeme on ja kuidas neid saab lahendada. Kas minna andmebaasidega Kubernetes'esse? Protsessis? No, ainult kui sa armastad⊠tegeleda teatud asjadega. Kuid arenguks â vĂ”in öelda, et soovitan. Arenguks on looduse loomine/erase vĂ”i kustutamine vĂ€ga oluline."
ĐĐĄ: Arengu all pead sa kĂ”iki keskkondi, mis ei ole prod? Staging, QA...
ĐĐĄ: Kui rÀÀgime perf-seintidest, siis tĂ”enĂ€oliselt mitte, kuna seal on spetsiifilised nĂ”uded. Kui rÀÀgime erandjuhtudest, kus stagingus on vĂ€ga suur andmebaas, siis ka tĂ”enĂ€oliselt mitte... Kui see on staatiline keskkond, mis elab kaua, siis milline on kasu, kui andmebaas asub K8s-is?
ĐĐĄ: Ei mingit. Aga kus me nĂ€eme staatilisi keskkondi? Staatiline keskkond on homme juba aegunud.
ĐĐĄ: Staging vĂ”ib olla staatiline. Meil on kliente...
ĐĐĄ: Jah, mul on ka. Suur probleem, kui sul on 10 TB andmebaas ja staging â 200 GB...
ĐĐĄ: Mul on vĂ€ga Ă€ge juhtum! Stagingus on tootmisandmebaas, kuhu tehakse muudatusi. Ja on nupp: âtoota tootmisseâ. Need muudatused â deltid â sĂŒnkroonitakse (nĂ€ib, et lihtsalt API kaudu) tootmisse. See on vĂ€ga eksootiline variant.
ĐĐĄ: Olen nĂ€inud startupe Silikoni orus, mis istuvad RDS-is vĂ”i isegi Herokus â need on 2-3 aasta tagused lood â ja nad laadivad dumpi oma sĂŒlearvutisse. Sest andmebaas on alles 80 GB ja sĂŒlearvutis on ruumi. Siis ostavad nad igale ĂŒhele kĂ”vakettaid, et kolme andmebaasi omada, et erinevaid arendusi teha. Nii ka juhtub. Olen nĂ€inud, et tootmist kopeeritakse stagingusse â see sĂ”ltub vĂ€ga palju ettevĂ”ttest. Aga olen nĂ€inud ka, et kardetakse seda, ja et tihti ei ole aega ja kĂ€si piisavalt. Aga enne, kui me selle teema juurde jĂ”uame, tahaksin kuulda Kubernetese kohta. Kas ma mĂ”istan Ă”igesti, et tootmises pole hetkel kellelgi?
ĐĐĄ: Meil on tootmises mĂ”ned vĂ€ikesed andmebaasid. RÀÀgime kĂŒmnete gigabaitide mahtudest ja mitte-kriitilistest teenustest, mille replikate tegemiseks oli laiskus (ja ei olnud ka sellist vajadust). Ja tingimusel, et Kubernetese all on normaalne salvestus. See andmebaas töötas virtuaalmasinas â tinglikult VMware'is, salvestusseadmest ĂŒle. Me panime selle ja nĂŒĂŒd saame seda masinast masinasse liigutada.
ĐĐĄ: Sellise suurusega, kuni 100 GB andmebaasid, headel ketastel ja hea vĂ”rgu korral saab eetrisse panna paarikĂŒmne minutiga, eks? Kiirus 1 GB sekundis â see ei ole enam eksootika.
ĐĐĄ: Jah, lineaarse operatsiooni jaoks ei ole see probleem.
ĐĐĄ: Selge, tootmise kohta peame vaid mĂ”tlema. Aga kui me kaalume Kuberneteset mitte-prod-keskkondade jaoks - kuidas seda teha? NĂ€en, et Zalando , Crunchy , on veel mĂ”ned variandid. Ja on â see on meie hea sĂ”ber Alvaro Hispaaniast: nad teevad mitte lihtsalt , vaid tervet distributsiooni (), kuhu peale PostgreSQLâi tuleb veel varukoopia ja proxy Envoy...
ĐĐĄ: Miks on vaja Envoyâd? TĂ€pselt PostgreSQLâi liikluse tasakaalustamiseks?
ĐĐĄ: Jah. Nad nĂ€evad seda nii: kui vĂ”tta Linuxi distributiiv ja tuum, siis tavaline PostgreSQL on tuum, aga nad tahavad teha distributiivi, mis oleks pilvele sĂ”bralik ja saaks Kuberneteses töötada. Nad siduvad komponente (varukoopiad jne) ja hÀÀlestavad, et need töötaksid hĂ€sti.
ĐĐĄ: TĂ”eliselt Ă€ge! Sisuliselt on see tarkvara, et luua oma hallatud PostgreSQL.
ĐĐĄ: Linuxi distributiivide jaoks on igavene probleem: kuidas teha draivereid, et kogu riistvara oleks toetatud. Neil on idee, et nad töötavad Kuberneteses. Tean, et Zalando operaatoris nĂ€gime hiljuti seotust AWS-iga ja see ei ole just eriti hea. See ei tohiks sĂ”ltuda konkreetsest infrastruktuurist â siis milleks see on?
ĐĐĄ: Ei tea, milles konkreetselt Zalando seondus, aga Kuberneteses on praegu nii, et salvestus on tehtud niimoodi, et ei saa ĂŒldiselt kettavarukoopiaid teha. Hiljuti viimases versioonis loodi standardile CSI, â lisati vĂ”imalus snapshotsâteks, aga kus see on rakendatud? Ausalt öeldes, see on ikka veel nii toores... Proovime CSI-d AWS, GCE, Azure, vSphere peal, aga kui hakkad kasutama, siis on kohe nĂ€ha, et see ei ole veel valmis.
ĐĐĄ: SeetĂ”ttu on vahel kohustuslik sĂ”ltuda infrastruktuurist. Arvan, et see on ikka varases arenguetapis â kasvuprobleemid. KĂŒsimus: mida sa soovitaksid algajatele, kes tahavad proovida PgSQL-i K8s-is? Milline operaator, vĂ”ib-olla?
ĐĐĄ: Probleem on selles, et Postgres on meie jaoks 3%. Meil on veel vĂ€ga suur loetelu erinevast tarkvarast Kuberneteses, ei hakka isegi kĂ”ike ĂŒles lugema. NĂ€iteks Elasticsearch. Operaatorite hulk on tohutu: mĂ”ned arenevad aktiivselt, teised mitte. Me oleme endale koostanud nĂ”udmised, mis peaksid operaatoris olema, et me vĂ”taksime seda tĂ”siselt. Just Kuberneteses mĂ”eldud operaator â mitte «operaator, et teha midagi Amazoni tingimustes»... Tegelikult kasutame me piisavalt laialdaselt (= peaaegu kĂ”igil klientidel) ainult ĂŒhte operaatorit â (varsti avaldame ka artikli selle kohta).
ĐĐĄ: Aga MySQL-i jaoks pole ka? Tean, et Percona... kuna nad tegelevad nĂŒĂŒd nii MySQLi, MongoDB kui ka PostgreSQL-iga, peavad nad ju midagi universaalset vĂ€lja töötama: kĂ”igi andmebaaside jaoks, kĂ”igi pilveteenuse pakkujate jaoks.
ĐĐĄ: Me ei jĂ”udnud vaadata MySQL operaatorite peale. Meie jaoks pole see praegu peamine fookus. MySQL töötab korralikult iseseisvalt. Miks operaator, kui saad lihtsalt andmebaasi kĂ€ivitada⊠Sa saad kĂ€ivitada Docker konteineri Postrgesiga, vĂ”i saad selle kĂ€ivitada lihtsalt.
ĐĐĄ: Sellest oli ka kĂŒsimus. Ăldse ilma operaatorita?
ĐĐĄ: Jah, meil on 100% PostgreSQL kĂ€ivitunud ilma operaatorita. Praegu nii. Me kasutame operaatorit aktiivselt Prometheuse ja Redis'e jaoks. Meil on plaanis leida operaator Elasticsearch'i jaoks â see on kĂ”ige pĂ”letavam teema, kuna soovime seda 100% juhtudel Kubernetesesse paigaldada. Nii nagu soovime, et MongoDB oleks ka alati Kuberneteses. Siin tekivad kindlad soovid â on tunne, et nendes olukordades on midagi teha. PostgreSQL'i osas me isegi ei vaadanud. Loomulikult teame erinevate variantide olemasolust, aga tegelikult on meil iseseisev lahendus.
Andmebaas testimiseks Kuberneteses
ĐĐĄ: Liigume testimise teema juurde. Kuidas rakendada muudatusi andmebaasis â DevOps'i perspektiivist. On mikroteenused, palju andmebaase, pidevalt kuskil midagi muutub. Kuidas tagada normaalne CI/CD, et andmebaasi poolest oleks kĂ”ik korras. Mis on sinu lĂ€henemine?
ĐĐĄ: Ăhte vastust ei saa olla. On mitu parameetrit. Esiteks, kui suur on andmebaas, mida soovime rakendada. Sa ise mainisid, et ettevĂ”ttes on erinevad lĂ€henemised, kuidas prod-andmebaasi koopia olla dev- ja stage'is.
ĐĐĄ: GDPR-i tingimustes, ma arvan, nad on jĂ€rjest ettevaatlikumad... VĂ”in öelda, et Euroopas on juba alustanud trahvimist.
ĐĐĄ: Aga sageli saab kirjutada tarkvara, mis teeb kopia tootmisest ja obfuskeerib selle. Tulemuseks on tootmisandmed (snapshood, dump, binaarne koopia...), kuid need on anonĂŒĂŒmseks muutunud. Selle asemel vĂ”ivad olla ka genereerimise skriptid: need vĂ”ivad olla fikstuuri vĂ”i lihtsalt skript, mis genereerib suure andmebaasi. Probleem on aga: kui palju aega kulub pĂ”hifoto loomisele? Ja kui palju aega kulub selle suure keskkonna peal paigutamiseks?
Oleme jĂ”udnud skeemile: kui kliendil on fikstuuri andmekogum (minimaalne versioon andmebaasist), siis kasutame neid vaikimisi. Kui asi puudutab ĂŒlevaatekeskkondi, kui oleme loonud haru, meie rakenduse eksemplar kĂ€ivitub â me paneme sinna vĂ€ikese andmebaasi. Aga see tuli hĂ€sti vĂ€lja ning , kui me productionâist öösel kord pĂ€evas varundame ja selle alusel loome Docker-konteineri PostgreSQL ja MySQL-iga nende laaditud andmete pĂ”hjal. Kui sellest kujundist tuleb 50 korda andmebaas vĂ€lja arendada, siis seda on piisavalt lihtne ja kiire teha.
ĐĐĄ: Lihtsa kopeerimisega?
ĐĐĄ: Andmed salvestatakse otse Docker-pildis. St meil on valmis pilt, olgu see 100 GB. TĂ€nu Docker'i kihtidele saame seda pilti kiiresti vajalikul hulgal arendada. Meetod on primitiivne, kuid töötab hĂ€sti.
ĐĐĄ: Edasi, kui testite, siis see muutub otse Dockerâis, eks? Copy-on-write Dockerâis â viskame vĂ€lja ja alustame uuesti, kĂ”ik on korras. SuurepĂ€rane! Ja te kasutate seda juba aktiivselt?
ĐĐĄ: Juba pikka aega.
ĐĐĄ: Me tegeleme vĂ€ga sarnaste asjadega. Ainult et me ei kasuta Dockerâi copy-on-writeâi, vaid midagi muud.
ĐĐĄ: See ei ole generiline. Kuid Dockerâi versioon töötab igal pool.
ĐĐĄ: Idee on kĂŒll nii. Kuid meil on seal ka moodulid, saab teha erinevaid mooduleid ja töötada erinevate failisĂŒsteemidega. Siin on ĂŒks punkt. Me vaatame Postgresâi poolelt kogu sellele teisele moodi. NĂŒĂŒd vaatasin Dockerâi poolelt ja nĂ€gin, et teil on kĂ”ik toimib. Kuid kui andmebaas on vĂ€ga suur, nĂ€iteks 1 TB, siis see juba vĂ”tab aega: nii öised operatsioonid kui ka kĂ”ik Dockerâisse surumine⊠Aga kui 5 TB suruda Dockerâisse⊠VĂ”i on kĂ”ik korras?
ĐĐĄ: Mis vahet seal on: need on ju blob'id, lihtsalt bitid ja baitid.
ĐĐĄ: Vahe on selline: teete seda dump'i ja restore'iga?
ĐĐĄ: Ăldse ei pea. Selle pildi genereerimise meetodid vĂ”ivad olla erinevad.
ĐĐĄ: MĂ”ne kliendi jaoks oleme teinud nii, et selle asemel, et regulaarselt genereerida baaspilti, hoiame me seda pidevalt vĂ€rskena. See on sisuliselt koopiana, kuid andmeid ei saadud otse meistrilt, vaid arhiivi kaudu. Binaarset arhiivi, kuhu WAL'id kantakse iga pĂ€ev, seal tehakse ka varukoopiad⊠Need WAL'id jĂ”uavad seejĂ€rel â vĂ€ikese viivitusega (pĂ€ris 1-2 sekundit) â baaspildini. Sellest kloonime me igasuguseid viise â praegu on meil vaikimisi ZFS.
ĐĐĄ: Kuid ZFS-i puhul olete piiratud ĂŒhe sĂ”lmega.
ĐĐĄ: Jah. Kuid ZFS-il on ka maagiline : selle abil saab saata snapshots ja isegi (ma ei ole seda veel vĂ€ga testinud, kuidâŠ) saab edasi saata deltat kahe vahel PGDATA. Tegelikult on meil veel ĂŒks tööriist, mida me ei ole selliste ĂŒlesannete jaoks eriti vaadanud. PostgreSQL-is on , töötades nagu ânutikasâ rsync, jĂ€ttes vahele palju, mida pole vaja vaadata, sest seal pole tĂ”eliselt midagi muutunud. Saame kahe serveri vahel kiiresti sĂŒnkroonida ja tagasi kerida tĂ€pselt samamoodi.
Nii et me pĂŒĂŒame selle, DBA-poolsest, vaatenurgast luua tööriista, mis vĂ”imaldab teha seda, millest sa rÀÀkisid: meil on ĂŒks andmebaas, kuid me tahame 50 korda midagi testida, peaagu samaaegselt.
ĐĐĄ: 50 korda tĂ€hendab, et peate tellima 50 Spot instantsi.
ĐĐĄ: Ei, teeme kĂ”ik ĂŒhel masinal.
ĐĐĄ: Aga kuidas te juurutate 50 korda, kui see ĂŒks andmebaas on, ĂŒtleme, terabaidi suurune? TĂ”enĂ€oliselt vajab see umbes 256 GB RAM-i?
ĐĐĄ: Jah, mĂ€lu vajatakse mĂ”nikord palju â see on normaalne. Kuid selline nĂ€ide elust. Tootmismasinal on 96 tuuma ja 600 GB. Samas andmebaasi jaoks kasutatakse 32 tuuma (isegi 16 tuuma nĂŒĂŒd mĂ”nikord) ja mĂ€lu 100-120 GB.
ĐĐĄ: Kas sinna mahub 50 koopiat?
ĐĐĄ: Kuid koopiat on vaid ĂŒks, edasi töötab copy-on-write (ZFS-i)⊠RÀÀgin lĂ€hemalt.
Meil on nĂ€iteks 10 TB andmebaas. Disk selle jaoks tehtud, ZFS veel tihendas selle suurust 30-40 protsendi vĂ”rra. Kuna me ei tee koormustestimist, ei ole meil tĂ€pset reageerimisaega oluline: olgu see kuni 2 korda aeglasem â see on okei.
Anname vĂ”imaluse programmeerijatele, QA-le, DBA-le jne. teha testimist 1-2 lĂ”imes. NĂ€iteks saavad nad kĂ€ivitada mingi migreerimise. See ei vaja kohe 10 tuuma â talle piisab ĂŒhest Postgres'i taustast, 1 tuumast. Migratsioon kĂ€ivitub â vĂ”ib-olla, kĂ€ivitub veel, siis kasutatakse teist tuuma. Meil on eraldatud 16-32 tuuma, nii et 10 inimest saavad samal ajal töötada, probleeme pole.
Kuna fĂŒĂŒsiliselt PGDATA on sama, selgub, et petame tegelikult Postgresât. KĂŒsimus on selles: kĂ€ivitatakse nĂ€iteks 10 Postgresâi samal ajal. Milline probleem tavaliselt on? Seavad , oletame, 25% suuruseks. Seega on see 200 GB. Rohkem kui kolm sellist juba ei kĂ€ivita, sest mĂ€lu lĂ”peb.
Aga mÔnes hetkes mÔistsime, et see ei ole vajalik: seame shared_buffers 2 GB peale. PostgreSQL-il on , ja tegelikult mÔjutab ainult see . Seega seadistame selle 0,5 TB-ks. Ja isegi ei ole oluline, et neid tegelikult ei ole: ta koostab plaane, nagu need oleksid olemas.
Seega, kui me testime mingit migratsiooni, saame koguda kĂ”ik plaanid â me nĂ€eme, kuidas see toimub tootmises. Sekundid vĂ”ivad olla teised (aeglasemad), kuid andmed, mida me reaalselt loeme, ja plaanid (millised JOIN'id ja sarnased) on samad nagu tootmises. Ja samal ajal saame kĂ€ivitada palju selliseid kontrolle ĂŒhel masinal.
ĐĐĄ: Kas sa ei arva, et siin on mĂ”ned probleemid? Esiteks â see lahendus töötab ainult PostgreSQL'is. Selline lĂ€henemine on vĂ€ga spetsiifiline, mitte ĂŒldine. Teiseks â Kubernetes (ja kĂ”ik, kuhu tĂ€napĂ€eval piloodid lĂ€hevad) eeldab palju sĂ”lmi, ja need sĂ”lmed on efemeersed. Ent sinu puhul on see stateful, pĂŒsiv sĂ”lm. Need asjad tekitavad minus vastuolusid.
ĐĐĄ: Esiteks â olen nĂ”us, see on puhtalt PostgreSQL'i lugu. Arvan, et kui meil on mingi otse IO ja vahemĂ€lu praktiliselt kogu mĂ€lule, siis see lĂ€henemine ei sobi â plaanid oleksid teised. Aga me töötame praegu ainult PostgreSQL'iga, teistest ei mĂ”tle.
Kubernetese kohta. Sa ise rÀÀgid, et meie andmebaas on pĂŒsiv. Kui instants kukub, on peamine sĂ€ilitada ketas. Meie platvorm on samuti Kubernetesis, kuid PostgreSQL'i komponent on eraldi (kuigi ka see kunagi sinna tuleb). SeetĂ”ttu on asi nii: instants kukkus, kuid meie sĂ€ilitasime selle PV ja lihtsalt ĂŒhendasime uue instantsi nagu poleks midagi juhtunud.
ĐĐĄ: Minu vaatenurgast loome me pod'e Kubernetesis. K8s on elastne: sĂ”lmed tellitakse vajadusel. Ălesanne on lihtsalt luua pod ja öelda, et talle on vajalik X ressursse, ja edasi tegeleb K8s ise. Kuid ladustuse tugi Kubernetesis on endiselt ebastabiilne: , in (see versioon ilmus nĂ€dalat tagasi) need funktsioonid on alles beetaversioonis.
Aasta jooksul â see muutub enam-vĂ€hem stabiilseks vĂ”i vĂ€hemalt nii vĂ€idetakse. Siis snapshotide ja resize'i vĂ”imalus lahendab teie probleemi tĂ€ielikult. Sest teil on andmebaas. Jah, see ei pruugi olla vĂ€ga kiire, kuid kiirus sĂ”ltub sellest, mis on 'kapoti all', seetĂ”ttu oskavad mĂ”ned teostused kopeerimist ja copy-on-write'i diskisĂŒsteemi tasemel.
ĐĐĄ: Siin peab ka olema, et kĂ”ik mootorid (Amazon, GoogleâŠ) oleksid suutnud hakata seda versiooni toetama â see vĂ”tab samuti aega.
ĐĐĄ: Seni me neid ei kasuta. Me kasutame oma.
Kohalik arendus Kubernetese all
ĐĐĄ: Kas oled kunagi kokku puutunud sooviga, et ĂŒhe masina peal tĂ”sta kĂ”ik pod'id ja teha vĂ€ikest testimist. Et kiirelt saada kontseptsiooni tĂ”estust, vaadata, kuidas rakendus Kuberneteses töötab, eraldamata selleks hulk masinaid. On olemas Minikube, eks?
ĐĐĄ: Tundub, et see juhtum â ĂŒhel sĂ”lmel kĂ€ivitamine â on puhtalt kohalike arenduste jaoks. VĂ”i mingid sellised ilmingud. On , on , . Me liigume suunas, et hakkame Kuberneteset Dockeris kasutama. Oleme nĂŒĂŒd hakanud sellega testimiseks töötama.
ĐĐĄ: Ma arvasin varem, et see on katse panna kĂ”ik pod'id ĂŒhte Docker'i pilti. Kuid selgus, et see on midagi hoopis muud. Seal on endiselt eraldi konteinerid, eraldi pod'id â lihtsalt Docker'is.
ĐĐĄ: Jah. Seal on pĂ€ris naljakas imitatsioon, aga idee on selline... Meil on deployment'i utiliit â . Taha, et teeksime seal reĆŸiimi â ĂŒtleme, werf up: "TĂ”sta mulle kohalik Kubernetes ĂŒles". Ja seejĂ€rel kĂ€ivitada seal tingimuslik werf follow. Siis saab arendaja IDE's redigeerida, ja sĂŒsteemis töötab protsess, mis nĂ€eb muudatusi ja ehitab pildid uuesti ning deponeerib need kohalikku K8s-i. Nii soovime proovida lahendada kohaliku arenduse probleemi.
Snapshotid ja andmebaasi kloonimine K8s-i tingimustes
ĐĐĄ: Kui rÀÀkida copy-on-writeâst. Olen mĂ€rkand, et ka pilvedel on snapshotid. Need töötavad erinevalt. NĂ€iteks GCP: Sul on USA idas rikka terabaidi instants. Teed perioodiliselt snapshot'e. TĂ”stad snapshot'ist koopia ketast lÀÀne rannikule â paar minuti pĂ€rast on kĂ”ik valmis, töötab vĂ€ga kiiresti, ainult vahemĂ€lu tuleb mĂ€lu tĂ€ita. Kuid need kloonid (snapshot'id) â on selleks, et âprovisionâidaâ uus maht. See on Ă€ge, kui on vaja palju instantsse luua.
Aga testide jaoks tundub, et snapshotid, millest sa rÀÀgid Docker'is vĂ”i millest mina rÀÀgin ZFS-is, btrfs-is ja isegi LVM-is⊠â need vĂ”imaldavad tĂ”esti ĂŒhel masinal anda uued andmed. Pilves pead sa nende eest maksma ja pead ootama mitte sekundeid, vaid minuteid (ja juhul, kui , vĂ”ib-olla isegi tunde).
Selle asemel saad sekundi-kahega need andmed, jookse test lĂ€bi ja viska need minema. Need snapshotid lahendavad erinevaid ĂŒlesandeid. Esimesel juhul â et skaleerida ja saada uusi replikaate, teisel â testideks.
ĐĐĄ: Ma ei nĂ”ustu. HĂ€sti toimiva mahutite kloonimise tegemine on pilve ĂŒlesanne. Ma ei ole nende teostust vaadanud, aga tean, kuidas me seda riistvaral teeme. Meil on Ceph, milles vĂ”ib igale fĂŒĂŒsilisele mahutile () öelda clone ja saada mĂ”ne kĂŒmne millisekundi jooksul teine maht sama iseloomuga, jne. Tuleb mĂ”ista, et seal sees on keeruline copy-on-write. Miks pilv ei ĂŒritada samasugust lahendust teha? Olen kindel, et nad ĂŒritavad seda kuidagi saavutada.
ĐĐĄ: Kuid neil lĂ€hevad ikkagi sekundid, kĂŒmned sekundid, et instants ĂŒles tĂ”sta, Docker sinna tuua jne.
ĐĐĄ: Miks peab tingimata ĂŒles tĂ”stma terve instantsi? Meil on ju instants 32 tuuma, 16... ja sellesse mahub teatud arv â nĂ€iteks neli. Kui tellime viienda, siis tĂ”useb instants ja siis kustutatakse see.
ĐĐĄ: Jah, huvitav, Kuberneteses on lugu teistsugune. Meie andmebaas ei ole K8s-is ja meil on ĂŒks instants. Kuid mitme terabaidi andmebaasi kloonimiseks kulub mitte rohkem kui kaks sekundit.
ĐĐĄ: See on Ă€ge. Aga minu algne mĂ”te on see, et see ei ole ĂŒldine lahendus. Jah, see on kaunis, kuid sobib ainult Postgresâile ja ainult ĂŒhes sĂ”lmest.
ĐĐĄ: See sobib mitte ainult Postgresâile: need plaanid, nagu ma kirjeldasin, töötavad nii ainult seal. Kuid kui plaanide pĂ€rast ei muretse, vaid vajame lihtsalt kĂ”iki andmeid funktsionaalseks testimiseks, siis sobib see iga andmebaassi jaoks.
ĐĐĄ: Palju aastaid tagasi tegime sarnast LVM-snapĆĄottidega. See on klassika. Sellist lĂ€henemist kasutati vĂ€ga aktiivselt. Lihtsalt stateful sĂ”lmed â see on valu. Sest neid ei tohi kukutada, neist tuleb alati meeles pidada...
ĐĐĄ: Kas sa ei nĂ€e siin mingit hĂŒbriidi vĂ”imalust? Oletame, et stateful on mingi pod, see töötab mitme inimese peal (palju testijaid). Meil on ĂŒks maht, aga tĂ€nu failisĂŒsteemile on kloonid â kohalikes. Kui pod kukub, jÀÀb kettale jĂ€rgi â pod tĂ”useb ĂŒles, loeb kĂ”igi kloonide teavet, tĂ”stab kĂ”ik tagasi ja ĂŒtleb: âSiin on teie kloonid nende portides, töötage nendega edasi.â
ĐĐĄ: Tehniliselt tĂ€hendab see, et Kuberneteses on see ĂŒks pod, mille sees kĂ€itame mitut Postgresâi.
ĐĐĄ: Jah. Tal on piir: oletame, et samal ajal töötavad temaga mitte rohkem kui 10 inimest. Kui on vaja 20 â kĂ€ivitame teise sellise podi. TĂ€iesti on vĂ”imalik, et kloonime selle, saades teise tĂ€is mahu, millel on samad 10 âĂ”hukestâ klooni. Kas sa ei nĂ€e sellist vĂ”imalust?
ĐĐĄ: Siin tuleb lisada turvakĂŒsimused. TĂŒĂŒporganisatsiooni puhul eeldatakse, et sellel podâil on suured priviliegid (capabilities), kuna see vĂ”ib faili sĂŒsteemis teha mittestandardseid toiminguid... Aga siiski, ma usun, et keskpikas perspektiivis parandatakse Kubernetes storage'i, pilvedes tehakse kĂ”ik volĂŒĂŒmide ajalugu korda â kĂ”ik töötab lihtsalt. Olemas on resize, kloonimine... On maht - ĂŒtleme: âLoo uus selle pĂ”hjalâ - ja poolteise sekundi pĂ€rast saame, mida vajame.
ĐĐĄ: Ma ei usu, et paljude terabaitide puhul on poolteist sekundit vĂ”imalik. Cephis teed ise, aga rÀÀgid pilvedest. Mine pilve, tee EC2-s kloon EBS mahust paljude terabaitide ulatuses ja vaata, milliseks jĂ”udluseks see muutub. See ei kesta paar sekundit. Mind huvitab, millal nad sellise tasemeni jĂ”uavad. Ma saan aru, millisest sa rÀÀgid, aga luban endal mitte nĂ”ustuda.
ĐĐĄ: Okei, aga ma ĂŒtlesin, et keskpikas perspektiivis, mitte lĂŒhikese. Paari aasta jooksul.
Zalando PostgreSQL operaatori kohta
Selle kohtumise keskpaiku liitus temaga ka Aleksei Kljukin, endine arendaja Zalandoâst, kes rÀÀkis PostgreSQL operaatori ajaloost:
Hea, et see teema ĂŒldse ĂŒles kerkis: nii Postgres kui Kubernetes. Kui me alustasime selle loomist Zalando's 2017. aastal, oli see teema, mille eest kĂ”ik soovisid tegeleda, kuid keegi ei teinud. KĂ”igil hakkas Kubernetes tekkima, aga kui kĂŒsiti, kuidas andmebaasidega olla, siis isegi sellised inimesed nagu , kes propageerisid K8s-i, ĂŒtlesid umbes jĂ€rgmist:
âMinge haldusteenustele ja kasutage neid, Ă€rge kĂ€itage DB-d Kuberneteses. Muul juhul otsustab teie K8s nĂ€iteks teha uuenduse, sulgeb kĂ”ik sĂ”lmed ja teie andmed lĂ€hevad kaugele- kaugele.â
Me otsustasime teha operaatori, mis vastupidiselt sellele nĂ”uandele kĂ€ivitab PostgreSQL andmebaasi Kuberneteses. Ja meil oli hea alus - . See on automaatne failover PostgreSQL jaoks, mis on Ă”igesti tehtud, st kasutades etcd, consul vĂ”i ZooKeeperât klastrite info hoidmiseks. Selline salvestus, mis jagab kĂ”igile, kes kĂŒsivad, nĂ€iteks, kes on praegu juht, sama teavet - sĂ”ltumata sellest, et meil on kĂ”ik jaotatud - et split brainâi ei tekiks. Pluss, meil oli selle jaoks.
Tegelikult tekkis vajadus auto failover'i jĂ€rele ettevĂ”ttel pĂ€rast sisemise riistvara andmekeskusest pilve ĂŒleminekut. Pilv pĂ”hines enda PaaS (Platform-as-a-Service) lahendusel. See oli avatud allikaga, kuid selle ĂŒlesseadmisega tuli kĂ”vasti vaeva nĂ€ha. Selle nimi oli .
Alguses ei olnud mingeid Kubernetes'e. Tegelikult, kui oma lahendust ĂŒles seati, oli K8s juba olemas, kuid see oli nii toores, et produktsiooniks ei sobinud. See oli minu arvates 2015. vĂ”i 2016. aasta. 2017. aastaks oli Kubernetes enam-vĂ€hem kĂŒps â tekkis vajadus migratsiooni jĂ€rele sinna.
Ja meil oli juba Docker-konteiner. Oli PaaS, mis kasutas Dockerit. Miks mitte proovida K8s? Miks mitte kirjutada oma operaator? Murat Kabilov, kes tuli meie juurde Avitost, alustas seda projekti isikliku algatuse pĂ”hjal â "mĂ€ngimiseks" â ja projekt "lendas".
Aga tegelikult tahtsin ma rÀÀkida AWS-ist. Miks seal oli ajalooliselt kood, mis oli seotud AWS-igaâŠ
Kui te kĂ€ivate oma midagi Kubernetes'es, peate mĂ”istma, et K8s on töö kĂ€igus. See areneb pidevalt, tĂ€iustatakse ja perioodiliselt isegi puruneb. Tuleb hoolikalt jĂ€lgida kĂ”iki muudatusi Kubernetes'es, olla valmis sĂŒvenema ja vĂ€lja selgitama, kuidas see detailides töötab â vĂ”ib-olla rohkem, kui sooviksite. See on pĂ”himĂ”tteliselt igal platvormil, millel te oma andmebaase kĂ€itateâŠ
Nii et kui me tegime operaatorit, oli meil Postgres, mis töötas vĂ€lise mahuga (antud juhul â EBS, kuna me tegutsesime AWS-is). Andmebaas kasvas, ja mingil hetkel tuli teha resize: nĂ€iteks, algne EBS suurus â 100 Tb, andmebaas jĂ”udis selleni, nĂŒĂŒd tahame EBS-i 200 Tb. Kuidas? Oletame, et vĂ”ib teha dump/restore uuele instantsile, kuid see on aeglane ja aeglane.
Seega soovisime sellist resize'i, mis suurendaks EBS-i osa ja seejĂ€rel ĂŒtleb failisĂŒsteemile, et kasutada uut ruumi. Ja me tegime seda, kuid sel ajal ei olnud Kubernetes'es ĂŒhtegi API-d resize'i operatsiooni jaoks. Kuna me tegutsesime AWS-is, kirjutasime oma API koodi.
Keegi ei takista sama teha teiste platvormide jaoks. Operaatoril ei ole sĂ”ltuvust, et seda saab kĂ€itada ainult AWS-is, vĂ”i et see ei tööta mujal. ĂhesĂ”naga, see on avatud allikaga projekt: kui kellegil on soov kiirendada uue API kasutuselevĂ”ttu â olete teretulnud. On , pull-requests â Zalando meeskond pĂŒĂŒab neile ĂŒsna kiiresti vastata ja operaatorit edendada. Nii palju kui ma tean, projekt Google Summer of Code'i ja mĂ”nedes teistes sarnastes algatustes. Zalando töötab selle kallal vĂ€ga aktiivselt.
P.S. Boonus!
Kui teid huvitab PostgreSQL ja Kubernetes, siis juhtime tÀhelepanu, et eelmisel nÀdalal toimus jÀrgmine Postgres-teisipÀev, kus Nikolai suhtles Alexander Kukushkiniga Zalando's. Video temast on saadaval .
P.P.S.
Lugege ka meie blogist:
- «»;
- «»;
- «»;
- «».
Allikas: habr.com
