Ngokukhula, amaklayenti athola lezi zicelo ezilandelayo: “Siyifuna njenge-Amazon RDS, kodwa eshibhile”; "Siyifuna njenge-RDS, kodwa yonke indawo, kunoma iyiphi ingqalasizinda." Ukuze sisebenzise isisombululo esinjalo esiphethwe ku-Kubernetes, sibheke isimo samanje sama-opharetha aziwa kakhulu e-PostgreSQL (i-Stolon, ama-opharetha avela ku-Crunchy Data kanye ne-Zalando) futhi senza ukukhetha kwethu.
Lesi sihloko isipiliyoni esisizuzile kokubili ngokombono wethiyori (ukubuyekezwa kwezixazululo) kanye nasohlangothini olusebenzayo (lokho okukhethiwe nalokho okuvela kukho). Kodwa okokuqala, ake sinqume ukuthi yiziphi izidingo ezijwayelekile zokushintshwa okungaba khona kwe-RDS...
Yini i-RDS
Lapho abantu bekhuluma nge-RDS, kokuhlangenwe nakho kwethu, basho insiza ephethwe ye-DBMS ethi:
- kulula ukumisa;
- inamandla okusebenza ngezifinyezo futhi ibuyisele kusuka kuzo (okungcono ngokusekelwa
I-PITR ); - ikuvumela ukuthi udale ama-topology we-master-slave;
- inohlu olucebile lwezandiso;
- inikeza ukuhlolwa kwamabhuku kanye nokuphathwa kokufinyelela komsebenzisi.
Ngokuvamile, izindlela zokusebenzisa umsebenzi osuwenziwa zingahluka kakhulu, kodwa indlela enemibandela ethi Ansible ayisondele kithi. (Ozakwethu abavela ku-2GIS bafike esiphethweni esifanayo ngenxa yalokho
Ama-operators ayindlela evamile yokuxazulula izinkinga ezifanayo ku-ecosystem ye-Kubernetes. Umqondisi wezobuchwepheshe we-"Flanta" usekhulume kabanzi mayelana nabo mayelana nedathabhethi eyethulwe ngaphakathi kwe-Kubernetes.
NB: Ukuze udale ngokushesha ama-opharetha alula, sincoma ukuthi unake insiza yethu Yomthombo Ovulekile
Kunabasebenzisi abambalwa abadumile be-K8s be-PostgreSQL:
- Stolon;
- I-Crunchy Data PostgreSQL Operator;
- I-Zalando Postgres Operator.
Ake sibheke kubo eduze.
Ukukhetha opharetha
Ngaphezu kwezici ezibalulekile esezishiwo ngenhla, thina - njengonjiniyela bokusebenza kwengqalasizinda yakwaKubernetes - siphinde salindela okulandelayo kubaqhubi:
- ukuthunyelwa kusuka ku-Git kanye ne
Izinsiza Ngokwezifiso ; - ukwesekwa kwe-pod anti-affinity;
- ukufaka i-node affinity noma isikhethi se-node;
- ukufakwa kokubekezelelana;
- ukutholakala kwamakhono okushuna;
- ubuchwepheshe obuqondakalayo ngisho nemiyalo.
Ngaphandle kokungena emininingwaneni yephuzu ngalinye (buza kumazwana uma usenemibuzo ngawo ngemuva kokufunda yonke indatshana), ngizophawula ngokujwayelekile ukuthi le mingcele iyadingeka ukuze kuchazwe ngokunembe kakhudlwana ukukhethekile kwama-cluster node ukuze zi-ode ngezinhlelo zokusebenza ezithile. Ngale ndlela singakwazi ukuzuza ibhalansi efanele ngokusebenza nezindleko.
Manje ake sidlulele kuma-opharetha we-PostgreSQL ngokwabo.
1. Stolon
Ngempela, uStolon uyisibonelo esihle kakhulu sezakhiwo ezicatshangelwayo:
Idivayisi yalo opharetha ingatholakala ngokuningiliziwe embikweni noma
Nokho, Stolon stolonctl
, ukusetshenziswa kwenziwa ngeshadi le-Helm, futhi okungokwezifiso kuyachazwa futhi kucaciswe ku-ConfigMap.
Ngakolunye uhlangothi, kuvela ukuthi u-opharetha akayena ngempela u-opharetha (ngemuva kwakho konke, akasebenzisi i-CRD). Kodwa ngakolunye uhlangothi, iwuhlelo oluguquguqukayo olukuvumela ukuthi ulungiselele izinsiza kuma-K8 njengoba ubona kufanelekile.
Ukufingqa, kithina uqobo akuzange kubonakale kukuhle kakhulu ukwakha ishadi elihlukile lesizindalwazi ngasinye. Ngakho-ke, saqala ukufuna ezinye izindlela.
2. I-Crunchy Data PostgreSQL Operator
Ukwakhiwa kwe-Crunchy Data PostgreSQL Operator nakho kuhlangabezana nezidingo ezishiwo:
Ukuphathwa kwenzeka ngosizo pgo
, nokho, yona ikhiqiza Izisetshenziswa Zangokwezifiso ze-Kubernetes. Ngakho-ke, u-opharetha usithokozisile njengabasebenzisi abangaba:
- kukhona ukulawula nge-CRD;
- ukuphathwa komsebenzisi okulula (futhi nge-CRD);
- ukuhlanganiswa nezinye izingxenye
I-Crunchy Data Container Suite - iqoqo elikhethekile lezithombe zeziqukathi ze-PostgreSQL nezinsiza zokusebenza nazo (okuhlanganisa i-pgBackRest, i-pgAudit, izandiso ezivela ku-contrib, njll.).
Kodwa-ke, imizamo yokuqala ukusebenzisa i-opharetha evela ku-Crunchy Data iveze izinkinga ezimbalwa:
- Kwakungekho nokwenzeka kokubekezelela - i-nodeSelector kuphela enikeziwe.
- Ama-pods adaliwe abeyingxenye Yokuthunyelwa, ngaphandle kokuthi sithumele isicelo esisezingeni eliphezulu. Ngokungafani ne-StatefulSets, Ukuthunyelwa akukwazi ukudala amadiski.
Umphumela wokugcina uholela ezikhathini ezihlekisayo: endaweni yokuhlola sikwazile ukusebenzisa ama-replicas ama-3 ngediski eyodwa isitoreji sendawo, okwenza isisebenzisi sibike ukuthi izifaniso ezi-3 bezisebenza (nakuba bezingasebenzi).
Esinye isici salo opharetha ukuhlanganiswa kwayo okulungele okwenziwe nezinhlelo ezihlukahlukene zokusekela. Isibonelo, kulula ukufaka i-pgAdmin ne-pgBounce, futhi ku
Kodwa-ke, ukukhetha okungajwayelekile kwezinsiza ezikhiqizwe yi-Kubernetes kusiholele esidingweni sokuthola isisombululo esihlukile.
3. I-Operator ye-Zalando Postgres
Sesiyazi imikhiqizo ye-Zalando isikhathi eside: sinolwazi lokusebenzisa i-Zalenium futhi, kunjalo, sizamile
Lesi yisixazululo esincane kunazo zonke okuxoxwe ngaso esihlokweni: ukukhululwa kokuqala kwenzeka ngo-August 2018. Kodwa-ke, naphezu kwenani elincane lokukhishwa okusemthethweni, iphrojekthi ihambe ibanga elide, isivele idlula ukuthandwa kwesixazululo esivela ku-Crunchy Data enezinkanyezi ezingu-1300+ ku-GitHub kanye nenani eliphezulu labanikeli (70+).
"Ngaphansi kwe-hood" lo opharetha usebenzisa izixazululo ezihlolwe isikhathi:
- Patroni kanye
Spilo Ukushayela, -
WAL-E - ama-backups, -
I-PgBouncer - njengechibi lokuxhumana.
Nansi indlela ukwakhiwa kwe-opharetha evela ku-Zalando okwethulwa ngayo:
Umsebenzisi uphathwa ngokugcwele nge-Custom Resources, udala ngokuzenzakalelayo i-StatefulSet esuka ezitsheni, engase yenziwe ngendlela oyifisayo ngokwengeza ama-sidecars ahlukahlukene ku-pod. Konke lokhu kuyinzuzo enkulu uma kuqhathaniswa nomsebenzisi ovela ku-Crunchy Data.
Njengoba sikhethe isisombululo ku-Zalando phakathi kwezinketho ezi-3 ezicatshangelwayo, incazelo eyengeziwe yamakhono ayo izokwethulwa ngezansi, ngokushesha kanye nomkhuba wokufaka isicelo.
Zijwayeze ne-Postgres Operator evela e-Zalando
Ukuthunyelwa komsebenzisi kulula kakhulu: vele ulande ukukhululwa kwamanje ku-GitHub bese usebenzisa amafayela e-YAML ohlwini lwemibhalo.
Ngemva kokufaka, kufanele ukhathazeke ngokusetha postgres-operator
endaweni yamagama lapho ofake khona u-opharetha. Uma amakhosombe eselungisiwe, ungakwazi ukusebenzisa iqoqo lakho lokuqala le-PostgreSQL.
Isibonelo, ukuthunyelwa kwethu okujwayelekile kubukeka kanjena:
apiVersion: acid.zalan.do/v1
kind: postgresql
metadata:
name: staging-db
spec:
numberOfInstances: 3
patroni:
synchronous_mode: true
postgresql:
version: "12"
resources:
limits:
cpu: 100m
memory: 1Gi
requests:
cpu: 100m
memory: 1Gi
sidecars:
- env:
- name: DATA_SOURCE_URI
value: 127.0.0.1:5432
- name: DATA_SOURCE_PASS
valueFrom:
secretKeyRef:
key: password
name: postgres.staging-db.credentials
- name: DATA_SOURCE_USER
value: postgres
image: wrouesnel/postgres_exporter
name: prometheus-exporter
resources:
limits:
cpu: 500m
memory: 100Mi
requests:
cpu: 100m
memory: 100Mi
teamId: staging
volume:
size: 2Gi
Le-manifest isebenzisa iqoqo lezimo ezi-3 ezine-sidecar efomini
Kuyafaneleka ukunaka iphaneli yokuphatha iwebhu -
Uhlu lwamaqoqo e-PostgreSQL
Ukuphathwa kwekhophi yasenqolobaneni
Esinye isici esithakazelisayo ukusekela
Izinkinga nezisombululo
Kodwa-ke, ukusetshenziswa kwe-opharetha ngokushesha kwembula ukushiyeka okuningana okubalulekile:
- ukuntuleka kwe-nodeSelector ukwesekwa;
- ukungakwazi ukukhubaza ama-backups;
- uma usebenzisa umsebenzi wokudala isizindalwazi, amalungelo azenzakalelayo awaveli;
- Kwesinye isikhathi amadokhumenti ayashoda noma aphelelwe yisikhathi.
Ngenhlanhla, eziningi zazo zingaxazululwa. Ake siqale kusukela ekugcineni - izinkinga nge imibhalo.
Kungenzeka ukuthi uzohlangana neqiniso lokuthi akucaci ngaso sonke isikhathi ukuthi ungabhalisa kanjani isipele nokuthi ungaxhuma kanjani ibhakede eliyisipele ku-UI ye-Operator. Imibhalo ikhuluma ngalokhu ngokuhamba kwesikhathi, kodwa incazelo yangempela ingaphakathi
- isidingo sokwenza imfihlo;
- idlulisele ku-opharetha njengepharamitha
pod_environment_secret_name
ku-CRD enezilungiselelo zika-opharetha noma ku-ConfigMap (kuya ngokuthi unquma kanjani ukufaka u-opharetha).
Nokho, njengoba kuvela, lokhu okwamanje akunakwenzeka. Yingakho siqoqile
Uma udlulisela imingcele yokwenza isipele ku-opharetha, okungukuthi - wal_s3_bucket
kanye nokhiye wokufinyelela ku-AWS S3, bese kuba izosekela yonke into: hhayi kuphela izisekelo ekukhiqizeni, kodwa futhi isiteji. Lokhu akusifanelanga.
Encazelweni yamapharamitha we-Spilo, okuyi-Docker wrapper eyisisekelo ye-PgSQL uma usebenzisa opharetha, kuvele ukuthi: ungadlula ipharamitha. WAL_S3_BUCKET
ayinalutho, ngaleyo ndlela ikhubaza izipele. Ngaphezu kwalokho, ngathola injabulo enkulu enableWALArchiving: false
kusisetshenziswa seqoqo le-PostgreSQL.
Yebo, bekunethuba lokukwenza ngokuhlukile ngokusebenzisa ama-opharetha angu-2: eyodwa yesiteji (ngaphandle kwama-backups), neyesibili yokukhiqiza. Kodwa sakwazi ukwenza ngeyodwa.
Kulungile, sifunde ukudlulisa ukufinyelela kuzinqolobane ze-S3 futhi izipele zaqala ukungena kwisitoreji. Uwenza kanjani amakhasi ayisipele asebenze ku-Operator UI?
Uzodinga ukungeza okuguquguqukayo okungu-3 ku-Operator UI:
-
SPILO_S3_BACKUP_BUCKET
-
AWS_ACCESS_KEY_ID
-
AWS_SECRET_ACCESS_KEY
Ngemuva kwalokhu, ukuphathwa kwama-backups kuzotholakala, kithina kuzokwenza umsebenzi ube lula ngesiteji, okusivumela ukuthi silethe izingcezu zokukhiqiza lapho ngaphandle kwemibhalo eyengeziwe.
Enye inzuzo bekuwumsebenzi ne-Team API kanye namathuba amaningi okudala imininingwane yolwazi nezindima kusetshenziswa amathuluzi okusebenza. Nokho, okudaliwe izindima zazingenawo amalungelo ngokuzenzakalelayo. Ngokufanelekile, umsebenzisi onamalungelo okufunda akakwazanga ukufunda amathebula amasha.
Kungani kunjalo? Naphezu kweqiniso lokuthi kukhodi GRANT
, azisetshenziswa njalo. Kunezindlela ezi-2: syncPreparedDatabases
и syncDatabases
. I syncPreparedDatabases
- naphezu kweqiniso lokuthi esigabeni preparedDatabases
defaultRoles
и defaultUsers
ukudala izindima, amalungelo azenzakalelayo awasetshenziswa. Sisezinhlelweni zokulungisa isiqeshana ukuze la malungelo asebenze ngokuzenzakalelayo.
Futhi iphuzu lokugcina ekuthuthukisweni okubalulekile kithi -
Kwenzenjani?
Ngokusekelwe emiphumeleni yokuxazulula izinkinga ezingenhla, sifake i-Postgres Operator kusuka ku-Zalando
Uhlu lwama-PRs amukelwa kumfoloko:
ukwakha isithombe esivikelekile esingasindi somsebenzisi ku-Docker ;ikhubaza izipele ;ibuyekeza izinguqulo zezinsiza zezinguqulo zamanje ze-k8s ;ukuqaliswa kwe-Node Affinity .
Kuyoba kuhle uma umphakathi usekela lawa ma-PRs ukuze akhuphukele phezulu nenguqulo elandelayo yesisebenzisi (1.6).
Ibhonasi! Indaba yempumelelo yokufuduka kokukhiqiza
Uma usebenzisa i-Patroni, ukukhiqizwa okubukhoma kungathuthelwa ku-opharetha ngesikhathi sokuphumula esincane.
I-Spilo ikuvumela ukuthi udale amaqoqo alindile ngesitoreji se-S3 nge
Ukuphindaphinda okunengqondo kwe-PostgreSQL kuyasiza. Kodwa-ke, ngeke singene emininingwaneni mayelana nendlela yokudala ukushicilelwa nokubhaliselwe, ngoba ... uhlelo lwethu lwaluyi-fiasco.
Iqiniso liwukuthi i-database yayinamathebula amaningana alayishiwe anezigidi zemigqa, okuthe, ngaphezu kwalokho, ayehlale egcwaliswa futhi esuswa. copy_data
, lapho isifaniso esisha sikopisha konke okuqukethwe okuvela ku-master, asikwazi ukuhambisana nokuyinhloko. Ukukopisha okuqukethwe kusebenze isonto lonke, kodwa akuzange kubanjwe uchwepheshe. Ekugcineni, kwangisiza ukuxazulula inkinga pg_dump
. Ngizochaza inguqulo yethu (elungiswe kancane) yale algorithm.
Umbono wukuthi ungenza ukubhalisa okukhubazekile okuboshelwe endaweni ethile yokuphindaphinda, bese ulungisa inombolo yokwenziwe. Kwakukhona izifaniso ezitholakalayo zomsebenzi wokukhiqiza. Lokhu kubalulekile ngoba isifaniso sizosiza ekudaleni ukulahlwa okungaguquki futhi siqhubeke nokuthola izinguquko ezivela kumphathi.
Imiyalo elandelayo echaza inqubo yokufuduka izosebenzisa lezi zimpawu zosokhaya ezilandelayo:
- master - iseva yomthombo;
- isifaniso1 - isifaniso sokusakaza emkhiqizweni omdala;
- isifaniso2 - ikhophi entsha enengqondo.
Uhlelo lokufuduka
1. Dala okubhaliselwe ku-master wawo wonke amathebula ku-schema public
isisekelo dbname
:
psql -h master -d dbname -c "CREATE PUBLICATION dbname FOR ALL TABLES;"
2. Dala i-slot yokuphindaphinda ku-master:
psql -h master -c "select pg_create_logical_replication_slot('repl', 'pgoutput');"
3. Misa ukuphindaphinda esifanekisweni esidala:
psql -h replica1 -c "select pg_wal_replay_pause();"
4. Thola inombolo yokwenziwayo kumphathi:
psql -h master -c "select replay_lsn from pg_stat_replication where client_addr = 'replica1';"
5. Susa okulahlwayo kumfanekiso omdala. Sizokwenza lokhu ngemicu eminingi, ezosiza ukusheshisa inqubo:
pg_dump -h replica1 --no-publications --no-subscriptions -O -C -F d -j 8 -f dump/ dbname
6. Layisha ukulahlwa kuseva entsha:
pg_restore -h replica2 -F d -j 8 -d dbname dump/
7. Ngemva kokulanda okulahlwayo, ungaqala ukuphindaphinda emfanekisweni wokusakaza-bukhoma:
psql -h replica1 -c "select pg_wal_replay_resume();"
7. Masidale ukubhalisa kusifaniso esisha esinengqondo:
psql -h replica2 -c "create subscription oldprod connection 'host=replica1 port=5432 user=postgres password=secret dbname=dbname' publication dbname with (enabled = false, create_slot = false, copy_data = false, slot_name='repl');"
8. Masithole oid
okubhaliselwe:
psql -h replica2 -d dbname -c "select oid, * from pg_subscription;"
9. Ake sithi yamukelwe oid=1000
. Masisebenzise inombolo yokwenziwe kokubhaliselwe:
psql -h replica2 -d dbname -c "select pg_replication_origin_advance('pg_1000', 'AA/AAAAAAAA');"
10. Ake siqale ukuphindaphinda:
psql -h replica2 -d dbname -c "alter subscription oldprod enable;"
11. Hlola isimo sokubhalisa, ukuphindaphinda kufanele kusebenze:
psql -h replica2 -d dbname -c "select * from pg_replication_origin_status;"
psql -h master -d dbname -c "select slot_name, restart_lsn, confirmed_flush_lsn from pg_replication_slots;"
12. Ngemuva kokuthi ukuphindaphinda sekuqalisiwe futhi imininingwane yolwazi ivumelanisiwe, ungashintsha.
13. Ngemva kokukhubaza ukuphindaphinda, udinga ukulungisa ukulandelana. Lokhu kuchazwe kahle
Ngenxa yalolu hlelo, ukushintshwa kwenzeke ngokubambezeleka okuncane.
isiphetho
Ama-opharetha e-Kubernetes akuvumela ukuthi wenze lula izenzo ezihlukahlukene ngokuzehlisela ekwakhiweni kwezinsiza ze-K8s. Kodwa-ke, ngokuzuza okuzenzakalelayo okumangalisayo ngosizo lwabo, kufanelekile ukukhumbula ukuthi kungaletha nenani lama-nuances angalindelekile, ngakho-ke khetha opharetha bakho ngokuhlakanipha.
Ngemva kokucabangela opharetha abathathu abadume kakhulu be-Kubernetes be-PostgreSQL, sikhethe iphrojekthi ku-Zalando. Futhi bekufanele sinqobe ubunzima obuthile ngakho, kodwa umphumela wawujabulisa ngempela, ngakho-ke sihlela ukunweba lokhu okuhlangenwe nakho kokunye ukufakwa kwe-PgSQL. Uma unolwazi lokusebenzisa izixazululo ezifanayo, sizojabula ukubona imininingwane kumazwana!
PS
Funda futhi kubhulogi yethu:
- «
Imininingo egciniwe kanye ne-Kubernetes (isibuyekezo kanye nombiko wevidiyo) "; - «
I-Postgres ULwesibili #5: I-PostgreSQL ne-Kubernetes. CI/CD. Hlola okuzenzakalelayo "; - «
Indaba eyodwa no-opharetha we-Redis kuma-K8 kanye nokubuyekezwa okuncane kwezinsiza zokuhlaziya idatha evela kulesi sizindalwazi. ".
Source: www.habr.com