Postgres Talata No. 5: “PostgreSQL da Kubernetes. CI/CD. Gwajin atomatik"

Postgres Talata No. 5: “PostgreSQL da Kubernetes. CI/CD. Gwajin atomatik"

A ƙarshen shekarar da ta gabata, wani watsa shirye-shiryen kai tsaye na al'ummar PostgreSQL na Rasha ya faru #RuPostgres, a lokacin da co-kafa Nikolai Samokhvalov magana da Flant fasaha darektan Dmitry Stolyarov game da wannan DBMS a cikin mahallin Kubernetes.

Muna buga kwafin babban ɓangaren wannan tattaunawa, da kuma a Tashar YouTube ta al'umma An buga cikakken bidiyo:

Databases da Kubernetes

NS: Ba za mu yi magana game da VACUUM da CHECKPOINT a yau ba. Muna so muyi magana game da Kubernetes. Na san kuna da gogewar shekaru masu yawa. Na kalli bidiyon ku har ma na sake kallon wasu daga cikinsu... Bari mu kai ga batun: me yasa Postgres ko MySQL a cikin K8s kwata-kwata?

DC: Babu kuma ba za a iya zama tabbataccen amsar wannan tambayar ba. Amma a gaba ɗaya, wannan shine sauƙi da sauƙi ... m. Kowa yana son ayyukan sarrafawa.

NS: Ku yadda RDS, a gida kawai?

DC: Ee: kamar RDS, a ko'ina.

NS: "Ko'ina" abu ne mai kyau. A cikin manyan kamfanoni, komai yana cikin wurare daban-daban. Me ya sa, idan babban kamfani ne, ba za a ɗauki wani shiri da aka yi ba? Alal misali, Nutanix yana da nasa ci gaba, wasu kamfanoni (VMware ...) suna da "RDS, kawai a gida."

DC: Amma muna magana ne game da aiwatarwa daban wanda zai yi aiki kawai a ƙarƙashin wasu yanayi. Kuma idan muna magana ne game da Kubernetes, akwai wata babbar iri-iri na kayayyakin more rayuwa (wanda zai iya zama a cikin K8s). Mahimmanci wannan ma'auni ne na APIs zuwa gajimare...

NS: Hakanan kyauta ne!

DC: Ba shi da mahimmanci. 'Yanci yana da mahimmanci don ba babban yanki na kasuwa ba. Wani abu kuma yana da mahimmanci ... Wataƙila kun tuna da rahoton "Databases da Kubernetes?

NS: Iya.

DC: Na gane cewa an karɓa sosai. Wasu mutane suna tunanin cewa ina cewa: “Mutane, bari mu shigar da duk bayanan cikin Kubernetes!”, yayin da wasu suka yanke shawarar cewa waɗannan duka munanan kekuna ne. Amma ina so in faɗi wani abu dabam: “Dubi abin da ke faruwa, irin matsalolin da ake da su da kuma yadda za a magance su. Ya kamata mu yi amfani da bayanan bayanan Kubernetes yanzu? Production? To, kawai idan kuna son ... yin wasu abubuwa. Amma ga dev, zan iya cewa na ba da shawarar shi. Ga dev, ƙarfin ƙirƙira/share muhalli yana da mahimmanci sosai."

NS: Ta hanyar dev, kuna nufin duk mahallin da ba su da wadata? Gabatarwa, QA…

DC: Idan muna magana ne game da tsayawar perf, to tabbas ba haka bane, saboda buƙatun akwai takamaiman. Idan muna magana ne game da lokuta na musamman inda ake buƙatar babban rumbun adana bayanai don tsarawa, to tabbas ba... Idan wannan yanayi ne a tsaye, dadewa, to menene amfanin samun rumbun adana bayanai a cikin K8s?

NS: Babu. Amma a ina muke ganin madaidaicin yanayi? Muhalli na tsaye zai zama marar amfani gobe.

DC: Tsayawa na iya zama a tsaye. Muna da abokan ciniki...

NS: Eh nima ina da daya. Yana da babbar matsala idan kana da 10 TB database da 200 GB staging ...

DC: Ina da akwati mai kyau sosai! A kan tsarawa akwai bayanan samfurin wanda ake yin canje-canje. Kuma akwai maballin: "mirgina don samarwa". Waɗannan canje-canje - deltas - ana ƙara su (da alama an daidaita su ta hanyar API) a cikin samarwa. Wannan zaɓi ne mai ban mamaki.

