ProHoster > Blogs > AdministrÄcija > ÄŖss pÄrskats par PostgreSQL paziÅojumiem uzÅÄmumam Kubernetes, mÅ«su izvÄle un pieredze
ÄŖss pÄrskats par PostgreSQL paziÅojumiem uzÅÄmumam Kubernetes, mÅ«su izvÄle un pieredze
Arvien biežÄk klienti saÅem Å”Ädus pieprasÄ«jumus: āGribam kÄ Amazon RDS, bet lÄtÄkā; "MÄs vÄlamies to kÄ RDS, bet visur, jebkurÄ infrastruktÅ«rÄ." Lai ieviestu Å”Ädu pÄrvaldÄ«tu risinÄjumu vietnÄ Kubernetes, mÄs apskatÄ«jÄm paÅ”reizÄjo populÄrÄko PostgreSQL operatoru stÄvokli (Stolon, operatori no Crunchy Data un Zalando) un izdarÄ«jÄm savu izvÄli.
Å is raksts ir mÅ«su gÅ«tÄ pieredze gan no teorÄtiskÄ viedokļa (risinÄjumu apskats), gan no praktiskÄs puses (kas tika izvÄlÄts un kas no tÄ izrietÄja). Bet vispirms noskaidrosim, kÄdas ir vispÄrÄ«gÄs prasÄ«bas iespÄjamai RDS nomaiÅai...
Kas ir RDS
Kad cilvÄki runÄ par RDS, pÄc mÅ«su pieredzes viÅi domÄ pÄrvaldÄ«tu DBVS pakalpojumu, kas:
viegli konfigurÄjams;
ir iespÄja strÄdÄt ar momentuzÅÄmumiem un atjaunot no tiem (vÄlams ar atbalstu PITR);
ļauj izveidot galvenÄs un pakÄrtotÄs topoloÄ£ijas;
ir bagÄtÄ«gs paplaÅ”inÄjumu saraksts;
nodroÅ”ina auditu un lietotÄju/piekļuves pÄrvaldÄ«bu.
VispÄrÄ«gi runÄjot, pieejas uzdevuma Ä«stenoÅ”anai var bÅ«t ļoti dažÄdas, taÄu ceļŔ ar nosacÄ«to Ansible mums nav tuvs. (RezultÄtÄ kolÄÄ£i no 2GIS nonÄca pie lÄ«dzÄ«ga secinÄjuma viÅa mÄÄ£inÄjums izveidot "rÄ«ku Ätrai uz Postgres balstÄ«tas kļūmjpÄrlÄces klastera izvietoÅ”anai.")
Operatori ir izplatÄ«ta pieeja lÄ«dzÄ«gu problÄmu risinÄÅ”anai Kubernetes ekosistÄmÄ. PlaÅ”Äk par tiem āFlantaā tehniskais direktors jau runÄjis saistÄ«bÄ ar Kubernetes iekÅ”ienÄ palaistajÄm datubÄzÄm. distolUz viens no viÅa ziÅojumiem.
NB: Lai Ätri izveidotu vienkÄrÅ”us operatorus, iesakÄm pievÄrst uzmanÄ«bu mÅ«su atvÄrtÄ koda utilÄ«tai Äaulas operators. Izmantojot to, varat to izdarÄ«t bez zinÄÅ”anÄm par Go, bet tÄdos veidos, kas ir pazÄ«stamÄki sistÄmas administratoriem: Bash, Python utt.
PostgreSQL ir vairÄki populÄri K8s operatori:
Stolons;
Crunchy Data PostgreSQL operators;
Zalando Postgres operators.
ApskatÄ«sim tos tuvÄk.
Operatora izvÄle
Papildus jau iepriekÅ” minÄtajÄm svarÄ«gajÄm funkcijÄm mÄs kÄ Kubernetes infrastruktÅ«ras operÄciju inženieri no operatoriem gaidÄ«jÄm arÄ« sekojoÅ”o:
mezgla afinitÄtes vai mezgla atlasÄ«tÄja instalÄÅ”ana;
pielaides uzstÄdÄ«Å”ana;
skaÅoÅ”anas iespÄju pieejamÄ«ba;
saprotamas tehnoloģijas un pat komandas.
Neiedziļinoties detaļÄs par katru punktu (jautÄjiet komentÄros, vai pÄc visa raksta izlasÄ«Å”anas jums joprojÄm ir jautÄjumi par tiem), kopumÄ atzÄ«mÄÅ”u, ka Å”ie parametri ir nepiecieÅ”ami, lai precÄ«zÄk aprakstÄ«tu klasteru mezglu specializÄciju. pasÅ«tiet tos Ä«paÅ”iem lietojumiem. TÄdÄ veidÄ mÄs varam sasniegt optimÄlu lÄ«dzsvaru veiktspÄjas un izmaksu ziÅÄ.
Tagad pÄriesim pie paÅ”iem PostgreSQL operatoriem.
1. Stolons
Stolons no ItÄlijas uzÅÄmuma Sorint.lab in jau minÄtais ziÅojums tika uzskatÄ«ts par sava veida standartu starp operatoriem DBVS. Å is ir diezgan vecs projekts: tÄ pirmÄ publiskÄ izlaiÅ”ana notika 2015. gada novembrÄ« (!), un GitHub krÄtuvÄ ir gandrÄ«z 3000 zvaigžÅu un vairÄk nekÄ 40 lÄ«dzstrÄdnieku.
PatieÅ”Äm, Stolon ir lielisks pÄrdomÄtas arhitektÅ«ras piemÄrs:
SÄ«kÄk ar Ŕī operatora ierÄ«ci var iepazÄ«ties pÄrskatÄ vai projekta dokumentÄcija. KopumÄ pietiek pateikt, ka tas var paveikt visu, kas aprakstÄ«ts: kļūmjpÄrlÄce, starpniekserveri caurspÄ«dÄ«gai klienta piekļuvei, dublÄjumkopijas... TurklÄt starpniekserveri nodroÅ”ina piekļuvi, izmantojot vienu galapunkta pakalpojumu - atŔķirÄ«bÄ no pÄrÄjiem diviem tÄlÄk apskatÄ«tajiem risinÄjumiem (katram ir divi pakalpojumi piekļuve bÄzei).
TomÄr Stolons nav pielÄgotu resursu, tÄpÄc to nevar izvietot tÄ, lai bÅ«tu viegli un Ätri ā ākÄ karstmaizesā ā izveidot DBVS gadÄ«jumus Kubernetes. PÄrvaldÄ«bu veic, izmantojot utilÄ«tu stolonctl, izvietoÅ”ana tiek veikta, izmantojot Helm diagrammu, un pielÄgotie ir definÄti un norÄdÄ«ti ConfigMap.
No vienas puses, izrÄdÄs, ka operators Ä«sti nav operators (galu galÄ tas neizmanto CRD). Bet, no otras puses, tÄ ir elastÄ«ga sistÄma, kas ļauj konfigurÄt resursus K8s pÄc saviem ieskatiem.
RezumÄjot, mums personÄ«gi neŔķita optimÄli katrai datubÄzei izveidot atseviŔķu diagrammu. TÄpÄc mÄs sÄkÄm meklÄt alternatÄ«vas.
2. Crunchy Data PostgreSQL operators
Operators no Crunchy Data, jauns amerikÄÅu startup, Ŕķita loÄ£iska alternatÄ«va. TÄs publiskÄ vÄsture sÄkas ar pirmo izlaiÅ”anu 2017. gada martÄ, kopÅ” tÄ laika GitHub repozitorijs ir saÅÄmis nedaudz mazÄk par 1300 zvaigznÄ«tÄm un vairÄk nekÄ 50 lÄ«dzstrÄdnieku. JaunÄkais septembra laidiens tika pÄrbaudÄ«ts darbam ar Kubernetes 1.15-1.18, OpenShift 3.11+ un 4.4+, GKE un VMware Enterprise PKS 1.3+.
Crunchy Data PostgreSQL Operator arhitektÅ«ra atbilst arÄ« norÄdÄ«tajÄm prasÄ«bÄm:
PÄrvaldÄ«ba notiek, izmantojot utilÄ«tu pgotomÄr tas savukÄrt Ä£enerÄ Kubernetes pielÄgotus resursus. TÄpÄc operators mÅ«s kÄ potenciÄlos lietotÄjus iepriecinÄja:
ir kontrole caur CRD;
Ärta lietotÄju pÄrvaldÄ«ba (arÄ« caur CRD);
integrÄcija ar citiem komponentiem Crunchy Data Container Suite ā specializÄta PostgreSQL konteinera attÄlu kolekcija un utilÄ«tas darbam ar to (tostarp pgBackRest, pgAudit, paplaÅ”inÄjumi no contrib utt.).
TomÄr mÄÄ£inÄjumi sÄkt izmantot operatoru no Crunchy Data atklÄja vairÄkas problÄmas:
Pielaides nebija iespÄjams - tiek nodroÅ”inÄts tikai nodeSelector.
Izveidotie aplikumi bija daļa no izvietoÅ”anas, neskatoties uz to, ka mÄs izvietojÄm statusu saturoÅ”u lietojumprogrammu. AtŔķirÄ«bÄ no StatefulSets, Deployments nevar izveidot diskus.
PÄdÄjais trÅ«kums noved pie smieklÄ«giem brīžiem: testa vidÄ mums izdevÄs palaist 3 kopijas ar vienu disku vietÄjÄ krÄtuve, liekot operatoram ziÅot, ka darbojas 3 kopijas (lai gan tÄs nedarbojÄs).
VÄl viena Ŕī operatora iezÄ«me ir tÄ gatavÄ integrÄcija ar dažÄdÄm palÄ«gsistÄmÄm. PiemÄram, ir viegli instalÄt pgAdmin un pgBounce, un in dokumentÄcija tiek apsvÄrti iepriekÅ” konfigurÄti Grafana un Prometheus. Nesen laidiens 4.5.0-beta1 AtseviŔķi tiek atzÄ«mÄta uzlabota integrÄcija ar projektu pgMonitor, pateicoties kam operators piedÄvÄ skaidru PgSQL metrikas vizualizÄciju.
TomÄr dÄ«vainÄ Kubernetes radÄ«to resursu izvÄle noveda mÅ«s pie nepiecieÅ”amÄ«bas meklÄt citu risinÄjumu.
3. Zalando Postgres operators
Zalando produktus pazÄ«stam jau sen: mums ir pieredze Zalenium lietoÅ”anÄ un, protams, arÄ« izmÄÄ£inÄjÄm Patroni ir viÅu populÄrais HA risinÄjums PostgreSQL. Par uzÅÄmuma pieeju radÄ«Å”anai Postgres operators ÄterÄ sacÄ«ja viens no tÄs autoriem Aleksejs Kļukins Postgres-otrdiena #5, un mums tas patika.
Å is ir jaunÄkais rakstÄ apspriestais risinÄjums: pirmÄ izlaiÅ”ana notika 2018. gada augustÄ. TomÄr, pat neskatoties uz nelielo oficiÄlo izlaidumu skaitu, projekts ir nogÄjis garu ceļu, popularitÄtÄ jau pÄrspÄjot Crunchy Data risinÄjumu ar 1300+ zvaigznÄm GitHub un maksimÄlo atbalstÄ«tÄju skaitu (70+).
āZem pÄrsegaā Å”is operators izmanto laika pÄrbaudÄ«tus risinÄjumus:
Å Ädi tiek prezentÄta Zalando operatora arhitektÅ«ra:
Operators tiek pilnÄ«bÄ pÄrvaldÄ«ts, izmantojot pielÄgotos resursus, automÄtiski izveido StatefulSet no konteineriem, ko pÄc tam var pielÄgot, pievienojot podam dažÄdas blakusvÄÄ£us. Tas viss ir bÅ«tiska priekÅ”rocÄ«ba salÄ«dzinÄjumÄ ar operatoru no Crunchy Data.
TÄ kÄ mÄs izvÄlÄjÄmies risinÄjumu no Zalando no 3 izskatÄmajÄm iespÄjÄm, tÄlÄk tiks sniegts sÄ«kÄks tÄ iespÄju apraksts kopÄ ar pielietoÅ”anas praksi.
Prakse ar Postgres operatoru no Zalando
Operatora izvietoÅ”ana ir ļoti vienkÄrÅ”a: vienkÄrÅ”i lejupielÄdÄjiet paÅ”reizÄjo versiju no GitHub un lietojiet YAML failus no direktorija izpaužas. AlternatÄ«vi, jÅ«s varat arÄ« izmantot operatoru centrs.
PÄc instalÄÅ”anas jums jÄuztraucas par iestatÄ«Å”anu žurnÄlu un dublÄjumkopiju krÄtuve. Tas tiek darÄ«ts, izmantojot ConfigMap postgres-operator nosaukumvietÄ, kurÄ instalÄjÄt operatoru. Kad krÄtuves ir konfigurÄtas, varat izvietot savu pirmo PostgreSQL klasteru.
PiemÄram, mÅ«su standarta izvietoÅ”ana izskatÄs Å”Ädi:
Å is manifests izvieto 3 gadÄ«jumu kopu ar blakusvÄÄ£i formÄ postgres_eksportÄtÄjs, no kuras mÄs Åemam lietojumprogrammu rÄdÄ«tÄjus. KÄ redzat, viss ir ļoti vienkÄrÅ”i, un, ja vÄlaties, varat izveidot burtiski neierobežotu skaitu klasteru.
Ir vÄrts pievÄrst uzmanÄ«bu tÄ«mekļa administrÄÅ”anas panelis SÄkot no postgres-operator-ui. Tas nÄk kopÄ ar operatoru un ļauj izveidot un dzÄst klasterus, kÄ arÄ« strÄdÄt ar operatora veiktajÄm dublÄjumkopijÄm.
PostgreSQL klasteru saraksts
Rezerves kopiju pÄrvaldÄ«ba
VÄl viena interesanta iezÄ«me ir atbalsts Teams API. Å is mehÄnisms automÄtiski izveido lomas PostgreSQL, pamatojoties uz iegÅ«to lietotÄjvÄrdu sarakstu. PÄc tam API ļauj atgriezt to lietotÄju sarakstu, kuriem tiek automÄtiski izveidotas lomas.
ProblÄmas un risinÄjumi
TomÄr operatora izmantoÅ”ana drÄ«z vien atklÄja vairÄkus bÅ«tiskus trÅ«kumus:
nodeSelector atbalsta trūkums;
nespÄja atspÄjot dublÄjumus;
izmantojot datu bÄzes izveides funkciju, noklusÄjuma privilÄÄ£ijas neparÄdÄs;
DažkÄrt trÅ«kst dokumentÄcijas vai tÄ ir novecojusi.
Par laimi, daudzus no tiem var atrisinÄt. SÄksim no gala ā problÄmas ar dokumentÄcija.
VisticamÄk, jÅ«s saskarsities ar faktu, ka ne vienmÄr ir skaidrs, kÄ reÄ£istrÄt dublÄjumu un kÄ savienot rezerves kopiju ar operatora lietotÄja interfeisu. DokumentÄcijÄ par to ir runÄts garÄmejot, bet Ä«stais apraksts ir iekÅ”Ä PR:
nepiecieÅ”ams izveidot noslÄpumu;
nodod to operatoram kÄ parametru pod_environment_secret_name CRD ar operatora iestatÄ«jumiem vai ConfigMap (atkarÄ«bÄ no tÄ, kÄ jÅ«s nolemjat instalÄt operatoru).
TomÄr, kÄ izrÄdÄs, Å”obrÄ«d tas nav iespÄjams. TÄpÄc mÄs savÄcÄm jÅ«su operatora versija ar dažiem papildu treÅ”o puÅ”u uzlabojumiem. PlaÅ”Äku informÄciju par to skatiet tÄlÄk.
Ja nododat operatoram parametrus dublÄÅ”anai, proti - wal_s3_bucket un piekļuves atslÄgas AWS S3, tad tÄ dublÄs visu: ne tikai bÄzes ražoÅ”anÄ, bet arÄ« inscenÄÅ”ana. Tas mums nederÄja.
Spilo parametru aprakstÄ, kas ir pamata Docker iesaiÅojums PgSQL, izmantojot operatoru, izrÄdÄ«jÄs: jÅ«s varat nodot parametru WAL_S3_BUCKET tukÅ”s, tÄdÄjÄdi atspÄjojot dublÄÅ”anu. TurklÄt par lielu prieku es atklÄju gatavs PR, ko uzreiz pieÅÄmÄm savÄ dakÅ”iÅÄ. Tagad jums vienkÄrÅ”i jÄpievieno enableWALArchiving: false uz PostgreSQL klastera resursu.
JÄ, bija iespÄja to izdarÄ«t savÄdÄk, palaižot 2 operatorus: vienu inscenÄÅ”anai (bez dublÄjumkopijÄm), bet otru ražoÅ”anai. Bet ar vienu varÄjÄm iztikt.
Labi, mÄs uzzinÄjÄm, kÄ pÄrsÅ«tÄ«t piekļuvi S3 datu bÄzÄm, un dublÄjumkopijas sÄka nokļūt krÄtuvÄ. KÄ nodroÅ”inÄt, lai rezerves lapas darbotos Operator UI?
PÄc tam kļūs pieejama dublÄjumkopiju pÄrvaldÄ«ba, kas mÅ«su gadÄ«jumÄ vienkÄrÅ”os darbu ar iestudÄÅ”anu, ļaujot tur nogÄdÄt ŔķÄles no ražoÅ”anas bez papildu skriptiem.
VÄl viena priekÅ”rocÄ«ba bija darbs ar Teams API un plaÅ”as iespÄjas izveidot datu bÄzes un lomas, izmantojot operatora rÄ«kus. TomÄr radÄ«tais lomÄm pÄc noklusÄjuma nebija tiesÄ«bu. AttiecÄ«gi lietotÄjs ar lasÄ«Å”anas tiesÄ«bÄm nevarÄja lasÄ«t jaunas tabulas.
KÄpÄc ir tÄ, ka? Neskatoties uz to, ka kodÄ tur ir nepiecieÅ”ams GRANT, tos ne vienmÄr izmanto. Ir 2 metodes: syncPreparedDatabases Šø syncDatabases. Uz syncPreparedDatabases - neskatoties uz to, ka sadaÄ¼Ä preparedDatabasestur ir ir nosacÄ«jums defaultRoles Šø defaultUsers lai izveidotu lomas, noklusÄjuma tiesÄ«bas netiek piemÄrotas. MÄs gatavojam ielÄpu, lai Ŕīs tiesÄ«bas tiktu automÄtiski piemÄrotas.
Un pÄdÄjais punkts mums aktuÄlajos uzlabojumos - plÄksteris, kas izveidotajam StatefulSet pievieno Node Affinity. MÅ«su klienti bieži dod priekÅ”roku izmaksu samazinÄÅ”anai, izmantojot spot instances, un viÅiem acÄ«mredzami nav vÄrts mitinÄt datu bÄzes pakalpojumus. Å o problÄmu var atrisinÄt, izmantojot pielaides, taÄu mezgla Affinity klÄtbÅ«tne nodroÅ”ina lielÄku pÄrliecÄ«bu.
Kas notika?
Pamatojoties uz iepriekÅ” minÄto problÄmu risinÄÅ”anas rezultÄtiem, mÄs izveidojÄm Postgres Operator no Zalando uz jÅ«su krÄtuve, kur tas tiek savÄkts ar tÄdiem noderÄ«giem ielÄpiem. Un lielÄkai ÄrtÄ«bai mÄs arÄ« savÄcÄm Docker attÄls.
BÅ«tu lieliski, ja kopiena atbalstÄ«s Å”os PR, lai tie tiktu parÄdÄ«ti augÅ”pusÄ ar nÄkamo operatora versiju (1.6).
Bonuss! RažoÅ”anas migrÄcijas veiksmes stÄsts
Ja izmantojat Patroni, tieÅ”o ražoÅ”anu var migrÄt uz operatoru ar minimÄlu dÄ«kstÄvi.
Spilo ļauj izveidot gaidstÄves klasterus, izmantojot S3 krÄtuvi ar Wal-E, kad PgSQL binÄrais žurnÄls vispirms tiek saglabÄts S3 un pÄc tam to izsÅ«knÄ kopija. Bet ko darÄ«t, ja jums ir nÄ izmanto Wal-E vecajÄ infrastruktÅ«rÄ? Å Ä«s problÄmas risinÄjums jau ir tas tika ieteikts uz rumbas.
PostgreSQL loÄ£iskÄ replikÄcija nÄk palÄ«gÄ. TomÄr mÄs nerunÄsim par to, kÄ izveidot publikÄcijas un abonementus, jo... mÅ«su plÄns bija fiasko.
Fakts ir tÄds, ka datu bÄzÄ bija vairÄkas ielÄdÄtas tabulas ar miljoniem rindu, kuras turklÄt tika pastÄvÄ«gi papildinÄtas un dzÄstas. VienkÄrÅ”s abonements Ń copy_data, kad jaunÄ replika kopÄ visu saturu no galvenÄ, tÄ vienkÄrÅ”i nevar sekot meistaram. Satura kopÄÅ”ana darbojÄs nedÄļu, bet nekad nesasniedza meistaru. Galu galÄ tas man palÄ«dzÄja atrisinÄt problÄmu raksts kolÄÄ£i no Avito: varat pÄrsÅ«tÄ«t datus, izmantojot pg_dump. Es aprakstÄ«Å”u mÅ«su (nedaudz pÄrveidoto) Ŕī algoritma versiju.
Ideja ir tÄda, ka varat izveidot atspÄjotu abonementu, kas saistÄ«ts ar konkrÄtu replikÄcijas slotu, un pÄc tam labot darÄ«juma numuru. RažoÅ”anas darbam bija pieejamas kopijas. Tas ir svarÄ«gi, jo kopija palÄ«dzÄs izveidot konsekventu izgÄztuvi un turpinÄs saÅemt izmaiÅas no galvenÄ.
TurpmÄkajÄs komandÄs, kas apraksta migrÄcijas procesu, tiks izmantoti Å”Ädi resursdatora apzÄ«mÄjumi:
Pateicoties Å”im plÄnam, pÄrslÄgÅ”anÄs notika ar minimÄlu kavÄÅ”anos.
SecinÄjums
Kubernetes operatori ļauj vienkÄrÅ”ot dažÄdas darbÄ«bas, reducÄjot tÄs lÄ«dz K8s resursu izveidei. TaÄu, panÄkot ievÄrojamu automatizÄciju ar viÅu palÄ«dzÄ«bu, der atcerÄties, ka tÄ var nest arÄ« vairÄkas negaidÄ«tas nianses, tÄpÄc operatorus izvÄlieties saprÄtÄ«gi.
Å emot vÄrÄ trÄ«s populÄrÄkos PostgreSQL Kubernetes operatorus, mÄs izvÄlÄjÄmies Zalando projektu. Un ar to mums bija jÄpÄrvar zinÄmas grÅ«tÄ«bas, taÄu rezultÄts bija patieÅ”Äm iepriecinoÅ”s, tÄpÄc plÄnojam Å”o pieredzi paplaÅ”inÄt arÄ« uz dažÄm citÄm PgSQL instalÄcijÄm. Ja jums ir pieredze lÄ«dzÄ«gu risinÄjumu izmantoÅ”anÄ, mÄs ar prieku redzÄsim sÄ«kÄku informÄciju komentÄros!