
Möödunud aasta lĂ”pus toimus jĂ€rgmine otseĂŒlekanne Venemaa PostgreSQLi kogukonnalt , mille kĂ€igus rÀÀkis selle kaasasutaja Nikolai Samokhvalov "Flanta" tehnilise direktori Dmitri Stolyaroviga sellest andmebaasisĂŒsteemist Kubernetes kontekstis.
Avaldame selle arutelu pÔhiosa stenogrammi, ning on avaldatud tÀielik videosalvestus:

Andmebaasid ja Kubernetes
NS: TĂ€na ei rÀÀgi me VACUUM'ist ega CHECKPOINT'idest. Tahame rÀÀkida Kubernetesest. Tean, et sul on juba palju aastaid kogemust. Olen vaadanud sinu videoid ja mĂ”ned isegi uuesti lĂ€bi kĂ€inud⊠Alustame kohe: miks on Postgres vĂ”i MySQL K8s-is ĂŒleĂŒldse vajalik?
DS: Sellele kĂŒsimusele ei ole ĂŒhtegi kindlat vastust, ega saagi olla. Aga ĂŒldiselt on see lihtsus ja mugavus⊠potentsiaalselt. KĂ”igile meeldiks ju manageeritud teenused.
NS: Nii nagu , ainult, et endal?
DS: Jah: et nagu RDS, ainult kus iganes.
NS: âIgasugustes kohtadesâ on hea tĂ€helepanek. Suurtes ettevĂ”tetes on kĂ”ik erinevates kohtades. Miks siis, kui tegemist on suure ettevĂ”ttega, mitte kasutada valmis lahendust? NĂ€iteks Nutanixil on oma arendus, teistel ettevĂ”tetel (VMwareâŠ) â sama âRDS, aga enda omaâ.
DS: Aga see, millest me rÀÀgime, on konkreetne teostus, mis töötab ainult teatud tingimustes. Kui rÀÀkida Kubernetesest, siis siin on tohutu infrastruktuuri mitmekesisus (mis vĂ”ib olla K8s-is). Sisuliselt on see API standard pilve jaoksâŠ
NS: Veel tasuta!
DS: See pole nii oluline. Tasuta on oluline mitte vĂ€ga suurele turusegmendile. Oluline on midagi muud⊠Sa ilmselt mĂ€letad ettekannet â»?
NS: Jah.
DS: Ma sain aru, et seda tĂ”lgendati vĂ€ga erinevalt. Osad inimesed arvasid, et ma ĂŒtlen: âKĂŒsimus on, kas minna kĂ”ik andmebaasid Kubernetesesse!â, â teised aga leidsid, et see on kĂ”ik kokku jube. Aga mina tahtsin rÀÀkida hoopis millestki muust: âVaadake, mis toimub, millised on probleemid ja kuidas neid lahendada. Kas peaks praegu liikuma andmebaasidega Kubernetesesse? Production'isse? No, ainult juhul, kui teile meeldib⊠tegeleda teatud asjadega. Aga dev'ile â vĂ”in öelda, et soovitan. Dev'ile on vĂ€ga tĂ€htis keskkondade loomise ja kustutamise dĂŒnaamilisus.
NS: Pead sa dev'il silmas kĂ”iki keskkondi, mis ei ole prod? Staging, QAâŠ
DS: Kui rÀÀgime perf-seisakutest, siis ilmselt mitte, sest seal on nÔuded spetsiifilised. Kui rÀÀgime erijuhtudest, kus staging'ul on vaja vÀga suurt andmebaasi, siis ka tÔenÀoliselt mitte⊠Kui see on staatiline keskkond, mis peab pikalt kestma, siis mis kasu on andmebaasist, mis asub K8s-is?
NS: Ei mingit. Aga kus me nÀeme staatilisi keskkondi? Staatiline keskkond on juba homme aegunud.
DS: Staging vĂ”ib olla staatiline. Meil on klienteâŠ
NS: Jah, mul on ka. Suur probleem, kui sul on 10 TB andmebaas ja staging on 200 GBâŠ
DS: Mul on vĂ€ga Ă€ge juhtum! Staging'is on prod'i andmebaas, millesse tehakse muudatusi. Samuti on olemas nupp: âviia tootmisseâ. Need muudatused â deltid â lĂŒkatakse (tundub, et lihtsalt API kaudu sĂŒnkroonitakse) tootmisserverisse. See on vĂ€ga eksootiline variant.
NS: Olen nĂ€inud idufirmasid oru alal, kes on veel RDS'is vĂ”i isegi Herokus â need on 2-3 aastat vanad lood â ja nad laadivad dump'i oma sĂŒlearvutisse. Sest andmebaas on vaid 80 GB ja sĂŒlearvutis on ruumi. Siis ostavad nad igale ĂŒhele kettaid juurde, et oleks kolm andmebaasi, et erinevaid arendusi teha. Nii ka juhtub. Olen ka nĂ€inud, et ei karda tootmist staging'isse kopeerida â see sĂ”ltub vĂ€ga palju ettevĂ”ttest. Kuid olen nĂ€inud ka, et kardetakse vĂ€ga, ja tihti ei jĂ€tku aega ja kĂ€si. Kuid enne kui me selle teema juurde lĂ€heme, tahaksin kuulda Kubernetesest. Kas ma Ă”igesti aru saan, et tootmises ei ole seda veel kellelgi?
DS: Meil on vĂ€iksed andmebaasid prod' is. RÀÀgime kĂŒmnete gigabaitide mahtudest ja mitte kriitilistest teenustest, mille jaoks ei viitsinud koopiaid teha (ja pole ka tĂ”elist vajadust). Ja eeldusel, et Kubernetes'i all on normaalne salvestus. See andmebaas töötas virtuaalmasinas â tinglikult VMware-is, andmehoidla peal. Me panime selle ja nĂŒĂŒd saame seda ĂŒhest masinast teise ĂŒle viia.
NS: Sellise suurusega andmebaasid, kuni 100 GB, headel ketastel ja hea vĂ”rgu korral, saab paigaldada paarikĂŒmne minuti jooksul, eks? Kiirus 1 GB sekundis â see ei ole enam eksootika.
DS: Jah, lineaarse operatsiooni puhul ei ole see probleem.
NS: Okei, prod'ist peame vaid mĂ”tlema. Aga kui me kaalume Kuberneteset mitte-prod'i keskkondade jaoks â kuidas tegutseda? Ma nĂ€en, et Zalando , Crunchy , on veel mĂ”ned variandid. Ja on â meie hea tuttav Alvaro Hispaaniast: nad teevad sisuliselt mitte lihtsalt , vaid kogu distributsiooni (), kuhu lisaks Postgres'le on nad otsustanud panna ka varukoopia, proksi EnvoyâŠ
DS: Envoy milleks? Just Postgres'i liikluse tasakaalustamiseks?
NS: Jah. See tĂ€hendab, et nad nĂ€evad seda nii: kui vĂ”tta Linuxi jaotamine ja tuum, siis tavaline PostgreSQL on tuum, kuid nad tahavad luua jaotuse, mis on pilvesĂ”bralik ja töötab Kuberneteses. Nad ĂŒhendavad komponente (varukoopiad jne) ja kohandavad, et need hĂ€sti töötaksid.
DS: TÔeliselt Àge! Sisuliselt on see tarkvara, et teha oma hallatud Postgres.
NS: Linuxi jaotustel on pidevalt probleeme: kuidas teha draivereid, et kogu riistvara toetataks. Neil on idee, et nad töötavad Kuberneteses. Ma tean, et operaatorel Zalando puhul nĂ€gime hiljuti sĂ”ltuvust AWS-st ja see pole enam eriti hea. Ei peaks olema sĂ”ltuvust konkreetsest infrastruktuurist â mis siis on selle mĂ”te?
DS: Ei tea, millises konkreetses olukorras Zalando sĂ”ltus, aga Kuberneteses on praegu salvestus tehtud nii, et ei saa ĂŒldiselt ketta varukoopiat teha. Hiljuti lisati standardisse â viimases versioonis â tehti vĂ”imalus hetkepilte, aga kus see on rakendatud? Ausalt, see on endiselt nii toores⊠Me proovime CSI-d AWS, GCE, Azure, vSphere peal, aga kui hakkad kasutama, siis on kohe nĂ€ha, et see pole veel valmis.
NS: SeetĂ”ttu peab mĂ”nikord infrastruktuuri kĂŒlge siduma. Usun, et see on endiselt varajane staadium - kasvu probleemid. KĂŒsimus: mida sa soovitaksid algajatele, kes tahavad proovida PgSQL K8s-is? Milline operaator, vĂ”ib-olla?
DS: Probleme on selles, et Postgres meie jaoks on 3%. Meil on veel vĂ€ga pikk nimekiri erinevast tarkvarast Kuberneteses, ei hakka isegi kĂ”ike loetlema. NĂ€iteks Elasticsearch. Operaatorite hulk on suur: mĂ”ned arenevad aktiivselt, teised mitte. Oleme endale koostanud nĂ”uded, mis peavad operaatoris olema, et me vĂ”taksime selle tĂ”siselt. Operaator Kuberneteses - mitte âoperaator, et midagi Amazoni tingimustes tehaâ... Tegelikult kasutame me piisavalt laialdaselt (= peaaegu kĂ”igil klientidel) ĂŒhte operaatorit - (varsti avaldame ka temast artikli).
NS: Ent MySQLi jaoks ei ole ka? Ma tean, et Percona⊠kuna nad nĂŒĂŒd tegelevad nii MySQL, MongoDB kui ka Postgresiga, peavad nad looma mingi universaalse lahenduse: kĂ”igi andmebaaside jaoks, kĂ”igi pilveteenuse pakkujate jaoks.
DS: Me ei jÔudnud vaadata MySQL operaatorite peale. See ei ole meie peamine fookus. MySQL töötab iseseisvalt normaalselt. Miks operaator, kui saad lihtsalt DB kÀivitada⊠Sa saad kÀivitada Docker-konteineri Postgresiga, vÔi siis veel lihtsamalt.
NS: Selle kohta oli ka kĂŒsimus. TĂ€iesti ilma operaatorita?
DS: Jah, 100% meie PostgreSQL töötab ilma operaatorita. Praegu on see nii. Me kasutame operaatorit aktiivselt Prometheuse ja Redis'e jaoks. Meil on plaanis leida operaator Elasticsearch'i jaoks â see on kĂ”ige pĂ”letavam, sest tahame seda 100% juhtudel Kubernetesesse paigutada. Nii nagu tahame, et MongoDB oleks alati Kuberneteses. Siin tekivad teatud soovid â on tunne, et seda on vĂ”imalik teha. Ja Postgres'i osas me isegi ei vaadanud. Loomulikult teame, et erinevaid variante on olemas, aga tegelikult on meil standalone.
Andmebaas testimiseks Kuberneteses
NS: Liigume testimise teema juurde. Kuidas teha andmebaasis muudatusi â DevOpsi perspektiivist. On mikroteenuseid, palju andmebaase, pidevalt muutub midagi. Kuidas tagada normaalne CI/CD, et DB seisukohalt oleks kĂ”ik korras. Mis on sinu lĂ€henemine?
DS: Ăhte vastust ei saa olla. On mitu parameetrit. Esimene on andmebaasi suurus, mille me tahame avada. Sa mainisid, et erinevad ettevĂ”tted suhtuvad erinevalt sellesse, et prod-andmebaasi koopia oleks dev- ja stage-vkes.
NS: GDPR-i tingimustes arvan, et nad kĂ€ituvad ĂŒha ettevaatlikumalt... VĂ”in öelda, et Euroopas on juba hakatud trahve mÀÀrama.
DS: Kuid tihti on vĂ”imalik kirjutada tarkvara, mis teeb dump'i production'ist ja obfuskeerib seda. Saame prod-andmed (snapĆĄoti, dump'i, binaarse koopia...), kuid need on anonĂŒĂŒmsed. Selle asemel vĂ”ivad olla ka genereerimise skriptid: need vĂ”ivad olla fikstuurid vĂ”i lihtsalt skript, mis genereerib suure andmebaasi. Probleem on see: kui palju aega kulub pĂ”hivormi loomisele? Ja kui palju aega kulub selle rakendamiseks soovitud keskkonnas?
Oleme jĂ”udnud skeemi: kui kliendil on fikstuurikomplekt (minimum andmebaasi versioon), siis kasutame neid vaikimisi. Kui rÀÀgime review-keskkondadest, kui oleme loonud haru ja meil on rakendus kĂ€ivitatud â tĂ”stame sinna vĂ€ikese andmebaasi. Aga see Ă”nnestus hĂ€sti ja , kui productionâst teeme kord pĂ€evas (öösel) dump'i ja kogume selle pĂ”hjal Docker-konteineri PostgreSQL ja MySQL'iga koos nende laaditud andmetega. Kui sellest pildist on vaja 50 korda andmebaasi ĂŒles seada, siis see kĂ€ib piisavalt lihtsalt ja kiiresti.
NS: Lihtsa kopeerimisega?
DS: Andmed on otse Docker'i pildis. St meil on valmis pilt, olgu see 100 GB. TĂ€nu Docker'i kihtidele saame seda pilti kiiresti vajaliku arvu kordi ĂŒles seada. Meetod on vĂ”ib-olla lihtne, aga töötab hĂ€sti.
NS: Edasi, kui testite, siis see muutub otse Docker'is, eks? Copy-on-write Docker'is â viskame vĂ€lja ja lĂ€hme taas teele, kĂ”ik on korras. Hinne! Ja kas te juba kasutate seda tĂ€ies mahus?
DS: Ammu.
NS: Me tegeleme vÀga sarnaste asjadega. Ainult et me ei kasuta Docker'i copy-on-write'i, vaid midagi muud.
DS: See ei ole ĂŒldine. Aga Docker'i variant töötab igal pool.
NS: Idee jĂ€rgi, jah. Kuid meil on seal ka moodulid, saame luua erinevaid mooduleid ja töötada erinevate failisĂŒsteemidega. Siin on ĂŒks hetk: me vaatame seda Postgres'i poolest tĂ€iesti erinevalt. NĂŒĂŒd olen vaadanud Docker'i poolt ja nĂ€inud, et teil kĂ”ik töötab. Kuid kui andmebaas on hiiglaslik, nĂ€iteks 1 TB, siis see juba vĂ”tab aega: nii öised operatsioonid kui ka kĂ”ik Dockerisse paigutamine... Ent kui 5 TB paigutada Dockerisse... VĂ”i on kĂ”ik korras?
DS: Mis vahet seal on: need on ju blobid, lihtsalt bitid ja baitid.
NS: Kas vahe on selles, et teete seda dump'i ja restore'iga?
DS: Sugugi mitte vajalik. Selle pildi genereerimise meetodid vÔivad olla erinevad.
NS: MĂ”nedele klientidele oleme teinud nii, et regulaarselt generatiivse baaspildi asemel hoiame seda pidevalt ajakohasena. See on pĂ”himĂ”tteliselt replikatsioon, kuid andmed ei tule mitte otse peaharu kaudu, vaid arhiivi kaudu. Binaarne arhiiv, kuhu WAL'id laetakse igapĂ€evaselt, seal tehakse ka varukoopiaid... Need WAL'id jĂ”uavad seejĂ€rel - vĂ€ikese viivitusega (tĂ€pselt 1-2 sekundit) - baaspildini. Sealt kloneerime me igal viisil - nĂŒĂŒd on meid vaikimisi ZFS.
DS: Kuid ZFS-iga olete piiratud ĂŒhe sĂ”lme kasutamisega.
NS: Jah. Kuid ZFS-l on veel ĂŒks maagia : selle abil saab saata snapshot'i ja isegi (ma ei ole seda veel eriti testinud, aga...) saab saata delta kahte erineva vahel PGDATA. Tegelikult on meil veel ĂŒks tööriist, mida me selliste ĂŒlesannete jaoks ei ole eriti uurinud. PostgreSQL-s on , mis töötab nagu 'nutikas' rsync, vahele jĂ€ttes palju sellist, millele ei pea tĂ€helepanu pöörama, sest seal ei ole midagi muutunud. Me saame kiire senkroniseerimise teha kahel serveril ja tagasi rullida tĂ€pselt samamoodi.
Nii et me proovime selle DBA-maisema kĂŒlje pealt luua tööriista, mis vĂ”imaldab teha sama, millest sa rÀÀkisid: meil on ĂŒks andmebaas, kuid me tahame 50 korda midagi testida, peaaegu samal ajal.
DS: 50 korda tÀhendab, et peate tellima 50 Spot'ainstantsse.
NS: Ei, teeme kĂ”ik ĂŒhel masinal.
DS: Aga kuidas te paigutate 50 korda, kui see ĂŒks andmebaas on, ĂŒtleme, terabaidine. TĂ”enĂ€oliselt vajab see tinglikult 256 GB RAM-i?
NS: Jah, mĂ”nikord on mĂ€lu tĂ”esti palju â see on normaalne. Aga selline nĂ€ide elust. Toote masinal on 96 tuuma ja 600 GB. Samas kasutatakse andmebaasi jaoks 32 tuuma (isegi 16 tuuma vahel on nĂŒĂŒd mĂ”nikord) ja mĂ€lu 100-120 GB.
DS: Ja sinna mahub 50 koopiat?
NS: Nii et koopia on ĂŒks, edasi töötab copy-on-write (ZFS-iga)⊠RÀÀgin lĂ€hemalt.
Meil on nĂ€iteks 10 TB andmebaas. Selle jaoks tehtud kett, ZFS surus selle suurust veel 30-40% vĂ”rra kokku. Kuna me ei teosta koormustestimist, ei ole meile tĂ€pne reageerimisaeg oluline: olgu see ka kahe korda aeglasem â see on okei.
Pakume vĂ”imaluse arendajatele, QA-le, DBA-dele jne testida 1-2 voos. NĂ€iteks saavad nad kĂ€ivitada mingi migratsiooni. See ei vaja kohe 10 tuuma â selleks on vajalik 1 Postgresi taust, 1 tuum. Migratsioon kĂ€ivitub â vĂ”ib-olla, veel kĂ€ivitub, siis kasutatakse teist tuuma. Meil on eraldatud 16-32 tuuma, nii et 10 inimest saavad samal ajal töötada, probleeme ei ole.
Kuna fĂŒĂŒsiliselt PGDATA on sama, selgub, et tegelikult petame Postgresi. NĂ€iteks kĂ€ivitub samaaegselt 10 Postgresit. Mis on tavaliselt probleem? Panakse , oletame, 25%. Vastavalt sellele on see 200 GB. Rohkem kui kolm sellist ei saa enam kĂ€ivitada, kuna mĂ€lu saab otsa.
Aga mingil hetkel mÔistsime, et see pole vajalik: seadistame shared_buffers 2 GB. PostgreSQL-l on , ja tegelikult mÔjutab see ainult . Me paigaldame selle 0,5 TB. Ja isegi ei ole oluline, et neid tegelikult ei ole: ta koostab plaane, nagu oleks need olemas.
Seega, kui testime mingit migratsiooni, saame koguda kĂ”ik plaanid â nĂ€eme, kuidas see production'is toimuma hakkab. Sekundid vĂ”ivad olla teised (aeglasemad), kuid andmed, mida me tĂ”eliselt loeme, ja enda plaanid (millised JOIN'id ja nii edasi) on tĂ€pselt sellised nagu production'is. Ja samal ajal saab töötada mitme sellise kontrolliga ĂŒhel masinal.
DS: Kas sa ei arva, et siin on mitu probleemi? Esiteks â see lahendus töötab ainult PostgreSQL-is. Selline lĂ€henemine on vĂ€ga spetsiifiline, see ei ole generiline. Teiseks â Kubernetes (ja kĂ”ik, kuhu nĂŒĂŒd pilvetehnoloogiad lĂ€hevad) eeldab mitmeid sĂ”lme, ja need sĂ”lmed on efemeersed. Aga sinu puhul on see stateful, pĂŒsiv sĂ”lm. Need asjad tekitavad minus vastuolusid.
NS: Esmalt â olen nĂ”us, see on puhtalt Postgres'i lugu. Arvan, et kui meil on mingisugune direct IO ja puhverpood peaaegu kogu mĂ€lu jaoks, siis selline lĂ€henemine ei sobi â plaanid oleksid teised. Aga praegu töötame ainult Postgres'iga, teisest ei mĂ”tle.
Kubernetesest. Sa ju rÀÀgid igal pool, et meie andmebaas on pĂŒsiv. Kui instants kukkus kokku, on peamine â sĂ€ilitada ketas. Meie kogu platvorm on samuti Kuberneteses, ning Postgres'i komponent on eraldi (kuigi ka see kunagi seal olema hakkab). Seega on asi nii: instants kukkus kokku, aga me sĂ€ilitasime selle PV ja ĂŒhendasime lihtsalt uue instantsi kĂŒlge, nagu polekski midagi juhtunud.
DS: Minu arvates loome me pod'e Kuberneteses. K8s on elastne: sĂ”lmed tellitakse ise vastavalt vajadusele. Ălesanne on lihtsalt luua pod ja öelda, et tal on vaja X ressursse, ning edasi K8s korraldab kĂ”ik ise. Kuid salvestuste tugi Kuberneteses on endiselt ebastabiilne: , in (see vĂ€ljaanne ilmus nĂ€dalat tagasi) need funktsioonid on alles beetaversioonis.
Kuu vĂ”i aasta pĂ€rast â see muutub enam-vĂ€hem stabiilseks, vĂ”i vĂ€hemalt on nii kuulutatud. Siis lahendab snapshotâide ja resize'i vĂ”imalus teie ĂŒlesande tĂ€ielikult. Sest teil on andmebaas. Jah, see vĂ”ib olla mitte eriti kiire, aga kiirus sĂ”ltub sellest, mis on "kaane all", sest mĂ”ned teostused suudavad kopeerida ja copy-on-write-diskisĂŒsteemi tasemel.
NS: Siin on veel asjaolu, et kĂ”ik mootorid (Amazon, GoogleâŠ) peavad selle versiooni toetamisega tegelema â see vĂ”tab samuti aega.
DS: Praegu me neid ei kasuta. Me kasutame oma lahendust.
Kohalik arendus Kubernetes'ile
NS: Kas oled kunagi kokku puutunud sooviga kĂ€ivitada kĂ”ik pod'id ĂŒhel masinal ja teha vĂ€ikest testimist. Et kiiresti saada tĂ”end kontseptsioonist, vaadata, kuidas rakendus Kubernetes'is töötab, ilma et peaksime sellele palju masinaid eraldama. On olemas Minikube, eks?
DS: Minu arvates on see juhtum â ĂŒhel sĂ”lmel ĂŒles seadmine â puhtalt kohaliku arenduse teema. VĂ”i mingid selle mustri ilmingud. On , on , . Me oleme suundumas selle poole, et hakkame Kubernetes'i Docker'i sees kasutama. Oleme hakanud sellega katsetama.
NS: Ma arvasin varem, et see on katse pakkida kĂ”ik pod'id ĂŒhe Docker'i pildina. Aga osutus, et see on hoopis midagi muud. Seal on endiselt eraldi konteinerid, eraldi pod'id â lihtsalt Docker'is.
DS: Jah. Ja seal on ĂŒsna naljakas imitatsioon tehtud, aga mĂ”te on selline... Meil on tööriist, et rakendusi ĂŒles seada â . Me tahame sellesse teha reĆŸiimi â tinglikult werf up: âKĂ€ivita mulle kohalik Kubernetesâ. Ja seejĂ€rel kĂ€ivitada seal tinglik werf follow. Siis saab arendaja IDE-s redigeerida, samal ajal kui sĂŒsteemis on tööprotsess, mis nĂ€eb muudatusi ja uuesti koostab pildid, deponeerib need kohalikku K8s-sĂŒsteemi. Just nii pĂŒĂŒame lahendada kohaliku arenduse probleemi.
Snapshots ja andmebaasi kloonimine K8s-i kontekstis
NS: Kui rÀÀkida copy-on-write'ist. Olen mĂ€rganud, et ka pilveteenustel on snapshots. Need töötavad erinevalt. NĂ€iteks GCP-s: sul on USA idakaldal mitme terabaiti instants. Teed regulaarselt snapshots. TĂ”stad snapshots'ist koopia ketas lÀÀnekaldale â mĂ”ne minutiga on kĂ”ik valmis, töötab vĂ€ga kiiresti, ainult cache tuleb mĂ€lu tĂ€ita. Kuid need kloonid (snapshots) on mĂ”eldud uue mahu 'provision'imiseks. See on lahe, kui pead looma palju instantsse.
Aga testide jaoks, mulle tundub, et snapshote, millest sa rÀÀgid Dockeris vĂ”i millest mina rÀÀgin ZFS, btrfs ja isegi LVM⊠â need vĂ”imaldavad sama masinaga mitte teha tĂ”eliselt uusi andmeid. Pilves pead sa ka igakord nende eest maksma ja ootama ei mitte sekundeid, vaid minuteid (ja juhtudel , vĂ”ib-olla isegi tunde).
Selle asemel saab need andmed sekunditega kĂ€tte, testi lĂ€bi viia ja kĂ”rvaldada. Need kiirĂŒlevaated lahendavad erinevaid ĂŒlesandeid. Esimeses olukorras â et skaleerida ja uusi koopiaid saada, teises â testide jaoks.
DS: Ma ei nĂ”ustu. Korraliku mahutite kloonimise tegemine on pilve ĂŒlesanne. Ma ei ole nende teostust vaadanud, aga tean, kuidas me seda riistvaral teeme. Meil on Ceph, kus on vĂ”imalik igale fĂŒĂŒsilisele mahutile () öelda clone ja saada juba kĂŒmnete millisekunditega teine mahuti, millel on samad omadused, jne. Tuleb mĂ”ista, et seal sees on keeruline copy-on-write. Miks ei vĂ”iks pilv ka nii teha? Olen kindel, et nad pĂŒĂŒavad seda mingil moel saavutada.
NS: Kuid neil kulub ikkagi sekundeid, kĂŒmneid sekundeid, et instantsi ĂŒles tĂ”sta, Docker sinna tuua jne.
DS: Miks peaks kohe terve instantsi tĂ”stma? Meil on ju instants 32 sĂŒdamikuga, 16⊠ja sinna mahub mitmeid â nĂ€iteks neli. Kui tellime viienda, tĂ”useb juba instants, mis siis kaotatakse.
NS: Jah, huvitav, et Kuberneteses on hoopis teine lugu. Meie andmebaas ei ole K8s-is ja on ĂŒks instants. KĂŒll aga lĂ€heb mitme terabaidi andmebaasi kloonimiseks maksimaalselt kaks sekundit.
DS: See on Ă€ge. Aga minu algne mĂ”te oli, et see ei ole ĂŒldine lahendus. Jah, see on lahe, aga sobib ainult Postgresile ja ainult ĂŒhel sĂ”lmel.
NS: See sobib mitte ainult Postgresile: nagu ma kirjeldasin, töötavad need plaanid ainult selles. Aga kui me ei muretse plaanide pÀrast ja vajame lihtsalt kÔiki andmeid funktsionaalseteks testideks, siis sobib see igasuguste andmebaaside jaoks.
DS: Palju aastaid tagasi tegime me sarnast LVM-snapshottide peal. See on klassika. Sellist lÀhenemist kasutati vÀga aktiivselt. Stateful-sÔlmed on lihtsalt valus. Sest neid ei tohi kukutada, neist tuleb alati meeles pidada...
NS: Kas sa ei nĂ€e siin mingisugust hĂŒbriidi vĂ”imalust? Oletame, et stateful on mingi pod, mis töötab mitme inimese peal (palju testijate). Meil on ĂŒks maht, aga tĂ€nu failisĂŒsteemile on kloonid kohalikud. Kui pod kukub, jÀÀb ketas alles â pod tĂ”useb tagasi, loeb kogu teabest kloonide kohta, tĂ”stab kĂ”ik tagasi ĂŒles ja ĂŒtleb: «Siin on teie kloonid nende portide peal, jĂ€tkake nendega tööd».
DS: Tehniliselt tĂ€hendab see, et Kuberneteses on see ĂŒks pod, mille sees kĂ€ivitame palju Postgres'e.
NS: Jah. Tal on piirmÀÀr: oletame, et samal ajal saab selle juures töötada mitte rohkem kui 10 inimest. Kui on vaja 20 â kĂ€ivitame teise sellise podâi. TĂ€iesti reaalne on seda kopeerida, saades teise tĂ€is mahtu, millel on sama 10 âĂ”hukestâ klooni. Kas sa ei nĂ€e sellist vĂ”imalust?
DS: Siia tuleb lisada turvakĂŒsimused. Selline korraldus tĂ€hendab, et sellel pod'il on suured privileegid (capabilities), sest see vĂ”ib teha mittestandardsed toimingud failisĂŒsteemiga⊠Kuid ma kordaksin, et usun, et Kubernetes parandab keskpikas perspektiivis storage'i, pilved parandavad kogu mahtude teema â kĂ”ik hakkab lihtsalt tööle. Olemas on resize, kloonimine⊠Kui maht on olemas â me ĂŒtleme: âLoo uus selle pĂ”hjalâ, â ja poolteise sekundi jooksul saame, mida vajame.
NS: Ma ei usu poolteise sekundi saavutamisse paljude terabyte'ide jaoks. Ceph'is teed ise, aga rÀÀgid pilvedest. Mine pilve, tee EC2-s kloon terabyte'ide EBS mahust ja vaata, milline jÔudlus tuleb. See ei vÔta paar sekundit. Mind huvitab vÀga, millal nad selleni jÔuavad. Ma saan aru, millest sa rÀÀgid, aga luba endal mitte nÔustuda.
DS: Okei, aga ma ĂŒtlesin, et keskpikas perspektiivis, mitte lĂŒhikeses. Aastaid kestvaks.
PostgreSQL operaatorist Zalando poolt
Kohtumise keskel liitus temaga ka Aleksei Kliukin, endine arendaja firmast Zalando, kes rÀÀkis PostgreSQL operaatori ajaloost:
Hea, et see teema ĂŒldse tĂ”statati: nii Postgres kui Kubernetes. Kui me hakkasime Zalandos seda 2017. aastal tegema, oli see teema, mida kĂ”ik tahtsid teha, aga keegi ei teinud. KĂ”igil hakkas juba Kubernetes olemas olema, aga kui kĂŒsiti, kuidas andmebaasidega olla, siis isegi sellised inimesed nagu , kes propageerisid K8s, ĂŒtlesid umbes niimoodi:
âMinge halduskeskkondadesse ja kasutage neid, Ă€rge kĂ€itage andmebaase Kuberneteses. Muul juhul otsustab teie K8s nĂ€iteks uuendada, sulgeb kĂ”ik sĂ”lmed ja teie andmed kaovad kaugele kaugele.â
Me otsustasime teha operaatori, mis kĂ€ivitab Postgresi andmebaasi Kuberneteses, sellele nĂ”uandele vaatamata. Ja meil oli selleks hea alus â . See on automaatne failover PostgreSQL-le, mis on korralikult ĂŒles ehitatud, st kasutab etcd, consul vĂ”i ZooKeeper andmekogumisena klastriteavet. Selline andmekogum, mis annab kĂ”igile, kes kĂŒsivad, nĂ€iteks, kes on hetkel juht, sama teabe â hoolimata meie jaotatud struktuurist â et vĂ€ltida split brainâi. Lisaks olime me selle jaoks.
Tegelikult tekkis ettevĂ”ttel vajadus automaatse failover'i jĂ€rele pĂ€rast ĂŒleminekut siseandmekeskuse lahendustelt pilvelahendusele. Pilv pĂ”hines ettevĂ”tte enda PaaS (Platform-as-a-Service) lahendusel. See oli avatud lĂ€htekoodiga, kuid selle ĂŒles seadmine nĂ”udis palju vaeva. See kandis nime .
Alguses ei olnud ĂŒhtegi Kubernetes'i. TĂ€psemalt öeldes, kui ettevĂ”tte omandatud lahendust kasutusele vĂ”eti, oli K8s juba olemas, kuid nii toores, et tootmisvĂ”imeks ei sobinud. See oli, minu meelest, 2015. vĂ”i 2016. aasta. 2017. aastaks oli Kubernetes muutunud enam-vĂ€hem kĂŒpseks â tekkis vajadus sinna migratsiooni jĂ€rele.
Ja meil oli juba Docker-konteiner. Oli PaaS, mis kasutas Dockerit. Miks mitte proovida K8s-i? Miks mitte kirjutada oma operaator? Murat Kabilov, kes tuli meile Avitost, alustas seda projektina oma algatusel â "looma mĂ€ngida" â ja projekt "tĂ”usis".
Aga ĂŒldiselt tahtsin rÀÀkida AWS-ist. Miks seal oli ajalooliselt kood, mis oli seotud AWS-igaâŠ
Kui kĂ€ivitate midagi Kuberneteses, tuleb aru saada, et K8s on pidevas arengus. See areneb pidevalt, paraneb ja perioodiliselt isegi rikneb. Tuleb hoolikalt jĂ€lgida kĂ”iki muudatusi Kuberneteses, olema valmis vajadusel sĂŒvenema sellesse ja Ă”ppima, kuidas kĂ”ik detailid töötavad â vĂ”ib-olla rohkem, kui sooviksite. See kehtib pĂ”himĂ”tteliselt iga platvormi kohta, millel te oma andmebaase kĂ€ivitate...
NĂŒĂŒd, kui me tegime operaatorit, oli meil Postgres, mis töötas vĂ€lise mahuga (antud juhul EBS, kuna töötasime AWS-is). Andmebaas kasvas ja mingil hetkel tuli teha muudatused: nĂ€iteks, algne EBS-i suurus oli 100 TB, andmebaas ulatus sellele, nĂŒĂŒd soovime EBS-i suurust muuta 200 TB-ks. Kuidas? Eeldame, et vĂ”iks teha dump/restore uuele instantsile, kuid see on aeglane ja toob kaasa seisaku.
SeetĂ”ttu soovisime sellist muudatust, mis suurendaks EBS-i partitsiooni ja siis annaks failisĂŒsteemile kĂ€su kasutada uut ruumi. Ja me tegime seda, kuid sel ajal ei olnud Kubernetesel mingit API-d resize operatsiooni jaoks. Kuna töötasime AWS-is, kirjutasime koodi selle API jaoks.
Keegi ei takista teha sama ka teiste platvormide jaoks. Operaator ei ole seotud ainult AWS-iga, see töötab ka teistel platvormidel. See on avatud lĂ€htekoodiga projekt: kui keegi soovib kiirendada uue API kasutuselevĂ”ttu â olete teretulnud. On , pull-pĂ€ringuid â Zalando meeskond pĂŒĂŒab neile ĂŒsna kiiresti reageerida ja operaatorit edendada. Niipalju kui tean, projekt Google Summer of Code'i ja teiste sarnaste algatuste kohta. Zalando töötab selle nimel vĂ€ga aktiivselt.
P.S. Boonus!
Kui teid huvitab PostgreSQL ja Kubernetes, tasub mÀrkida, et eelmisel nÀdalal toimus jÀrgmine Postgres-teisipÀev, kus Nikolai kohtus Alexander Kukushkiniga Zalando's. Video on saadaval .
P.P.S.
Lugege ka meie blogist:
- «»;
- «»;
- «»;
- «».
Allikas: habr.com