NS: Na ga masu farawa a cikin kwarin da ke zaune a RDS ko ma a cikin Heroku - waɗannan labaran ne daga shekaru 2-3 da suka wuce - kuma suna sauke juji zuwa kwamfutar tafi-da-gidanka. Domin ma’adanin bayanai har yanzu 80 GB ne kawai, kuma akwai sarari akan kwamfutar tafi-da-gidanka. Sannan su sayi ƙarin faifan diski don kowa ya sami rumbun adana bayanai guda 3 don aiwatar da ci gaba daban-daban. Haka abin yake faruwa ma. Na kuma ga cewa ba sa tsoron kwafin prod a cikin tsari - ya dogara da kamfanin sosai. Amma na ga cewa suna jin tsoro sosai, kuma sau da yawa ba su da isasshen lokaci da hannaye. Amma kafin mu ci gaba zuwa wannan batu, Ina so in ji game da Kubernetes. Shin na gane daidai cewa babu wanda ke cikin abin alfahari tukuna?

DC: Muna da ƙananan bayanai a cikin samfur. Muna magana ne game da kundin dubun gigabytes da ayyuka marasa mahimmanci waɗanda muka yi kasala don yin kwafi (kuma babu irin wannan buƙata). Kuma muddin akwai ma'aji na yau da kullun a ƙarƙashin Kubernetes. Wannan bayanan yana aiki a cikin injin kama-da-wane - a cikin VMware, a saman tsarin ajiya. Mun sanya shi a ciki PV kuma yanzu za mu iya canja wurin shi daga na'ura zuwa na'ura.

NS: Databases na wannan girman, har zuwa 100 GB, za a iya fitar da su a cikin 'yan mintoci kaɗan akan faifai masu kyau da kyakkyawar hanyar sadarwa, daidai? Gudun 1 GB a cikin daƙiƙa guda ba ya da ban mamaki.

DC: Ee, don aikin layi wannan ba matsala ba ne.

NS: To, kawai mu yi tunani game da prod. Kuma idan muna la'akari da Kubernetes don wuraren da ba samfurin ba, menene ya kamata mu yi? Ina ganin haka a Zalando yi aiki, in Crunchy sawing, akwai wasu zaɓuɓɓuka. Kuma akwai On Gres - wannan shine abokinmu mai kyau Alvaro daga Spain: abin da suke yi ba kawai ba ne ma'aikaci, da kuma dukan rarraba (StackGres), a cikin wanda, ban da Postgres kanta, sun kuma yanke shawarar shigar da madadin, Wakilin Wakili ...

DC: Manzo don me? Daidaita zirga-zirgar Postgres musamman?

NS: Iya. Wato, suna ganinsa kamar: idan kun ɗauki rarraba Linux da kwaya, to PostgreSQL na yau da kullun shine kernel, kuma suna son yin rarraba wanda zai zama abokantaka na girgije kuma yana gudana akan Kubernetes. Suna haɗa abubuwan haɗin gwiwa (majigi, da dai sauransu) kuma suna cire su don yin aiki da kyau.

DC: Yayi kyau sosai! Mahimmanci wannan software ce don ƙirƙirar Postgres ɗin da kuke sarrafawa.

NS: Rarraba Linux suna da matsaloli na har abada: yadda ake yin direbobi ta yadda za a tallafa wa duk kayan aikin. Kuma suna da ra'ayin cewa za su yi aiki a Kubernetes. Na san cewa a cikin ma'aikacin Zalando kwanan nan mun ga haɗin kai zuwa AWS kuma wannan ba shi da kyau sosai. Bai kamata a sami ƙulla wani takamaiman kayan aikin ba - menene ma'anar to?

DC: Ban san ainihin halin da Zalando ya shiga ba, amma a cikin Kubernetes ajiya yanzu an yi shi ta hanyar da ba zai yiwu ba don ɗaukar faifan diski ta amfani da hanyar gama gari. Kwanan nan a daidaitattun - a cikin sabon sigar Bayanan CSI - Mun sanya hotuna mai yiwuwa, amma a ina ake aiwatar da shi? Gaskiya, komai har yanzu danye yake... Muna gwada CSI a saman AWS, GCE, Azure, vSphere, amma da zarar kun fara amfani da shi, zaku ga cewa bai shirya ba tukuna.

NS: Shi ya sa a wasu lokuta dole ne mu dogara ga abubuwan more rayuwa. Ina tsammanin wannan har yanzu mataki ne na farko - zafi mai girma. Tambaya: Wace shawara za ku ba ga sababbin waɗanda ke son gwada PgSQL a cikin K8s? Wani ma'aikacin watakila?

