
I slutet av förra Äret Àgde ytterligare en direktsÀndning av den ryska PostgreSQL-communityn rum. , dÀr dess medgrundare Nikolai Samokhvalov pratade med Flants tekniska direktör Dmitry Stolyarov om detta databashanteringssystem i samband med Kubernetes.
Vi publicerar en transkription av huvuddelen av denna diskussion, och pÄ Hela videon har publicerats:

Databaser och Kubernetes
NSVi kommer inte att prata om VAKUUM och CHECKPOINTS idag. Vi vill prata om Kubernetes. Jag vet att du har mÄnga Ärs erfarenhet. Jag har tittat pÄ dina videor och till och med tittat om nÄgra av dem delvis... LÄt oss gÄ rakt pÄ sak: varför behöver du Postgres eller MySQL i K8s?
DSDet finns inget och kan inte finnas ett tydligt svar pÄ den hÀr frÄgan. Men generellt sett handlar det om enkelhet och bekvÀmlighet... potential. Alla vill ju trots allt ha hanterade tjÀnster.
NSSÄ att som , bara för dig sjÀlv?
DSJa: som RDS, men var som helst.
NS"Var som helst" Àr en bra poÀng. I stora företag finns allt pÄ olika platser. Varför dÄ, om det Àr ett stort företag, inte ta en fÀrdig lösning? Till exempel har Nutanix sina egna utvecklingar, andra företag (VMware...) har samma "RDS, bara i sitt eget".
DSMen vi pratar om en enda implementering som bara fungerar under vissa förutsÀttningar. Och om vi pratar om Kubernetes, sÄ finns det en enorm variation av infrastruktur (som kan finnas i K8). I huvudsak Àr detta en standard för API till molnet...
NSOch det Àr gratis!
DSDet Àr inte sÄ viktigt. Gratis Àr inte viktigt för ett sÀrskilt stort segment av marknaden. NÄgot annat Àr viktigt... Du minns sÀkert rapporten ""?
NS: Ja.
DSJag insÄg att det uppfattades vÀldigt tvetydigt. Vissa trodde att jag sa: "Grabbar, lÄt oss gÄ med alla databaser till Kubernetes!", medan andra bestÀmde sig för att allt detta var bara struntprat. Men jag ville sÀga nÄgot helt annat: "Titta vad som hÀnder, vilka problem det finns och hur de kan lösas. Ska vi gÄ med databaser till Kubernetes nu? Med produktion? Tja, bara om du gillar... att göra vissa saker. Men för en utvecklare kan jag sÀga att jag rekommenderar det. Dynamiskt skapande/borttagning av miljöer Àr mycket viktigt för en utvecklare."
NS: Med utvecklare menar du alla miljöer som inte Ă€r produktionsmiljöer? Staging, QAâŠ
DSOm vi ââpratar om perf-stands, sĂ„ förmodligen inte, eftersom kraven dĂ€r Ă€r specifika. Om vi ââpratar om specialfall, dĂ€r en mycket stor databas behövs för staging, sĂ„ förmodligen inte heller... Om detta Ă€r en statisk miljö, lĂ„nglivad, vad Ă€r dĂ„ fördelen med att databasen finns i K8s?
NSInga. Men var ser vi statiska miljöer? En statisk miljö Àr förÄldrad imorgon.
DSStaging kan vara statiskt. Vi har kunderâŠ
NSJa, jag har ocksÄ en. Det Àr ett stort problem om du har en 10 TB databas och 200 GB staging...
DSJag har ett riktigt coolt case! PĂ„ staging finns en produktionsbas dĂ€r Ă€ndringar görs. Och det finns en knapp: "roll out to production". Dessa Ă€ndringar â deltas â lĂ€ggs till (det verkar som att de helt enkelt synkroniseras via API) till produktionen. Detta Ă€r ett vĂ€ldigt exotiskt alternativ.
NSJag har sett startups i Valley som sitter i RDS eller till och med Heroku â det hĂ€r Ă€r historier frĂ„n 2-3 Ă„r sedan â och de laddar ner dumpen till sin laptop. Eftersom databasen bara Ă€r 80 GB stor, och det finns utrymme pĂ„ laptopen. Sedan köper de extra diskar för att var och en ska ha 3 databaser för att genomföra olika utvecklingar. Detta hĂ€nder ocksĂ„. Jag har ocksĂ„ sett att de inte Ă€r rĂ€dda för att kopiera prod till staging â det beror mycket pĂ„ företaget. Men jag har ocksĂ„ sett att de Ă€r vĂ€ldigt rĂ€dda, och att det ofta inte finns tillrĂ€ckligt med tid och hĂ€nder. Men innan vi gĂ„r vidare till det hĂ€r Ă€mnet skulle jag vilja höra om Kubernetes. Har jag rĂ€tt i att ingen har det i prod Ă€n?
DSVi har smÄ databaser i produktion. Vi talar om volymer pÄ tiotals gigabyte och icke-kritiska tjÀnster för vilka det var för lat att göra repliker (och det finns inget sÄdant behov). Och förutsatt att det finns normal lagring under Kubernetes. Denna databas fungerade i en virtuell maskin - villkorligt i VMware, ovanpÄ lagringssystemet. Vi placerade den i och nu kan vi flytta den frÄn bil till bil.
NSDatabaser av den hÀr storleken, upp till 100 GB, kan vÀl rullas ut pÄ nÄgra minuter pÄ bra diskar och med ett bra nÀtverk? En hastighet pÄ 1 GB per sekund Àr inte lÀngre exotiskt.
DSJa, för en linjÀr operation Àr detta inget problem.
NSOkej, vi borde bara tĂ€nka pĂ„ produktion. Och om vi betraktar Kubernetes för miljöer utan produktion â hur gör man det? Jag ser det i Zalando. , i Knaprigt , finns det nĂ„gra andra alternativ. Och det finns - det hĂ€r Ă€r vĂ„r gode vĂ€n Alvaro frĂ„n Spanien: de gör i princip inte bara och hela fördelningen (), i vilken de, förutom Postgres sjĂ€lvt, ocksĂ„ bestĂ€mde sig för att klĂ€mma in en sĂ€kerhetskopia, en Envoy-proxy ...
DSSÀndebud för vad? Balansera specifikt Postgres-trafik?
NSJa. Det vill sĂ€ga, de ser det som: om du tar LinuxOm vi ââpratar om en distribution och en kĂ€rna, sĂ„ Ă€r vanlig PostgreSQL kĂ€rnan, och de vill skapa en distribution som Ă€r molnvĂ€nlig och körs pĂ„ Kubernetes. De kopplar ihop komponenterna (sĂ€kerhetskopior etc.) och felsöker dem för att sĂ€kerstĂ€lla att de fungerar bra.
DSVÀldigt coolt! I grund och botten Àr detta programvara för att skapa dina egna hanterade Postgres.
NS: U LinuxDistributioner har ett stĂ€ndigt problem: hur man skapar drivrutiner som stöder all hĂ„rdvara. Och de tror att de kommer att fungera i Kubernetes. Jag vet att vi nyligen sĂ„g Zalandos beroende av AWS, och det Ă€r inte sĂ€rskilt bra. Det borde inte finnas ett beroende av en specifik infrastruktur â vad Ă€r poĂ€ngen dĂ„?
DSJag vet inte exakt i vilken situation Zalando fastnade, men i Kubernetes Ă€r lagringen nu gjord pĂ„ ett sĂ„dant sĂ€tt att man inte kan ta en diskbackup med en generisk metod. Nyligen i standarden - i den senaste versionen. â vi gjorde snapshots möjliga, men var Ă€r det implementerat? Ărligt talat Ă€r det fortfarande sĂ„ rĂ„tt⊠Vi testar CSI över AWS, GCE, Azure, vSphere, men sĂ„ fort man börjar anvĂ€nda det ser man att det inte Ă€r klart Ă€n.
NSDet Ă€r dĂ€rför man ibland mĂ„ste knyta sig till infrastrukturen. Jag tror att det fortfarande Ă€r ett tidigt stadium â vĂ€xtvĂ€rk. FrĂ„ga: vad skulle du rekommendera till nybörjare som vill prova PgSQL i K8s? Vilken operator, kanske?
DSProblemet Àr att Postgres stÄr för 3 % för oss. Vi har en vÀldigt lÄng lista med olika programvaror i Kubernetes, jag kommer inte ens lista alla. Till exempel Elasticsearch. Det finns mÄnga operatorer: vissa utvecklas aktivt, andra inte. Vi har sammanstÀllt krav för oss sjÀlva, vad en operator bör ha sÄ att vi tar det pÄ allvar. I en operator specifikt för Kubernetes - inte i en "operator för att göra nÄgot under Amazons villkor"... Faktum Àr att vi ganska brett (= nÀstan alla klienter) anvÀnder en enda operator - (vi kommer att publicera en artikel om honom snart).
NSOch för MySQL ocksÄ? Jag vet att Percona⊠eftersom de nu arbetar med MySQL, MongoDB och Postgres, mÄste de skapa nÄgon form av universell sÄdan: för alla databaser, för alla molnleverantörer.
DSVi har inte haft tid att titta pÄ MySQL-operatorer. Det hÀr Àr inte vÄrt huvudfokus just nu. MySQL fungerar bra fristÄende. Varför behöver man en operator om man bara kan starta en databas... Man kan starta en Docker-container med Postrges, eller sÄ kan man starta den helt enkelt.
NSDet fanns en frÄga om det ocksÄ. Utan nÄgon operatör alls?
DSJa, i 100% av fallen kör vi PostgreSQL utan operator. SÄ Àr det för tillfÀllet. Vi anvÀnder aktivt operatorn för Prometheus, för Redis. Vi har planer pÄ att hitta en operator för Elasticsearch - den Àr den mest "brÀnnande" eftersom vi vill installera den i Kubernetes i 100% av fallen. Precis som vi vill komma till den punkt dÀr vi alltid installerar MongoDB i Kubernetes. HÀr dyker vissa önskemÄl upp - det finns en kÀnsla av att nÄgot kan göras i dessa fall. Och vi har inte ens tittat pÄ Postgres. Naturligtvis vet vi om att det finns olika alternativ, men i sjÀlva verket har vi fristÄende.
Databas för testning i Kubernetes
NSLĂ„t oss gĂ„ vidare till Ă€mnet testning. Hur man rullar ut Ă€ndringar i databasen â ur ett DevOps-perspektiv. Det finns mikrotjĂ€nster, mĂ„nga databaser, nĂ„got förĂ€ndras stĂ€ndigt nĂ„gonstans. Hur sĂ€kerstĂ€ller man normal CI/CD sĂ„ att allt Ă€r bra ur ett DBMS-perspektiv. Vad Ă€r ert tillvĂ€gagĂ„ngssĂ€tt?
DSDet kan inte finnas ett svar. Det finns flera parametrar. Den första Àr storleken pÄ den bas vi vill rulla ut. Du nÀmnde sjÀlv att företag har olika attityder till att ha en kopia av produktionsbasen pÄ utvecklings- och scennivÄ.
NSOch enligt GDPR tror jag att de blir mer och mer försiktiga... Jag kan sÀga att i Europa har de redan börjat utfÀrda böter.
DSMen ofta kan man skriva programvara som skapar en dump frÄn produktionsdata och förvrÀnger den. Man fÄr produktionsdata (snapshot, dump, binÀr kopia...), men de Àr anonymiserade. IstÀllet kan det finnas genereringsskript: dessa kan vara fixturer eller bara ett skript som genererar en stor bas. Problemet Àr: hur lÄng tid tar det att skapa en basavbildning? Och hur lÄng tid tar det att distribuera den till den önskade miljön?
Vi kom fram till schemat: om klienten har en fixtur datamĂ€ngd (en minimal version av databasen), anvĂ€nder vi den som standard. Om vi ââpratar om granskningsmiljöer, nĂ€r vi skapade en gren, distribuerade vi en instans av applikationen - vi rullade ut en liten databas dĂ€r. Men det gick bra och , nĂ€r vi tar en dump frĂ„n produktionen en gĂ„ng om dagen (pĂ„ natten) och bygger en Docker-container med PostgreSQL och MySQL baserat pĂ„ den med denna laddade data. Om vi ââbehöver driftsĂ€tta en databas 50 gĂ„nger frĂ„n denna avbildning görs detta ganska enkelt och snabbt.
NSGenom enkel kopiering?
DSData lagras direkt i Docker-avbildningen. Det vill sÀga, vi har en fÀrdig avbildning, Àven om den Àr 100 GB. Tack vare lager i Docker kan vi snabbt distribuera den hÀr avbildningen sÄ mÄnga gÄnger som behövs. Metoden Àr dum, men den fungerar bra.
NSSen, nĂ€r du testar, Ă€ndras det direkt i Docker, eller hur? Kopiera-vid-skrivning i Docker â slĂ€ng det och kör igen, allt Ă€r bra. Coolt! Och du anvĂ€nder det redan till fullo?
DS: Under en lÄng tid.
NSVi gör vÀldigt liknande saker. Bara det att vi inte anvÀnder Dockers copy-on-write, utan nÄgot annat.
DSDet Àr inte generiskt. Och Docker fungerar överallt.
NSI teorin, ja. Men vi har ocksÄ moduler dÀr, man kan skapa olika moduler och arbeta med olika filsystem. Grejen Àr den. Vi ser pÄ allt detta annorlunda frÄn Postgres-sidan. Nu tittade jag frÄn Docker-sidan och sÄg att allt fungerar för dig. Men om databasen Àr enorm, till exempel 1 TB, dÄ tar allt lÄng tid: operationer pÄ natten, och att stoppa in allt i Docker... Och om man stoppar in 5 TB i Docker... Eller Àr allt okej?
DSVad Àr skillnaden: det hÀr Àr blobbar, bara bitar och byte.
NSSkillnaden Àr denna: gör du detta via dump och restore?
DSInte nödvÀndigtvis. Det kan finnas olika sÀtt att generera den hÀr bilden.
NSFör vissa klienter har vi gjort det sĂ„ att vi istĂ€llet för att regelbundet generera en basavbildning stĂ€ndigt hĂ„ller den uppdaterad. Det Ă€r i huvudsak en replika, men den tar emot data inte direkt frĂ„n mastern, utan via ett arkiv. Ett binĂ€rt arkiv, dĂ€r WAL:er rullas varje dag, dĂ€r sĂ€kerhetskopior ocksĂ„ tas... Dessa WAL:er flyger sedan â med en liten fördröjning (bokstavligen 1â2 sekunder) â till basavbildningen. Vi klonar frĂ„n den pĂ„ vilket sĂ€tt som helst â nu har vi ZFS som standard.
DSMen med ZFS Àr du begrÀnsad till en nod.
NSJa. Men ZFS har en annan magi : med den kan du skicka en ögonblicksbild och till och med (jag har inte testat detta sÄ mycket Àn, men...) du kan skicka ett delta mellan tvÄ PGDATAVi har faktiskt ett annat verktyg som vi inte riktigt har övervÀgt för den hÀr typen av uppgift. PostgreSQL har , vilket fungerar som en "smart" rsync, som hoppar över mÄnga saker som du inte behöver titta pÄ eftersom ingenting har Àndrats dÀr. Vi kan göra en snabb synkronisering mellan tvÄ servrar och spola tillbaka pÄ exakt samma sÀtt.
SÄ, vi försöker frÄn den hÀr, mer DBA-liknande, sidan att skapa ett verktyg som lÄter oss göra samma sak som du pratade om: vi har en databas, men vi vill testa nÄgot 50 gÄnger, nÀstan samtidigt.
DS50 gÄnger betyder att du behöver bestÀlla 50 Spot-instanser.
NSNej, vi gör allt pÄ en maskin.
DSMen hur ska du driftsÀtta den 50 gÄnger om den hÀr databasen Àr, sÀg, en terabyte? Troligtvis behöver den, sÀg, 256 GB RAM?
NSJa, ibland behöver man mycket minne â det Ă€r normalt. Men hĂ€r Ă€r ett exempel frĂ„n livet. Produktionsmaskinen har 96 kĂ€rnor och 600 GB. Samtidigt anvĂ€nds 32 kĂ€rnor för databasen (till och med 16 kĂ€rnor nu ibland) och 100-120 GB minne.
DSOch 50 exemplar fÄr plats dÀr?
NSSÄ det finns bara en kopia, sedan fungerar copy-on-write (ZFS)... Jag ska berÀtta mer.
Till exempel har vi en databas pÄ 10 TB. Vi skapade en disk för den, ZFS komprimerade ocksÄ dess storlek med 30-40 procent. Eftersom vi inte gör belastningstester Àr den exakta svarstiden inte viktig för oss: lÄt den vara upp till 2 gÄnger lÄngsammare - det Àr okej.
Vi gör det möjligt för programmerare, QA, DBA etc. att utföra tester i 1-2 trĂ„dar. De kan till exempel köra en viss migrering. Det krĂ€ver inte 10 kĂ€rnor samtidigt - det behöver 1 Postgres-backend, 1 kĂ€rna. Migreringen kommer att köras - kanske, Den startar om igen, sedan anvĂ€nds den andra kĂ€rnan. Vi har 16â32 kĂ€rnor allokerade, sĂ„ 10 personer kan arbeta samtidigt, inga problem.
Eftersom fysiskt PGDATA Àr desamma, visar det sig att vi faktiskt lurar Postgres. Tricket Àr: till exempel startas 10 Postgres samtidigt. Vad Àr det vanliga problemet? De sÀtter , lÄt oss sÀga 25 %. Följaktligen Àr detta 200 GB. Du kommer inte att kunna starta mer Àn tre av dessa, eftersom minnet dÄ tar slut.
Men vid nÄgon tidpunkt insÄg vi att detta inte Àr nödvÀndigt: vi satte shared_buffers till 2 GB. PostgreSQL har , och i verkligheten pÄverkar det bara Vi lÀgger det i 0,5 TB. Och det spelar ingen roll att de faktiskt inte existerar: han gör planer som om de gör det.
Följaktligen, nĂ€r vi testar en migrering, kan vi samla in alla planer â vi fĂ„r se hur det kommer att hĂ€nda i produktion. Sekunderna dĂ€r kommer att vara annorlunda (lĂ„ngsammare), men den data vi faktiskt lĂ€ser, och sjĂ€lva planerna (vilka JOIN:er, etc.) Ă€r exakt desamma som i produktion. Och parallellt kan man köra mĂ„nga sĂ„dana kontroller pĂ„ en och samma maskin.
DSTycker du inte att det finns flera problem hÀr? Det första Àr att lösningen bara fungerar pÄ PostgreSQL. Den hÀr metoden Àr vÀldigt specifik, den Àr inte generisk. Det andra Àr att Kubernetes (och allt som molntekniker nu gÄr till) antar mÄnga noder, och dessa noder Àr efemÀra. Och i ditt fall Àr den tillstÄndskÀnslig, en persistent nod. Dessa saker orsakar motsÀgelser för mig.
NSFör det första hĂ„ller jag med, det hĂ€r Ă€r en ren Postgres-historia. Jag tror att om vi har direkt IO och en buffertpool för nĂ€stan allt minne, sĂ„ kommer den hĂ€r metoden inte att fungera â vi kommer att ha andra planer. Men vi arbetar bara med Postgres för tillfĂ€llet, vi tĂ€nker inte pĂ„ andra.
AngÄende Kubernetes. Du sÀger sjÀlv överallt att vi har en persistent databas. Om en instans kraschar Àr det viktigaste att rÀdda disken. HÀr har vi ocksÄ hela plattformen i Kubernetes, och komponenten med Postgres Àr separat (Àven om den kommer att finnas dÀr en dag). Det Àr dÀrför allt Àr sÄ hÀr: instansen kraschade, men vi sparade dess persistenta databas och kopplade den helt enkelt till en annan (ny) instans, som om ingenting hade hÀnt.
DSUr mitt perspektiv skapar vi poddar i Kubernetes. K8s Àr elastiskt: noder ordnas efter behov. Uppgiften Àr att helt enkelt skapa en pod och sÀga att den behöver X resurser, och K8s kommer att lista ut resten. Men lagringsstödet i Kubernetes Àr fortfarande instabilt: i I (denna utgÄva kom ut av veckan tillbaka) dessa funktioner blir bara betaversioner.
Ett halvÄr eller ett Är kommer att gÄ - det kommer att bli mer eller mindre stabilt, eller Ätminstone deklareras som sÄdant. DÄ kommer möjligheten till snapshots och storleksÀndring att lösa ditt problem helt. För du har en bas. Ja, det kanske inte Àr sÀrskilt snabbt, men hastigheten beror pÄ vad som finns "under huven", eftersom vissa implementeringar kan kopiera och kopiera-vid-skrivning pÄ nivÄn av diskundersystemet.
NSHĂ€r behöver vi ocksĂ„ se till att alla sökmotorer (Amazon, Google...) har tid att börja stödja den hĂ€r versionen â detta tar ocksĂ„ lite tid.
DSVi anvÀnder dem inte Àn. Vi anvÀnder vÄra egna.
Lokal utveckling för Kubernetes
NSHar du nÄgonsin stött pÄ en sÄdan önskan, nÀr du behöver köra alla poddar pÄ en maskin och göra ett sÄ litet test. Att snabbt fÄ ett proof of concept, att se att applikationen fungerar i Kubernetes, utan att allokera en massa maskiner för detta. Du har Minikube, eller hur?
DSDet verkar för mig som att det hĂ€r fallet â driftsĂ€ttning pĂ„ en nod â uteslutande handlar om lokal utveckling. Eller nĂ„gra manifestationer av ett sĂ„dant mönster. Det finns , Det finns , Vi gĂ„r nu över till att anvĂ€nda Kubernetes IN Docker. Vi har nu börjat arbeta med det för testning.
NSJag trodde att det hĂ€r var ett försök att samla alla poddar i en Docker-avbildning. Men det visade sig att det hĂ€r handlar om nĂ„got helt annat. Det finns fortfarande separata containrar, separata poddar â bara i Docker.
DSJa. Och det görs en ganska rolig imitation dÀr, men poÀngen Àr denna... Vi har ett verktyg för driftsÀttning - Vi vill skapa en regim i det - villkorligt werf up"Skaffa mig en lokal Kubernetes." Och kör sedan ett villkorskommando werf followDÄ kommer utvecklaren att kunna redigera i IDE:n, och en process startas i systemet som ser Àndringarna och Äterskapar avbildningarna, omdistribuerar dem till de lokala K8:erna. Det Àr sÄ vi vill försöka lösa problemet med lokal utveckling.
Ăgonblicksbilder och databasens kloning i K8s Realities
NSOm vi ââgĂ„r tillbaka till kopiera-vid-skrivning. Jag har lagt mĂ€rke till att moln ocksĂ„ har snapshots. De fungerar annorlunda. Till exempel, i GCP: du har en instans pĂ„ flera terabyte pĂ„ den amerikanska östkusten. Du gör regelbundet snapshots. Du hĂ€mtar en kopia av disken frĂ„n snapshoten pĂ„ vĂ€stkusten - pĂ„ nĂ„gra minuter Ă€r allt klart, det fungerar vĂ€ldigt snabbt, bara cachen behöver fyllas i minnet. Men dessa kloner (snapshots) Ă€r till för att "provisionera" en ny volym. Detta Ă€r coolt nĂ€r du behöver skapa mĂ„nga instanser.
Men för testning, verkar det som att snapshots, som du pratar om i Docker eller jag pratar om i ZFS, btrfs och till och med LVM... - lÄter dig inte skapa riktigt ny data pÄ en enda maskin. I molnet mÄste du fortfarande betala för dem varje gÄng och vÀnta inte sekunder, utan minuter (och nÀr det gÀller , möjligen en klocka).
IstÀllet kan du hÀmta dessa data pÄ en sekund eller tvÄ, köra testet och sedan slÀnga dem. Dessa ögonblicksbilder löser olika problem. I det första fallet för att skala och hÀmta nya repliker, och i det andra fallet för tester.
DSJag hÄller inte med. Det Àr molnets jobb att klona volymer korrekt. Jag har inte tittat pÄ deras implementering, men jag vet hur vi gör det pÄ hÄrdvara. Vi har Ceph, dÀr vilken fysisk volym som helst kan () sÀga klona och fÄ en andra volym med samma egenskaper pÄ tiotals millisekunder, 'ami, etc. Du mÄste förstÄ att det finns en knepig kopierings-och-skrivningsprocess inuti. Varför skulle inte molnet göra detsamma? Jag Àr sÀker pÄ att de försöker göra det pÄ ett eller annat sÀtt.
NSMen det kommer fortfarande att ta dem sekunder, tiotals sekunder att hÀmta en instans, ta dit Docker, etc.
DSVarför Àr det nödvÀndigt att höja en hel instans? Vi har en instans med 32 kÀrnor, 16... och nÄgra fÄr plats i den - till exempel fyra. NÀr vi bestÀller den femte kommer instansen redan att höjas, och sedan kommer den att tas bort.
NSJa, intressant nog Àr det en annan historia i Kubernetes. VÄr databas finns inte i K8s, och det finns en instans. Men att klona en databas pÄ flera terabyte tar inte mer Àn tvÄ sekunder.
DSDet Àr coolt. Men min första poÀng Àr att detta inte Àr en generisk lösning. Ja, det Àr coolt, men det fungerar bara för Postgres och bara pÄ en nod.
NSDet gÀller inte bara Postgres: dessa planer, som jag beskrev, kommer bara att fungera i det. Men om vi inte bryr oss om planer, och bara behöver all data för funktionell testning, sÄ kommer det att fungera för vilket databassystem som helst.
DSFör mÄnga Är sedan gjorde vi nÄgot liknande med LVM-snapshots. Det Àr en klassiker. Den hÀr metoden anvÀndes vÀldigt aktivt. Det Àr bara det att stateful nodes Àr jobbiga. För man behöver inte tappa dem, man mÄste alltid komma ihÄg dem...
NSSer du ingen möjlighet till en hybrid hÀr? LÄt oss sÀga att stateful Àr nÄgon sorts pod, den fungerar för flera personer (mÄnga testare). Vi har en volym, men tack vare filsystemet Àr klonerna lokala. Om poden kraschar finns disken kvar - poden kommer att resa sig, lÀsa informationen om alla kloner, resa tillbaka allt och sÀga: "HÀr Àr dina kloner som körs pÄ dessa portar, fortsÀtt arbeta med dem."
DSTekniskt sett betyder detta att det inom Kubernetes Àr en pod, inuti vilken vi kör mÄnga Postgres.
NSJa. Det har en grĂ€ns: lĂ„t oss sĂ€ga att högst 10 personer arbetar med det samtidigt. Om vi ââbehöver 20 lanserar vi en andra pod. Det Ă€r fullt möjligt att klona den och fĂ„ en andra full volym, som kommer att ha samma 10 "tunna" kloner. Ser du inte en sĂ„dan möjlighet?
DSVi mÄste lÀgga till sÀkerhetsproblem hÀr. Den hÀr typen av organisation innebÀr att den hÀr podden har höga privilegier (funktioner), eftersom den kan utföra icke-standardiserade operationer pÄ filsystemet... Men jag upprepar: Jag tror att pÄ medellÄng sikt kommer lagring att fixas i Kubernetes, hela historien med volymer kommer att fixas i molnen - allt kommer att "bara fungera". Det kommer att bli storleksÀndring, kloning... Det finns en volym - vi sÀger: "Skapa en ny baserat pÄ den", - och pÄ en och en halv sekund fÄr vi det vi behöver.
NSJag tror inte pÄ en och en halv sekund för mÄnga terabyte. Du gör det sjÀlv pÄ Ceph, och du pratar om moln. GÄ till molnet, gör en klon av en EBS-volym pÄ mÄnga terabyte pÄ EC2 och se vad prestandan blir. Det tar inte nÄgra sekunder. Jag Àr vÀldigt intresserad av nÀr de kommer att nÄ en sÄdan siffra. Jag förstÄr vad du pratar om, men jag tillÄter mig att inte hÄlla med.
DSOkej, men jag sa pÄ medellÄng sikt, inte kort sikt. Under loppet av flera Är.
Om operatorn för PostgreSQL frÄn Zalando
Mitt under mötet deltog Àven Alexey Klyukin, en tidigare utvecklare frÄn Zalando, och berÀttade historien om PostgreSQL-operatorn:
Det Àr fantastiskt att det hÀr Àmnet ens berörs: bÄde Postgres och Kubernetes. NÀr vi började göra det pÄ Zalando 2017 var det ett Àmne som alla ville göra, men ingen gjorde det. Alla skaffade redan Kubernetes, men nÀr folk frÄgade vad man skulle göra med databaser, till och med folk som... , som predikade K8s, sa nÄgot i stil med:
"GÄ till hanterade tjÀnster och anvÀnd dem, kör inte databas i Kubernetes. Annars kommer dina K8:or att bestÀmma sig för att till exempel uppgradera, stÀnga ner alla noder, och din data kommer att flyga lÄngt, lÄngt bort."
Vi bestĂ€mde oss för att skapa en operator som, i motsats till detta rĂ„d, skulle köra en Postgres-databas i Kubernetes. Och vi hade en god anledning â Detta Ă€r en automatisk redundansvĂ€xling för PostgreSQL, korrekt utförd, dvs. med hjĂ€lp av etcd, consul eller ZooKeeper som ett klusterinformationslager. Ett lager som ger alla som frĂ„gar, till exempel, vem som Ă€r den nuvarande ledaren, samma information - trots att vi har allt distribuerat - sĂ„ att det inte finns nĂ„gon split brain. Dessutom hade vi för honom.
Generellt sett uppstod företagets behov av automatisk redundans efter att ha migrerat frÄn ett internt hÄrdvarudatacenter till molnet. Molnet baserades pÄ en egen PaaS-lösning (Platform-as-a-Service). Det Àr öppen kÀllkod, men det krÀvdes mycket arbete för att fÄ igÄng det. Det kallades .
Ursprungligen fanns det inget Kubernetes. Mer exakt, nĂ€r vĂ„r egen lösning driftsattes, fanns K8 redan, men den var sĂ„ rĂ„ att den inte var lĂ€mplig för produktion. Det var, tror jag, 2015 eller 2016. Ă r 2017 hade Kubernetes blivit mer eller mindre moget â det fanns ett behov av att migrera dit.
Och vi hade redan en Docker-container. Det fanns en PaaS som anvĂ€nde Docker. Varför inte prova K8:or? Varför inte skriva din egen operator? Murat Kabilov, som kom till oss frĂ„n Avito, startade detta som ett projekt pĂ„ eget initiativ â âför att lekaâ â och projektet âtog fartâ.
Men generellt sett ville jag prata om AWS. Varför fanns det historiskt sett kod relaterad till AWSâŠ
NĂ€r du kör nĂ„got i Kubernetes mĂ„ste du förstĂ„ att K8s Ă€r ett pĂ„gĂ„ende arbete. Det utvecklas, förbĂ€ttras och till och med bryts ner dĂ„ och dĂ„. Du mĂ„ste noggrant övervaka alla förĂ€ndringar i Kubernetes, du mĂ„ste vara redo att dyka in i det och lĂ€ra dig hur det fungerar i detalj om det behövs â kanske mer Ă€n du skulle vilja. Detta Ă€r i princip fallet med alla plattformar som du kör dina databaser pĂ„...
SÄ, nÀr vi skapade operatorn hade vi Postgres, som fungerade med en extern volym (i det hÀr fallet EBS, eftersom vi arbetade i AWS). Databasen vÀxte, vid nÄgon tidpunkt var det nödvÀndigt att göra en storleksÀndring: till exempel, den ursprungliga storleken pÄ EBS Àr 100 TB, databasen har vuxit till det, nu vill vi göra EBS 200 TB. Hur? LÄt oss sÀga att du kan göra en dump/ÄterstÀllning till en ny instans, men detta Àr lÄngt och innebÀr driftstopp.
SÄ vi ville ha en storleksÀndring som skulle utöka EBS-partitionen och sedan ange att filsystemet skulle anvÀnda det nya utrymmet. Och det gjorde vi, men vid den tidpunkten hade Kubernetes inget API för storleksÀndringsoperationen. Eftersom vi körde pÄ AWS skrev vi kod för deras API.
Det finns ingen anledning att göra detsamma för andra plattformar. Det finns inget krav i operatören att det bara kan lanseras pĂ„ AWS, och det kommer inte att fungera pĂ„ nĂ„got annat. Generellt sett Ă€r detta ett öppen kĂ€llkodsprojekt: om nĂ„gon vill pĂ„skynda framvĂ€xten av anvĂ€ndningen av det nya API:et Ă€r ni vĂ€lkomna. Det finns , pull requests â Zalando-teamet försöker svara pĂ„ dem ganska snabbt och marknadsföra operatören. SĂ„vitt jag vet, projektet i Google Summer of Code och nĂ„gra andra liknande initiativ. Zalando arbetar mycket aktivt med det.
P.S. Bonus!
Om du Àr intresserad av Àmnet PostgreSQL och Kubernetes, sÄ vill vi ocksÄ uppmÀrksamma dig pÄ att förra veckan Àgde nÀsta Postgres Tuesday rum, dÀr Nikolay pratade Alexander Kukushkin frÄn ZalandoVideo frÄn den finns tillgÀnglig .
PPS
LÀs Àven pÄ vÄr blogg:
- «";
- «";
- «";
- «".
KĂ€lla: will.com
