
Nan fen ane pase a, yon lòt emisyon an dirèk nan kominote Ris PostgreSQL la te fèt , pandan ki ko-fondatè Nikolai Samokhvalov te pale ak direktè teknik Flant Dmitry Stolyarov sou DBMS sa a nan yon kontèks Kubernetes.
Nou ap pibliye yon transkripsyon pati prensipal diskisyon sa a, ak nan Videyo konplè afiche:

Baz done ak Kubernetes
NS: Nou p'ap pale de VACUUM ak CHECKPOINT jodi a. Nou vle pale sou Kubernetes. Mwen konnen ou gen anpil ane eksperyans. Mwen gade videyo ou yo e menm re-gade kèk nan yo... Ann ale tou dwat nan pwen an: poukisa Postgres oswa MySQL nan K8s nan tout?
DC: Pa gen e pa ka gen yon repons definitif pou kesyon sa a. Men, an jeneral, sa a se senplisite ak konvenyans... potansyèl. Tout moun vle sèvis jere.
NS: Ki jan , sèlman nan kay la?
DC: Wi: tankou RDS, jis nenpòt kote.
NS: "Nenpòt kote" se yon bon pwen. Nan gwo konpayi yo, tout bagay sitiye nan diferan kote. Poukisa Lè sa a, si li se yon gwo konpayi, pa pran yon solisyon pare-fè? Pou egzanp, Nutanix gen devlopman pwòp li yo, lòt konpayi (VMware...) gen menm "RDS, sèlman nan kay la."
DC: Men, nou ap pale de yon aplikasyon separe ki pral sèlman travay nan sèten kondisyon. Men, si nou ap pale de Kubernetes, Lè sa a, gen yon gwo varyete enfrastrikti (ki ka nan K8s). Esansyèlman sa a se yon estanda pou API nan nwaj la...
NS: Li gratis tou!
DC: Li pa tèlman enpòtan. Freeness enpòtan pou pa yon gwo segman nan mache a. Yon lòt bagay enpòtan... Ou ka sonje rapò a ""?
NS: Wi.
DC: Mwen reyalize ke li te resevwa trè ambigu. Gen kèk moun ki te panse ke mwen te di: "Mesye, ann jwenn tout baz done yo nan Kubernetes!", Pandan ke lòt moun deside ke sa yo se te bisiklèt terib. Men, mwen te vle di yon bagay konplètman diferan: "Gade sa k ap pase, ki pwoblèm ki genyen ak ki jan yo ka rezoud. Èske nou ta dwe itilize baz done Kubernetes kounye a? Pwodiksyon? Oke, sèlman si ou renmen ... fè sèten bagay. Men, pou yon dev, mwen ka di ke mwen rekòmande li. Pou yon dev, dinamis nan kreye/efase anviwònman trè enpòtan."
NS: Pa dev, ou vle di tout anviwònman ki pa prod? Etap, QA...
DC: Si nou ap pale de perf kanpe, Lè sa a, pwobableman pa, paske kondisyon yo gen espesifik. Si nou ap pale de ka espesyal kote yo bezwen yon baz done gwo anpil pou staging, Lè sa a, pwobableman pa ... Si sa a se yon anviwònman estatik, ki dire lontan, Lè sa a, ki avantaj ki genyen nan gen baz done a ki sitiye nan K8s?
NS: Okenn. Men, ki kote nou wè anviwònman estatik? Yon anviwònman estatik ap vin demode demen.
DC: Staging ka estatik. Nou gen kliyan...
NS: Wi, mwen gen youn tou. Li se yon gwo pwoblèm si ou gen yon baz done 10 TB ak 200 GB staging...
DC: Mwen gen yon ka trè fre! Sou sèn gen yon baz done pwodwi nan ki chanjman yo te fè. Epi gen yon bouton: "woule soti nan pwodiksyon". Chanjman sa yo - deltas - yo ajoute (li sanble yo tou senpleman senkronize atravè API a) nan pwodiksyon an. Sa a se yon opsyon trè ekzotik.
NS: Mwen te wè demaraj nan Valley a ki chita nan RDS oswa menm nan Heroku - sa yo se istwa ki soti nan 2-3 ane de sa - epi yo telechaje pil fatra a sou laptop yo. Paske baz done a se toujou sèlman 80 GB, epi gen espas sou laptop la. Lè sa a, yo achte disk adisyonèl pou tout moun pou yo gen 3 baz done pou fè devlopman diferan. Men ki jan sa rive tou. Mwen te wè tou ke yo pa pè kopi prod nan sèn - li anpil depann sou konpayi an. Men, mwen te wè tou ke yo gen anpil pè, e ke yo souvan pa gen ase tan ak men yo. Men, anvan nou deplase sou sijè sa a, mwen vle tande sou Kubernetes. Èske mwen konprann kòrèkteman ke pa gen moun ki nan prod ankò?
DC: Nou gen ti baz done nan prod. Nou ap pale de volim dè dizèn de jigokte ak sèvis ki pa kritik pou ki nou te twò parese fè kopi (e pa gen okenn bezwen sa yo). Epi bay ke gen depo nòmal anba Kubernetes. Baz done sa a te travay nan yon machin vityèl - kondisyonèl nan VMware, sou tèt sistèm nan depo. Nou mete l nan epi kounye a nou ka transfere li soti nan machin nan machin.
NS: Baz done gwosè sa a, jiska 100 GB, ka woule soti nan kèk minit sou bon disk ak yon bon rezo, pa vre? Yon vitès 1 GB pou chak segonn pa ekzotik ankò.
DC: Wi, pou operasyon lineyè sa a se pa yon pwoblèm.
NS: Oke, nou jis dwe reflechi sou prod. Men, si nou ap konsidere Kubernetes pou anviwònman ki pa pwodwi, kisa nou ta dwe fè? Mwen wè sa nan Zalando , nan kroustiyan , gen kèk lòt opsyon. Epi gen - sa a se bon zanmi nou Alvaro ki soti nan Espay: sa yo fè se esansyèlman pa jis , ak distribisyon an antye (), nan ki, anplis Postgres li menm, yo te deside tou mete yon backup, proxy Envoy la...
DC: Anvwaye pou kisa? Balanse trafik Postgres espesyalman?
NSWi. Sa vle di, yo wè li kòm: si ou pran LinuxSi nou pale de yon distribisyon ak yon nwayo, alò PostgreSQL regilye a se nwayo a, epi yo vle fè yon distribisyon ki konpatib ak nwaj la epi ki fonksyone sou Kubernetes. Y ap konekte konpozan yo (backup, elatriye) epi debogaj yo pou asire yo fonksyone byen.
DC: Trè fre! Esansyèlman sa a se lojisyèl pou kreye pwòp Postgres jere ou.
NSOu LinuxDistribisyon yo gen yon pwoblèm ki toujou la: kijan pou yo kreye chofè pou sipòte tout pyès ki nan konpitè a. Epi y ap panse y ap travay nan Kubernetes. Mwen konnen nou te wè Zalando ap depandan sou AWS dènyèman, e sa pa twò bon. Pa ta dwe gen yon depandans sou yon enfrastrikti espesifik—ki sans sa genyen lè sa a?
DC: Mwen pa konnen egzakteman ki sitiyasyon Zalando te antre nan, men nan depo Kubernetes kounye a fèt nan yon fason ke li enposib pran yon backup ki gen kapasite lè l sèvi avèk yon metòd jenerik. Dènyèman nan estanda - nan dènye vèsyon an — nou te fè snapshots posib, men ki kote li aplike? Onètman, tout bagay toujou tèlman kri... Nou ap eseye CSI sou tèt AWS, GCE, Azure, vSphere, men le pli vit ke ou kòmanse sèvi ak li, ou ka wè ke li poko pare.
NS: Se poutèt sa pafwa nou oblije konte sou enfrastrikti. Mwen panse ke sa a se toujou yon etap bonè - doulè k ap grandi. Kesyon: Ki konsèy ou ta bay newbies ki vle eseye PgSQL nan K8s? Ki operatè petèt?
DC: Pwoblèm lan se ke Postgres se 3% pou nou. Nou menm tou nou gen yon lis gwo anpil nan lojisyèl diferan nan Kubernetes, mwen pa pral menm lis tout bagay. Pou egzanp, Elasticsearch. Gen yon anpil nan operatè yo: kèk ap devlope aktivman, lòt moun pa. Nou te trase kondisyon pou tèt nou sou sa yon operatè ta dwe genyen pou nou pran li oserye. Nan yon operatè espesyalman pou Kubernetes - pa nan yon "operatè pou fè yon bagay nan kondisyon Amazon yo"... An reyalite, nou byen lajman (= prèske tout kliyan) sèvi ak yon sèl operatè - (nou pral pibliye yon atik sou li byento).
NS: Epi yo pa pou MySQL swa? Mwen konnen ke Percona... depi kounye a yo ap travay sou MySQL, MongoDB, ak Postgres, yo pral gen pou kreye kèk kalite solisyon inivèsèl: pou tout baz done, pou tout founisè nwaj.
DC: Nou pa t 'gen tan gade nan operatè yo pou MySQL. Sa a se pa konsantre prensipal nou kounye a. MySQL travay byen nan otonòm. Poukisa sèvi ak yon operatè si ou ka jis lanse yon baz done... Ou ka lanse yon veso Docker ak Postrges, oswa ou ka lanse li nan yon fason senp.
NS: Te gen yon kesyon sou sa tou. Pa gen operatè ditou?
DC: Wi, 100% nan nou gen PostgreSQL kouri san yon operatè. Jiskaprezan konsa. Nou aktivman itilize operatè a pou Prometheus ak Redis. Nou gen plan yo jwenn yon operatè pou Elasticsearch - li se youn nan ki pi "sou dife", paske nou vle enstale li nan Kubernetes nan 100% nan ka yo. Menm jan nou vle asire ke MongoDB tou toujou enstale nan Kubernetes. Isit la sèten volonte parèt - gen yon santiman ke nan ka sa yo yon bagay ka fè. Epi nou pa t menm gade nan Postgres. Natirèlman, nou konnen ke gen opsyon diferan, men an reyalite nou gen yon otonòm.
DB pou fè tès nan Kubernetes
NS: Ann ale sou sijè tès la. Ki jan yo woule chanjman nan baz done a - nan yon pèspektiv DevOps. Gen mikwosèvis, anpil baz done, yon bagay ap chanje yon kote tout tan. Ki jan yo asire nòmal CI/CD pou ke tout bagay an lòd nan pèspektiv DBMS la. Ki apwòch ou a?
DC: Pa ka gen yon sèl repons. Gen plizyè opsyon. Premye a se gwosè a nan baz la ke nou vle woule soti. Ou menm te mansyone ke konpayi yo gen diferan atitid anvè gen yon kopi baz done prod sou dev ak sèn.
NS: Ak anba kondisyon yo nan GDPR a, mwen panse ke yo ap pi plis ak plis atansyon ... Mwen ka di ke an Ewòp yo te deja kòmanse enpoze amann.
DC: Men, souvan ou ka ekri lojisyèl ki pran yon pil fatra nan pwodiksyon ak obfuscates li. Done prod yo jwenn (snapshot, pil fatra, kopi binè...), men li anonimize. Olye de sa, ka gen scripts jenerasyon: sa yo ka enstalasyon oswa jis yon script ki jenere yon baz done gwo. Pwoblèm lan se: konbyen tan li pran pou kreye yon imaj de baz? Ak konbyen tan li pran pou deplwaye li nan anviwònman an vle?
Nou rive nan yon konplo: si kliyan an gen yon seri done fiks (minim vèsyon baz done a), Lè sa a, nou itilize yo pa default. Si nou ap pale de anviwònman revizyon, lè nou te kreye yon branch, nou te deplwaye yon egzanp aplikasyon an - nou woule yon ti baz done la. Men, li te tounen byen , lè nou pran yon pil fatra nan pwodiksyon yon fwa pa jou (nan mitan lannwit) epi bati yon veso Docker ak PostgreSQL ak MySQL ak done sa a chaje ki baze sou li. Si ou bezwen elaji baz done a 50 fwa nan imaj sa a, sa a se fè byen tou senpleman epi byen vit.
NS: Pa senp kopye?
DC: Done yo estoke dirèkteman nan imaj Docker la. Moun sa yo. Nou gen yon imaj ki pare, kwake 100 GB. Mèsi a kouch nan Docker, nou ka byen vit deplwaye imaj sa a otan fwa nou bezwen. Metòd la se estipid, men li travay byen.
NS: Lè sa a, lè ou teste, li chanje dwa andedan Docker, dwa? Kopi-sou-ekri andedan Docker - jete li epi ale ankò, tout bagay anfòm. Klas! Epi èske w deja sèvi ak li nan tout nivo?
DC: Depi lontan.
NS: Nou fè bagay ki sanble anpil. Se sèlman nou pa sèvi ak kopi-sou-ekri Docker a, men kèk lòt.
DC: Li pa jenerik. Ak Docker travay toupatou.
NS: Nan teyori, wi. Men, nou menm tou nou gen modil la, ou ka fè modil diferan ak travay ak sistèm dosye diferan. Ala yon moman isit la. Soti nan bò Postgres, nou gade tout bagay sa yo yon fason diferan. Koulye a, mwen gade sou bò Docker epi mwen wè ke tout bagay ap travay pou ou. Men, si baz done a gwo, pou egzanp, 1 TB, Lè sa a, tout bagay sa yo pran yon bon bout tan: operasyon nan mitan lannwit, ak boure tout bagay nan Docker ... Men, si 5 TB yo boure nan Docker ... Oswa èske tout bagay anfòm?
DC: Ki diferans ki genyen: sa yo se blobs, jis Bits ak bytes.
NS: Diferans lan se sa a: ou fè li nan pil fatra ak restore?
DC: Pa ditou nesesè. Metòd yo pou jenere imaj sa a ka diferan.
NS: Pou kèk kliyan, nou te fè li pou ke olye pou yo regilyèman jenere yon imaj de baz, nou toujou ap kenbe li ajou. Li se esansyèlman yon kopi, men li resevwa done pa soti nan mèt la dirèkteman, men nan yon achiv. Yon achiv binè kote WAL yo telechaje chak jou, kote yo pran sovgad... WAL sa yo rive nan imaj de baz la ak yon ti reta (literalman 1-2 segonn). Nou klonaj soti nan li nan nenpòt fason - kounye a nou gen ZFS pa default.
DC: Men, ak ZFS ou limite a yon sèl ne.
NS: Wi. Men, ZFS tou gen yon majik : ak li ou ka voye yon snapshot e menm (mwen pa te reyèlman teste sa a ankò, men...) ou ka voye yon delta ant de PGDATA. An reyalite, nou gen yon lòt zouti ke nou pa te reyèlman konsidere pou travay sa yo. PostgreSQL genyen , ki travay tankou yon "entelijan" rsync, sote anpil nan sa ou pa oblije gade, paske pa gen anyen ki chanje la. Nou ka fè yon senkronizasyon rapid ant de serveurs yo ak remonte nan menm fason an.
Se konsa, soti nan sa a, plis bò DBA, nou yo ap eseye kreye yon zouti ki pèmèt nou fè menm bagay la ou te di: nou gen yon baz done, men nou vle teste yon bagay 50 fwa, prèske an menm tan.
DC: 50 fwa vle di ou bezwen kòmande 50 enstans Spot.
NS: Non, nou fè tout bagay sou yon sèl machin.
DC: Men, ki jan ou pral elaji 50 fwa si baz done sa a se, di, teraocte. Gen plis chans li bezwen yon kondisyonèl 256 GB RAM?
NS: Wi, pafwa ou bezwen anpil memwa - sa a nòmal. Men, sa a se yon egzanp nan lavi. Machin pwodiksyon an gen 96 nwayo ak 600 GB. An menm tan an, 32 nwayo (menm 16 nwayo kounye a pafwa) ak 100-120 GB memwa yo itilize pou baz done a.
DC: Ak 50 kopi anfòm nan la?
NS: Se konsa, gen yon sèl kopi, Lè sa a, kopi-sou-ekri (ZFS) ap travay... Mwen pral di w nan plis detay.
Pa egzanp, nou gen yon baz done 10 TB. Yo te fè yon disk pou li, ZFS tou konprese gwosè li pa 30-40 pousan. Piske nou pa fè tès chaj, tan repons egzak la pa enpòtan pou nou: se pou l rive jiska 2 fwa pi dousman - sa se oke.
Nou bay pwogramasyon yo opòtinite, QA, DBA, elatriye. fè tès nan 1-2 fil. Pou egzanp, yo ta ka kouri kèk kalite migrasyon. Li pa mande pou 10 nwayo nan yon fwa - li bezwen 1 backend Postgres, 1 nwayo. Migrasyon ap kòmanse - petèt ap toujou kòmanse, Lè sa a, dezyèm nwayo a pral itilize. Nou gen 16-32 nwayo atribye ba, kidonk 10 moun ka travay an menm tan, pa gen pwoblèm.
Paske fizikman PGDATA menm bagay la tou, li sanble ke nou aktyèlman ap twonpe Postgres. Trick la se sa a: pou egzanp, 10 Postgres yo te lanse ansanm. Ki pwoblèm nan anjeneral? Yo mete , ann di 25%. An konsekans, sa a se 200 GB. Ou pa pral kapab lanse plis pase twa nan sa yo, paske memwa a ap fini.
Men, nan kèk pwen nou reyalize ke sa a pa te nesesè: nou mete shared_buffers a 2 GB. PostgreSQL genyen , e an reyalite se sèl la ki enfliyanse . Nou mete li sou 0,5 TB. Epi li pa menm gen pwoblèm ke yo pa egziste aktyèlman: li fè plan kòm si yo egziste.
An konsekans, lè nou teste kèk kalite migrasyon, nou ka kolekte tout plan yo - nou pral wè ki jan li pral rive nan pwodiksyon an. Segonn yo pral diferan (pi dousman), men done yo ke nou aktyèlman li, ak plan yo tèt yo (sa ki JOIN yo la, elatriye) vire soti egzakteman menm jan ak nan pwodiksyon an. Epi ou ka kouri anpil chèk sa yo an paralèl sou yon sèl machin.
DC: Ou pa kwè gen kèk pwoblèm isit la? Premye a se yon solisyon ki travay sèlman sou PostgreSQL. Apwòch sa a trè prive, li pa jenerik. Dezyèm lan se ke Kubernetes (ak tout bagay ki teknoloji nwaj yo pral kounye a) enplike anpil nœuds, ak nœuds sa yo efemèr. Ak nan ka ou li se yon eta, ne pèsistan. Bagay sa yo fè m konfli.
NS: Premyèman, mwen dakò, sa a se yon istwa piman Postgres. Mwen panse ke si nou gen kèk kalite IO dirèk ak yon pisin tanpon pou prèske tout memwa a, apwòch sa a pa pral travay - plan yo pral diferan. Men, pou kounye a nou sèlman travay ak Postgres, nou pa panse sou lòt moun.
Konsènan Kubernetes. Ou menm ou di nou toupatou ke nou gen yon baz done ki pèsistan. Si egzanp lan echwe, bagay prensipal la se sove disk la. Isit la nou gen tou platfòm la tout antye nan Kubernetes, ak eleman nan ak Postgres se separe (byenke li pral la yon jou). Se poutèt sa, tout bagay se tankou sa a: egzanp lan tonbe, men nou sove PV li yo epi tou senpleman konekte li nan yon lòt (nouvo) egzanp, kòm si pa gen anyen ki te rive.
DC: Soti nan pwen de vi mwen, nou kreye gous nan Kubernetes. K8s - elastik: ne yo bay lòd jan sa nesesè. Travay la se tou senpleman kreye yon gous epi di ke li bezwen X kantite resous, ak Lè sa a, K8s pral kalkile li poukont li. Men, sipò depo nan Kubernetes toujou enstab: pous (lavilaj sa a te pibliye semèn de sa) karakteristik sa yo vin sèlman beta.
Sis mwa a yon ane ap pase - li pral vin plis oswa mwens ki estab, oswa omwen li pral deklare kòm sa yo. Lè sa a, posiblite pou snapshots ak redimensionner rezoud pwoblèm ou nèt. Paske ou gen yon baz. Wi, li ka pa trè vit, men vitès la depann de sa ki "anba kapo a", paske kèk aplikasyon ka kopye ak kopi-sou-ekri nan nivo sistèm disk la.
NS: Li nesesè tou pou tout motè (Amazon, Google...) kòmanse sipòte vèsyon sa a - sa a tou pran kèk tan.
DC: Nou poko sèvi ak yo. Nou itilize pa nou.
Devlopman lokal pou Kubernetes
NS: Èske w te rankontre tankou yon volonte lè ou bezwen enstale tout gous yo sou yon sèl machin epi fè tankou yon ti tès. Pou byen vit jwenn yon prèv konsèp, wè ke aplikasyon an kouri nan Kubernetes, san yo pa dedye yon pakèt machin pou li. Gen Minikube, pa vre?
DC: Li sanble pou mwen ke ka sa a - deplwaye sou yon sèl ne - se sèlman sou devlopman lokal yo. Oswa kèk manifestasyon nan yon modèl konsa. Manje , Genyen , . Nou ap deplase nan direksyon pou itilize Kubernetes IN Docker. Koulye a, nou te kòmanse travay avèk li pou tès yo.
NS: Mwen te konn panse ke sa a se te yon tantativ vlope tout gous nan yon sèl imaj Docker. Men, li te tounen soti ke sa a se sou yon bagay konplètman diferan. De tout fason, gen kontenè separe, gous separe - jis nan Docker.
DC: Wi. Epi gen yon imitasyon olye komik te fè, men siyifikasyon an se sa a... Nou gen yon sèvis piblik pou deplwaman - . Nou vle fè li yon mòd kondisyonèl werf up: "Jwenn mwen lokal Kubernetes." Lè sa a, kouri kondisyonèl la werf follow. Lè sa a, pwomotè a pral kapab modifye IDE a, epi yo pral lanse yon pwosesis nan sistèm nan ki wè chanjman yo ak rekonstwi imaj yo, redeplwaye yo nan K8 lokal yo. Se konsa nou vle eseye rezoud pwoblèm devlopman lokal la.
Snapshots ak klonaj baz done nan reyalite K8s
NS: Si nou retounen nan kopi-sou-ekri. Mwen remake ke nwaj yo tou gen snapshots. Yo travay yon fason diferan. Pou egzanp, nan GCP: ou gen yon egzanp milti-terabyte sou kòt lès Etazini. Ou pran snapshots detanzantan. Ou ranmase yon kopi disk la sou kòt lwès la nan yon snapshot - nan kèk minit tout bagay pare, li travay trè vit, sèlman kachèt la bezwen ranpli nan memwa. Men, klon sa yo (snapshots) yo nan lòd yo 'pwovizyon' yon nouvo volim. Sa a se fre lè ou bezwen kreye yon anpil nan ka.
Men, pou tès yo, li sanble mwen ke snapshots, ki ou pale sou nan Docker oswa mwen pale sou nan ZFS, btrfs ak menm LVM ... - yo pèmèt ou pa kreye done reyèlman nouvo sou yon sèl machin. Nan nwaj la, ou pral toujou peye pou yo chak fwa epi tann pa segonn, men minit (ak nan ka a , petèt yon mont).
Olye de sa, ou ka jwenn done sa yo nan yon segond oswa de, kouri tès la epi jete li. Snapshots sa yo rezoud pwoblèm diferan. Nan premye ka a - pou echèl ak jwenn nouvo kopi, ak nan dezyèm lan - pou tès yo.
DC: Mwen pa dakò. Fè klonaj volim travay byen se travay nwaj la. Mwen pa te gade aplikasyon yo, men mwen konnen ki jan nou fè li sou pyès ki nan konpitè. Nou gen Ceph, li pèmèt nenpòt volim fizik () di script epi jwenn yon dezyèm volim ak menm karakteristik yo nan dè dizèn de milisgond, 'ami, elatriye. Ou bezwen konprann ke gen yon kopi-sou-ekri difisil andedan. Poukisa nwaj la pa ta dwe fè menm bagay la? Mwen sèten yo ap eseye fè sa yon fason oswa yon lòt.
NS: Men, li pral toujou pran yo segonn, dè dizèn de segonn ogmante yon egzanp, pote Docker la, elatriye.
DC: Poukisa li nesesè pou leve yon egzanp tout antye? Nou gen yon egzanp ki gen 32 nwayo, 16 ... epi li ka anfòm nan li - pou egzanp, kat. Lè nou bay lòd senkyèm lan, egzanp lan pral deja leve, epi Lè sa a, li pral efase.
NS: Wi, enteresan, Kubernetes vire soti nan yon istwa diferan. Baz done nou an pa nan K8s, epi nou gen yon egzanp. Men, klonaj yon baz done milti-teraocte pran pa plis pase de segonn.
DC: Sa a se gwo. Men, premye pwen mwen an se ke sa a se pa yon solisyon jenerik. Wi, li fre, men li la sèlman apwopriye pou Postgres ak sèlman sou yon sèl ne.
NS: Li apwopriye pa sèlman pou Postgres: plan sa yo, jan mwen dekri, pral sèlman travay nan li. Men, si nou pa deranje sou plan, epi nou jis bezwen tout done yo pou tès fonksyonèl, Lè sa a, sa a se apwopriye pou nenpòt DBMS.
DC: Anpil ane de sa nou te fè yon bagay ki sanble sou snapshots LVM. Sa a se yon klasik. Apwòch sa a te trè aktivman itilize. Nœuds Stateful yo se jis yon doulè. Paske ou pa ta dwe lage yo, ou ta dwe toujou sonje yo...
NS: Èske ou wè nenpòt posibilite pou yon ibrid isit la? Ann di stateful se kèk kalite gous, li travay pou plizyè moun (anpil tèsteur). Nou gen yon sèl volim, men gras ak sistèm dosye a, klon yo lokal yo. Si gous la tonbe, men disk la rete, gous la ap monte, konte enfòmasyon sou tout klon yo, ranmase tout bagay ankò epi di: "Men klon ou yo ap kouri sou pò sa yo, kontinye travay avèk yo."
DC: Teknikman sa vle di ke nan Kubernetes se yon sèl gous nan kote nou kouri anpil Postgres.
NS: Wi. Li gen yon limit: ann di pa plis pase 10 moun travay avè l 'an menm tan. Si ou bezwen 20, nou pral lanse yon dezyèm gous sa yo. Nou pral konplètman klonaj li, li te resevwa dezyèm volim konplè a, li pral gen menm 10 klonaj "mens". Ou pa wè opòtinite sa a?
DC: Nou bezwen ajoute pwoblèm sekirite isit la. Kalite òganizasyon sa a implique ke gous sa a gen gwo privilèj (kapasite), paske li ka fè operasyon ki pa estanda sou sistèm dosye a... Men, mwen repete: mwen kwè ke nan tèm mwayen an yo pral ranje depo nan Kubernetes, ak nan nyaj yo pral ranje istwa a tout antye ak komèsan - tout bagay pral "jis travay". Pral gen redimansyon, klonaj ... Gen yon volim - nou di: "Kreye yon nouvo ki baze sou sa," epi apre yon segond ak yon mwatye nou jwenn sa nou bezwen.
NS: Mwen pa kwè nan yon segonn ak yon mwatye pou anpil terabytes. Sou Ceph ou fè li tèt ou, men ou pale sou nyaj yo. Ale nan nwaj la, fè yon script nan yon volim EBS milti-terabyte sou EC2 epi wè ki pèfòmans lan pral ye. Li pa pral pran kèk segonn. Mwen trè enterese nan ki lè yo pral rive nan nivo sa a. Mwen konprann sa w ap di a, men mwen sipliye pou m pa di.
DC: Ok, men mwen te di nan tèm mwayen an, pa kout tèm. Pou plizyè ane.
Konsènan operatè a pou PostgreSQL soti nan Zalando
Nan mitan reyinyon sa a, Alexey Klyukin, yon ansyen devlopè ki soti nan Zalando, te patisipe tou e li te pale sou istwa operatè PostgreSQL la:
Li bon ke yo manyen sijè sa a an jeneral: tou de Postgres ak Kubernetes. Lè nou te kòmanse fè li nan Zalando an 2017, se te yon sijè ke tout moun te vle fè, men pèsonn pa fè sa. Tout moun te deja gen Kubernetes, men lè yo te mande sa pou yo fè ak baz done, menm moun renmen , ki te preche K8s, te di yon bagay tankou sa a:
"Ale nan sèvis jere epi sèvi ak yo, pa kouri baz done a nan Kubernetes. Sinon, K8 ou yo pral deside, pou egzanp, fè yon ajou, fèmen tout nœuds yo, epi done ou yo pral vole byen lwen, byen lwen.
Nou deside fè yon operatè ki, kontrèman ak konsèy sa a, pral lanse yon baz done Postgres nan Kubernetes. E nou te gen yon bon rezon - . Sa a se yon failover otomatik pou PostgreSQL, fè kòrèkteman, i.e. lè l sèvi avèk etcd, konsil oswa ZooKeeper kòm yon depo enfòmasyon sou gwoup la. Tankou yon depo ki pral bay tout moun ki mande, pa egzanp, kisa lidè aktyèl la ye, menm enfòmasyon an - malgre ke nou gen tout bagay distribye - pou pa gen okenn sèvo fann. Plis nou te genyen pou li.
An jeneral, bezwen konpayi an pou oto failover parèt apre migrasyon soti nan yon sant done pyès ki nan konpitè entèn nan nwaj la. Nwaj la te baze sou yon solisyon propriétaires PaaS (Platform-as-a-Service). Li nan Open Source, men li te pran anpil travay pou jwenn li ak kouri. Li te rele .
Okòmansman, pa te gen okenn Kubernetes. Plis jisteman, lè pwòp solisyon nou an te deplwaye, K8s te deja egziste, men li te tèlman brit ke li pa te apwopriye pou pwodiksyon an. Se te, nan opinyon mwen, 2015 oswa 2016. Pa 2017, Kubernetes te vin plis oswa mwens matirite-te gen yon bezwen imigre la.
Epi nou te deja gen yon veso Docker. Te gen yon PaaS ki te itilize Docker. Poukisa nou pa eseye K8s? Poukisa ou pa ekri pwòp operatè ou a? Murat Kabilov, ki te vin jwenn nou soti nan Avito, te kòmanse sa a kòm yon pwojè sou pwòp inisyativ li - "yo jwe" - ak pwojè a "dekole."
Men, an jeneral, mwen te vle pale sou AWS. Poukisa te gen kòd istorik ki gen rapò ak AWS...
Lè ou kouri yon bagay nan Kubernetes, ou bezwen konprann ke K8s se tankou yon travay nan pwogrè. Li toujou ap devlope, amelyore e menm kraze de tan zan tan. Ou bezwen kenbe yon je fèmen sou tout chanjman ki fèt nan Kubernetes, ou bezwen pare pou plonje nan li si yon bagay rive epi aprann kijan li fonksyone an detay - petèt plis pase ou ta renmen. Sa a, an prensip, aplike nan nenpòt platfòm sou kote ou kouri baz done ou yo...
Se konsa, lè nou te fè deklarasyon an, nou te gen Postgres kouri sou yon volim ekstèn (EBS nan ka sa a, depi nou t ap travay sou AWS). Baz done a te grandi, nan kèk pwen li te nesesè yo chanje gwosè li: pou egzanp, gwosè inisyal la nan EBS te 100 TB, baz done a te grandi nan li, kounye a nou vle fè EBS 200 TB. Ki jan? Ann di ou ka fè yon pil fatra / restore sou yon nouvo egzanp, men sa a pral pran yon bon bout tan ak enplike D '.
Se poutèt sa, mwen te vle yon redimansyon ki ta elaji patisyon an EBS ak Lè sa a, di sistèm nan dosye yo sèvi ak nouvo espas la. Epi nou te fè li, men nan moman sa a Kubernetes pa t 'gen okenn API pou operasyon an redimansyon. Depi nou te travay sou AWS, nou te ekri kòd pou API li yo.
Pa gen moun ki anpeche w fè menm bagay la pou lòt platfòm. Pa gen okenn allusion nan deklarasyon an ke li ka sèlman kouri sou AWS, epi li pa pral travay sou tout lòt bagay. An jeneral, sa a se yon pwojè Open Source: si nenpòt moun ki vle akselere Aparisyon nan itilizasyon nouvo API a, ou se akeyi. Manje , rale demann - ekip Zalando a eseye reponn yo byen vit epi ankouraje operatè a. Jan mwen konnen, pwojè a nan Google Summer of Code ak kèk lòt inisyativ menm jan an. Zalando ap travay trè aktivman sou li.
PS Bonus!
Si w enterese nan sijè PostgreSQL ak Kubernetes, tanpri sonje tou pwochen Postgres Madi a te fèt semèn pase a, kote mwen te pale ak Nikolai. Alexander Kukushkin soti nan Zalando. Videyo ki soti nan li disponib .
P
Li tou sou blog nou an:
- «";
- «";
- «";
- «'.
Sous: www.habr.com