DC: Matsalar ita ce Postgres shine 3% a gare mu. Hakanan muna da babban jerin software daban-daban a cikin Kubernetes, ba zan lissafta komai ba. Misali, Elasticsearch. Akwai masu aiki da yawa: wasu suna haɓakawa sosai, wasu ba sa. Mun zana abubuwan da ake bukata don kanmu, abin da ya kamata ya kasance a cikin ma'aikacin don mu dauki shi da mahimmanci. A cikin ma'aikaci na musamman don Kubernetes - ba a cikin "mai aiki don yin wani abu a cikin yanayin Amazon ba" don Redis (zamu buga labari game da shi nan ba da jimawa ba).

NS: Kuma ba don MySQL ko dai? Na san cewa Percona ... tun da yanzu suna aiki akan MySQL, MongoDB, da Postgres, dole ne su ƙirƙiri wani nau'in mafita na duniya: ga duk bayanan bayanai, ga duk masu samar da girgije.

DC: Ba mu da lokaci don duba masu aiki don MySQL. Wannan ba shine babban abin da muka mayar da hankali a kai ba a yanzu. MySQL yana aiki lafiya a tsaye. Me yasa amfani da afareta idan za ku iya ƙaddamar da bayanan bayanai kawai ... Kuna iya ƙaddamar da akwati Docker tare da Postrges, ko za ku iya kaddamar da shi ta hanya mai sauƙi.

NS: Akwai tambaya game da wannan kuma. Babu mai aiki kwata-kwata?

DC: Ee, 100% na mu suna da PostgreSQL yana gudana ba tare da mai aiki ba. Ya zuwa yanzu. Muna amfani da mai aiki sosai don Prometheus da Redis. Muna da shirye-shiryen nemo ma'aikaci don Elasticsearch - shine mafi yawan "akan wuta", saboda muna son shigar da shi a Kubernetes a cikin 100% na lokuta. Kamar yadda muke son tabbatar da cewa MongoDB shima ana shigar dashi koyaushe a cikin Kubernetes. Anan wasu buri sun bayyana - akwai jin cewa a cikin waɗannan lokuta ana iya yin wani abu. Kuma ba mu ma kalli Postgres ba. Tabbas, mun san cewa akwai zaɓuɓɓuka daban-daban, amma a gaskiya muna da wani abin dogaro.

DB don gwaji a Kubernetes

NS: Mu ci gaba zuwa batun gwaji. Yadda ake fitar da sauye-sauye zuwa bayanan bayanai - daga hangen nesa na DevOps. Akwai microservices, bayanai da yawa, wani abu yana canzawa a wani wuri koyaushe. Yadda ake tabbatar da CI/CD na al'ada domin komai ya kasance cikin tsari daga hangen DBMS. Menene tsarin ku?

DC: Ba za a iya samun amsa ɗaya ba. Akwai zaɓuɓɓuka da yawa. Na farko shine girman gindin da muke so mu fitar dashi. Kai da kanka ka ambata cewa kamfanoni suna da halaye daban-daban game da samun kwafin bayanan bayanai akan dev da mataki.

NS: Kuma a karkashin yanayin GDPR, ina tsammanin suna da hankali sosai ... Zan iya cewa a Turai sun riga sun fara sanya tara.

DC: Amma sau da yawa kuna iya rubuta software da ke ɗaukar juji daga samarwa kuma ta ɓoye ta. Ana samun bayanan samfur (hoton hoto, jujjuyawa, kwafin binary...), amma an ɓoye su. Madadin haka, ana iya samun rubutun tsararraki: waɗannan na iya zama gyare-gyare ko kuma kawai rubutun da ke samar da manyan bayanai. Matsalar ita ce: tsawon wane lokaci ake ɗauka don ƙirƙirar hoton tushe? Kuma tsawon wane lokaci ake ɗauka don tura shi cikin yanayin da ake so?

Mun zo ga makirci: idan abokin ciniki yana da kafaffen saitin bayanai (ƙananan sigar bayanan), to muna amfani da su ta tsohuwa. Idan muna magana ne game da yanayin sake dubawa, lokacin da muka ƙirƙiri reshe, mun ƙaddamar da misalin aikace-aikacen - muna fitar da ƙaramin bayanai a wurin. Amma ya zama mai kyau zaɓi, Lokacin da muke ɗaukar juji daga samarwa sau ɗaya a rana (da daddare) kuma mu gina akwati Docker tare da PostgreSQL da MySQL tare da wannan bayanan da aka ɗora akan shi. Idan kana buƙatar fadada bayanan sau 50 daga wannan hoton, ana yin wannan a sauƙaƙe kuma cikin sauri.

NS: Ta hanyar kwafi mai sauƙi?

DC: Ana adana bayanai kai tsaye a cikin hoton Docker. Wadancan. Muna da hoton da aka shirya, kodayake 100 GB. Godiya ga yadudduka a cikin Docker, za mu iya tura wannan hoton cikin sauri gwargwadon yadda muke buƙata. Hanyar wauta ce, amma tana aiki da kyau.

NS: Sannan, lokacin da kuka gwada, yana canzawa daidai a cikin Docker, daidai? Kwafi-kan-rubuta cikin Docker - jefar da shi kuma ku sake komawa, komai yana da kyau. Darasi! Kuma kun riga kun yi amfani da shi sosai?

DC: Na dogon lokaci.

NS: Muna yin abubuwa iri ɗaya. Ba ma amfani da kwafin-kan-rubuta Docker, amma wani.

DC: Ba kowa bane. Kuma Docker yana aiki a ko'ina.

NS: A ka'idar, eh. Amma muna da kayayyaki a can, za ku iya yin nau'i-nau'i daban-daban kuma kuyi aiki tare da tsarin fayil daban-daban. Wani lokaci anan. Daga bangaren Postgres, muna kallon duk wannan daban. Yanzu na duba daga gefen Docker na ga cewa komai yana aiki a gare ku. Amma idan bayanan yana da girma, alal misali, 1 TB, to, duk wannan yana ɗaukar lokaci mai tsawo: ana gudanar da aiki da dare, da kuma cusa duk abin da ke cikin Docker ... Kuma idan an cusa TB 5 a cikin Docker ... Ko yana da kyau?

DC: Menene bambanci: waɗannan su ne ɓangarorin, kawai bits da bytes.

NS: Bambancin wannan shine: kuna yin ta ta hanyar juji da maidowa?

DC: Ba lallai ba ne. Hanyoyin samar da wannan hoton na iya zama daban-daban.

NS: Ga wasu abokan ciniki, mun sanya shi ta yadda maimakon samar da hoto akai-akai, muna ci gaba da sabunta shi. Yana da gaske kwafi, amma yana karɓar bayanai ba daga maigidan kai tsaye ba, amma ta hanyar adana bayanai. Rukunin tarihin binary inda ake zazzage WALs kowace rana, inda ake ɗaukar maajiyar ... Waɗannan WALs ɗin sun isa hoton tushe tare da ɗan jinkiri (a zahiri 1-2 seconds). Mun rufe shi ta kowace hanya - yanzu muna da ZFS ta tsohuwa.

DC: Amma tare da ZFS an iyakance ku zuwa kumburi ɗaya.

NS: Iya. Amma ZFS kuma yana da sihiri aika: tare da shi za ku iya aika hoto kuma ko da (Ban gwada wannan ba tukuna, amma ...) kuna iya aika delta tsakanin biyu PGDATA. A gaskiya ma, muna da wani kayan aiki wanda ba mu yi la'akari da gaske ba don irin waɗannan ayyuka. PostgreSQL yana da pg_sakewa, wanda ke aiki kamar "smart" rsync, yana tsallake yawancin abin da ba dole ba ne ku duba, saboda babu abin da ya canza a can. Za mu iya yin aiki tare da sauri tsakanin sabobin biyu kuma mu koma baya a hanya guda.

Don haka, daga wannan, ƙarin gefen DBA, muna ƙoƙarin ƙirƙirar kayan aiki wanda ke ba mu damar yin abin da kuka faɗa: muna da bayanai guda ɗaya, amma muna son gwada wani abu sau 50, kusan lokaci guda.

DC: Sau 50 yana nufin kuna buƙatar yin odar lokuta 50 Spot.

NS: A'a, muna yin komai akan na'ura ɗaya.

DC: Amma ta yaya za ku faɗaɗa sau 50 idan wannan rumbun adana bayanai ɗaya ce, a ce, terabyte. Mafi mahimmanci tana buƙatar 256 GB na RAM na sharadi?

NS: Ee, wani lokacin kuna buƙatar ƙwaƙwalwar ajiya mai yawa - wannan al'ada ce. Amma wannan misali ne daga rayuwa. Na'urar samarwa tana da nau'ikan 96 da 600 GB. A lokaci guda, 32 cores (ko da 16 cores a yanzu wani lokaci) da 100-120 GB na ƙwaƙwalwar ajiya ana amfani da su don database.

DC: Kuma kwafi 50 sun dace a wurin?

NS: Don haka akwai kwafi ɗaya kawai, sannan kwafi-on-write (ZFS) yana aiki ... Zan gaya muku dalla-dalla.

Misali, muna da bayanan tarin tarin fuka 10. Sun yi masa faifai, ZFS kuma ya matsa girmansa da kashi 30-40. Tun da ba mu yin gwajin lodi, ainihin lokacin mayar da martani ba shi da mahimmanci a gare mu: bari ya kasance har sau 2 a hankali - hakan yayi kyau.

Muna ba da dama ga masu shirye-shirye, QA, DBA, da dai sauransu. yi gwaji a cikin zaren 1-2. Misali, suna iya gudanar da wani irin ƙaura. Ba ya buƙatar cores 10 lokaci ɗaya - yana buƙatar 1 Postgres backend, 1 core. Hijira zai fara - watakila autovacuum har yanzu zai fara, sannan za a yi amfani da cibiya ta biyu. Muna da muryoyin 16-32 da aka ware, don haka mutane 10 za su iya aiki a lokaci guda, ba matsala.

Domin a zahiri PGDATA Haka, ya bayyana cewa muna yaudarar Postgres a zahiri. Dabarar ita ce: misali, ana ƙaddamar da Postgres 10 a lokaci guda. Menene matsalar yawanci? Suka saka raba_buffers, bari mu ce 25%. Saboda haka, wannan shine 200 GB. Ba za ku iya ƙaddamar da fiye da uku daga cikin waɗannan ba, saboda ƙwaƙwalwar ajiya za ta ƙare.

Amma a wani lokaci mun gane cewa wannan ba lallai ba ne: mun saita sharing_buffers zuwa 2 GB. PostgreSQL yana da tasiri_cache_size, kuma a hakikanin gaskiya ita kadai ce ke yin tasiri tsare-tsare. Mun saita shi zuwa 0,5 TB. Kuma ba kome ba ne cewa ba su wanzu ba: yana yin shirye-shirye kamar suna wanzu.

Saboda haka, lokacin da muka gwada wani nau'i na ƙaura, za mu iya tattara duk tsare-tsaren - za mu ga yadda zai faru a cikin samarwa. Daƙiƙan daƙiƙa za su kasance daban-daban (hankali), amma bayanan da muke karantawa a zahiri, da tsare-tsaren kansu (abin da JOINs suke a can, da sauransu) sun zama daidai daidai da samarwa. Kuma kuna iya gudanar da irin waɗannan cak ɗin da yawa a layi daya akan na'ura ɗaya.

DC: Ba ka ganin akwai ƴan matsaloli a nan? Na farko shine mafita wanda kawai ke aiki akan PostgreSQL. Wannan hanya ta sirri ce, ba ta kowa ba. Na biyu shi ne cewa Kubernetes (da duk abin da fasahar girgije ke zuwa yanzu) ya haɗa da nodes da yawa, kuma waɗannan nodes suna da yawa. Kuma a cikin al'amarin ku, kumburi ne mai dagewa. Wadannan abubuwa suna sa ni sabani.

NS: Na farko, na yarda, wannan labarin Postgres ne kawai. Ina tsammanin idan muna da wani nau'i na IO kai tsaye da wurin shakatawa don kusan dukkanin ƙwaƙwalwar ajiya, wannan tsarin ba zai yi aiki ba - tsare-tsaren za su bambanta. Amma a yanzu muna aiki tare da Postgres kawai, ba ma tunanin wasu.

Game da Kubernetes. Kai da kanka ka gaya mana a ko'ina cewa muna da ma'ajin bayanai na dindindin. Idan misalin ya kasa, babban abu shine adana diski. Anan kuma muna da duk dandamali a Kubernetes, kuma ɓangaren tare da Postgres ya bambanta (ko da yake zai kasance a can wata rana). Saboda haka, duk abin da yake kamar haka: misalin ya fadi, amma mun ajiye PV kuma mun haɗa shi zuwa wani misali (sabon), kamar dai babu abin da ya faru.

DC: Daga ra'ayi na, muna ƙirƙirar kwasfa a cikin Kubernetes. K8s - roba: ana yin oda kamar yadda ake buƙata. Ayyukan shine kawai ƙirƙirar kwasfa kuma a ce yana buƙatar adadin albarkatun X, sannan K8s za su gano shi da kansa. Amma tallafin ajiya a Kubernetes har yanzu ba shi da tabbas: 1.16, in 1.17 (an saki wannan sakin na mako ago) waɗannan fasalulluka sun zama beta kawai.

Watanni shida zuwa shekara za su shude - zai zama mai ƙarfi ko ƙasa da kwanciyar hankali, ko aƙalla za a bayyana shi a matsayin haka. Sannan yuwuwar ɗaukar hotuna da sake girman su yana magance matsalar ku gaba ɗaya. Domin kana da tushe. Haka ne, yana iya zama ba da sauri sosai ba, amma saurin ya dogara da abin da ke "ƙarƙashin hood", saboda wasu aiwatarwa na iya kwafi da kwafi-kan-rubuta a matakin tsarin faifai.

NS: Hakanan ya zama dole ga duk injuna (Amazon, Google...) don fara tallafawa wannan sigar - wannan kuma yana ɗaukar ɗan lokaci.

DC: Ba mu yi amfani da su ba tukuna. Muna amfani da namu.

Ci gaban gida don Kubernetes

NS: Shin kun gamu da irin wannan buri lokacin da kuke buƙatar shigar da dukkan kwas ɗin akan na'ura ɗaya kuma kuyi irin wannan ƙaramin gwaji. Don samun tabbacin ra'ayi da sauri, duba cewa aikace-aikacen yana gudana a Kubernetes, ba tare da sadaukar da gungun injuna ba. Akwai Minikube, dama?

DC: Da alama a gare ni cewa wannan shari'ar - wanda aka tura a kan kulli guda - ya shafi ci gaban gida ne kawai. Ko wasu bayyanar cututtuka irin wannan. Ku ci Minikube, akwai k3s, IRIN. Muna matsawa zuwa amfani da Kubernetes IN Docker. Yanzu mun fara aiki da shi don gwaje-gwaje.

NS: Na kasance ina tunanin cewa wannan yunƙuri ne na naɗe dukkan kwas ɗin a cikin hoton Docker guda ɗaya. Amma sai ya juya cewa wannan game da wani abu ne mabanbanta. Ko ta yaya, akwai kwantena daban, kwalaye daban - kawai a cikin Docker.

DC: Iya. Kuma akwai wani wajen funny kwaikwayo yi, amma ma'anar shi ne wannan ... Muna da mai amfani don turawa - wuf. Muna so mu mai da shi yanayin sharadi werf up: "Samu Kubernetes na gida." Sannan gudanar da sharadi a can werf follow. Sannan mai haɓakawa zai iya gyara IDE, kuma za a ƙaddamar da tsari a cikin tsarin da ke ganin canje-canje da sake gina hotuna, sake tura su zuwa K8s na gida. Ta haka ne muke so mu yi kokarin magance matsalar ci gaban gida.

Snapshots da cloning na bayanai a cikin gaskiyar K8s

NS: Idan muka koma kwafi-kan-rubuta. Na lura cewa gajimare kuma suna da hotunan hoto. Suna aiki daban. Misali, a cikin GCP: kuna da misalin terabyte da yawa a gabar tekun gabas na Amurka. Kuna ɗaukar hotuna lokaci-lokaci. Kuna ɗaukar kwafin faifai a bakin tekun yamma daga hoto - a cikin 'yan mintoci kaɗan komai yana shirye, yana aiki da sauri, kawai cache yana buƙatar cika cikin ƙwaƙwalwar ajiya. Amma waɗannan clones (snapshots) don 'samar da' sabon ƙarar. Wannan yana da kyau lokacin da kuke buƙatar ƙirƙirar abubuwa da yawa.

Amma don gwaje-gwaje, ga alama a gare ni cewa hotunan hoto, wanda kuke magana game da su a Docker ko na yi magana game da su a cikin ZFS, btrfs har ma da LVM ... - suna ba ku damar ƙirƙirar sabbin bayanai na gaske akan injin guda ɗaya. A cikin gajimare, har yanzu za ku biya su kowane lokaci kuma ku jira ba daƙiƙa ba, amma mintuna (kuma a cikin akwati kasalala kaya, watakila agogo).

Madadin haka, zaku iya samun wannan bayanan a cikin daƙiƙa ɗaya ko biyu, kuyi gwajin kuma ku jefar da su. Wadannan hotunan hotunan suna magance matsaloli daban-daban. A cikin akwati na farko - don haɓakawa da samun sababbin kwafi, kuma a cikin na biyu - don gwaje-gwaje.

DC: Ban yarda ba. Yin cloning ƙarar aiki yadda ya kamata shine aikin girgije. Ban duba aiwatar da su ba, amma na san yadda muke yin shi akan kayan aiki. Muna da Ceph, yana ba da damar kowane ƙarar jiki (RBD) ce clone kuma sami ƙara na biyu tare da halaye iri ɗaya a cikin dubun millise seconds, IOPSami, etc. Kuna buƙatar fahimtar cewa akwai kwafi-kan-rubutu a ciki. Me ya sa girgijen ba zai yi haka ba? Na tabbata suna ƙoƙarin yin hakan ta wata hanya ko wata.

NS: Amma har yanzu zai ɗauki su daƙiƙa, dubun daƙiƙai don ɗaga misali, kawo Docker a can, da sauransu.

DC: Me ya sa ya zama dole a tada dukan misali? Muna da misali tare da nau'i na 32, 16 ... kuma yana iya shiga ciki - misali, hudu. Lokacin da muka yi oda na biyar, za a riga an tayar da misalin, sannan za a goge shi.

NS: Ee, mai ban sha'awa, Kubernetes ya zama wani labari daban. Bayanan mu baya cikin K8s, kuma muna da misali guda. Amma cloning da Multi-terabyte database yana daukan ba fiye da biyu seconds.

DC: Wannan yana da kyau. Amma batuna na farko shi ne, wannan ba mafita ba ce. Ee, yana da kyau, amma ya dace da Postgres kawai kuma a kan kumburi ɗaya kawai.

NS: Ya dace ba kawai don Postgres ba: waɗannan tsare-tsaren, kamar yadda na bayyana, za su yi aiki ne kawai a ciki. Amma idan ba mu damu da tsare-tsare ba, kuma muna buƙatar duk bayanan don gwajin aiki, to wannan ya dace da kowane DBMS.

DC: Shekaru da yawa da suka gabata mun yi wani abu makamancin haka akan hotunan LVM. Wannan al'ada ce. An yi amfani da wannan hanya sosai. Nodes na jihohi ciwo ne kawai. Domin kada ku jefar da su, ya kamata ku tuna da su koyaushe ...

NS: Kuna ganin wani yuwuwar haɗaɗɗen a nan? Bari mu ce m wasu nau'in kwasfa ne, yana aiki ga mutane da yawa (masu gwadawa da yawa). Muna da girma ɗaya, amma godiya ga tsarin fayil, clones na gida ne. Idan kwaf ɗin ya faɗi, amma faifan ya rage, kwaf ɗin zai tashi, ƙidayar bayanai game da duk clones, sake ɗaukar komai kuma ku ce: "Ga clones ɗinku suna gudana akan waɗannan tashoshin jiragen ruwa, ci gaba da aiki tare da su."

DC: A zahiri wannan yana nufin cewa a cikin Kubernetes shine kwasfa ɗaya wanda muke gudanar da Postgres da yawa a ciki.

NS: Iya. Yana da iyaka: bari mu ce ba fiye da mutane 10 suna aiki tare da shi a lokaci guda ba. Idan kuna buƙatar 20, za mu ƙaddamar da irin wannan kwas ɗin na biyu. Za mu rufe shi gaba daya, bayan samun cikakken girma na biyu, zai sami nau'ikan clones 10 na "bakin ciki". Ba ku ganin wannan damar?

DC: Muna buƙatar ƙara matsalolin tsaro a nan. Irin wannan ƙungiya yana nuna cewa wannan kwafsa yana da babban gata (iko), saboda yana iya yin ayyukan da ba daidai ba a kan tsarin fayil ... Amma na sake maimaita: Na yi imani cewa a cikin matsakaici za su gyara ajiya a Kubernetes, kuma a cikin girgije za su gyara dukan labarin tare da kundin - duk abin da zai "yi aiki kawai". Za a yi girma, cloning ... Akwai ƙarar - muna cewa: "Ƙirƙiri sabon bisa ga wannan," kuma bayan na biyu da rabi muna samun abin da muke bukata.

NS: Ban yi imani da daƙiƙa ɗaya da rabi na yawan terabytes ba. A kan Ceph kuna yin shi da kanku, amma kuna magana game da gajimare. Jeka ga gajimare, yi clone na ƙarar EBS mai yawan terabyte akan EC2 kuma duba yadda aikin zai kasance. Ba zai ɗauki daƙiƙa kaɗan ba. Ina matukar sha'awar lokacin da za su kai wannan matakin. Na fahimci abin da kuke cewa, amma ina roƙon in bambanta.

DC: Ok, amma na ce a cikin matsakaici, ba gajeren lokaci ba. Shekaru da yawa.

Game da ma'aikacin PostgreSQL daga Zalando

A tsakiyar wannan taron, Alexey Klyukin, tsohon mai haɓakawa daga Zalando, shi ma ya shiga ciki kuma yayi magana game da tarihin ma'aikacin PostgreSQL:

Yana da kyau cewa an taɓa wannan batun gabaɗaya: duka Postgres da Kubernetes. Lokacin da muka fara yin shi a Zalando a cikin 2017, batu ne da kowa ke son yi, amma ba wanda ya yi. Kowa ya riga ya sami Kubernetes, amma lokacin da suka tambayi abin da za a yi da bayanan bayanai, har ma mutane suna so Kelsey Hightower, wanda ya yi wa'azin K8s, ya ce wani abu kamar haka:

"Je zuwa sabis ɗin da aka sarrafa kuma ku yi amfani da su, kada ku gudanar da bayanai a Kubernetes. In ba haka ba, K8s ɗinku za su yanke shawara, misali, don yin haɓakawa, kashe duk nodes, kuma bayanan ku za su yi nisa, nesa. "

Mun yanke shawarar yin ma'aikaci wanda, sabanin wannan shawarar, zai ƙaddamar da bayanan Postgres a Kubernetes. Kuma mun sami kyakkyawan dalili - Majiɓinci. Wannan gazawar atomatik ce don PostgreSQL, anyi daidai, watau. ta amfani da etcd, consul ko ZooKeeper azaman ajiyar bayanai game da tari. Irin wannan ma’adanar da za ta ba duk wanda ya tambaya, misali, me shugaban yanzu yake, bayanai iri daya ne – duk da cewa an raba komai da komai – ta yadda babu tsaga kwakwalwa. Bugu da kari mun samu Hoton Docker a gare shi.

Gabaɗaya, buƙatar kamfanin na gazawar auto ya bayyana bayan ƙaura daga cibiyar bayanan kayan aikin cikin gida zuwa gajimare. Girgijen ya dogara ne akan mafita na PaaS (Platform-as-a-Service). Yana da Open Source, amma ya ɗauki aiki mai yawa don tada shi da aiki. Aka kira shi STUPS.

Da farko, babu Kubernetes. Daidai sosai, lokacin da aka tura namu maganin, K8s ya riga ya wanzu, amma yana da danyen da bai dace da samarwa ba. Ya kasance, a ganina, 2015 ko 2016. A shekara ta 2017, Kubernetes ya zama babba ko ƙasa - akwai buƙatar yin ƙaura a can.

Kuma mun riga mun sami akwati Docker. Akwai PaaS da ke amfani da Docker. Me zai hana a gwada K8s? Me yasa ba za ku rubuta ma'aikacin ku ba? Murat Kabilov, wanda ya zo mana daga Avito, ya fara wannan a matsayin aikin a kan nasa yunƙurin - "wasa" - da kuma aikin "ya tashi."

Amma gabaɗaya, Ina so in yi magana game da AWS. Me yasa akwai lambar tarihin AWS mai alaƙa...

Lokacin da kuke gudanar da wani abu a cikin Kubernetes, kuna buƙatar fahimtar cewa K8s irin wannan aikin ne. Yana ci gaba da haɓakawa, haɓakawa har ma da rushewa daga lokaci zuwa lokaci. Kuna buƙatar kula da duk canje-canje a cikin Kubernetes, kuna buƙatar kasancewa cikin shiri don nutsewa cikinsa idan wani abu ya faru kuma ku koyi yadda yake aiki dalla-dalla - watakila fiye da yadda kuke so. Wannan, bisa ƙa'ida, ya shafi duk wani dandali da kuke gudanar da bayananku a kansa...

Don haka, lokacin da muka yi bayanin, muna da Postgres yana gudana akan ƙarar waje (EBS a wannan yanayin, tunda muna aiki akan AWS). Database ya girma, a wani lokaci ya zama dole a sake girmansa: misali, girman farko na EBS ya kasance TB 100, ma'aunin bayanan ya girma zuwa gare ta, yanzu muna son yin EBS 200 TB. yaya? Bari mu ce za ku iya yin juji/dawowa akan sabon misali, amma wannan zai ɗauki lokaci mai tsawo kuma ya haɗa da raguwar lokaci.

Saboda haka, ina son girman da zai kara girman sashin EBS sannan in gaya wa tsarin fayil don amfani da sabon sarari. Kuma mun yi shi, amma a lokacin Kubernetes ba shi da API don sake girman aikin. Tun da muka yi aiki akan AWS, mun rubuta lamba don API ɗin sa.

Babu wanda ke hana ku yin hakan don sauran dandamali. Babu wata alama a cikin bayanin cewa ana iya gudanar da shi kawai akan AWS, kuma ba zai yi aiki akan komai ba. Gabaɗaya, wannan aikin Buɗewa ne: idan kowa yana son haɓaka bullar amfani da sabon API, kuna maraba. Ku ci GitHub, ja buƙatun - ƙungiyar Zalando tana ƙoƙarin amsa musu da sauri da haɓaka mai aiki. Kamar yadda na sani, aikin shiga a Google Summer of Code da wasu wasu shirye-shirye makamantan haka. Zalando yana aiki sosai akan sa.

PS Bonus!

Idan kuna sha'awar batun PostgreSQL da Kubernetes, to don Allah ku lura cewa Talata Postgres na gaba ya faru a makon da ya gabata, inda na yi magana da Nikolai. Alexander Kukushkin daga Zalando. Bidiyo daga gare ta yana samuwa a nan.

PPS

Karanta kuma a kan shafinmu:

source: www.habr.com

Add a comment