{"id":95322,"date":"2020-09-28T07:42:39","date_gmt":"2020-09-28T05:42:39","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kratkij-obzor-operatorov-postgresql-dlya-kubernetes-nash-vybor-i-opyt"},"modified":"2020-09-28T07:42:39","modified_gmt":"2020-09-28T05:42:39","slug":"kratkij-obzor-operatorov-postgresql-dlya-kubernetes-nash-vybor-i-opyt","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kratkij-obzor-operatorov-postgresql-dlya-kubernetes-nash-vybor-i-opyt","title":{"rendered":"L\u00fchike \u00fclevaade PostgreSQL operaatoritest Kuberneteses, meie valik ja kogemus","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"L\u00fchike \u00fclevaade PostgreSQL operaatoritest Kuberneteses, meie valik ja kogemus\" src=\"\/wp-content\/uploads\/2020\/09\/23b2db49941fa5bd5000358c8ffb991b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKliendid k\u00fcsivad \u00fcha enam: \u201eSoovime nagu Amazon RDS, aga odavamalt\u201c; \u201eSoovime nagu RDS, aga igas infrastruktuuris\u201c. Sellise hallatud lahenduse rakendamiseks Kuberneteses vaatasime \u00fcle k\u00f5ige populaarsemate PostgreSQL operaatorite (Stolon, Crunchy Data ja Zalando operaatorid) hetkeolukorra ja tegime oma valiku.<\/p>\n<p>See artikkel on meie saadud kogemus nii teoreetilisest k\u00fcljest (lahenduste \u00fclevaade) kui ka praktilisest k\u00fcljest (mida valiti ja kuidas see v\u00e4lja kukkus). Kuid k\u00f5igepealt leiame v\u00e4lja, millised n\u00f5uded esitatakse v\u00f5imaliku RDS asendaja suhtes...<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Mis on RDS?<\/h2>\n<p>\nKui inimesed r\u00e4\u00e4givad RDS-ist, siis meie kogemuse j\u00e4rgi m\u00f5istetakse hallatavat (managed) andmebaasi teenust, mis:<\/p>\n<ol>\n<li>on lihtsalt seadistatav;<\/li>\n<li>ilma snapshot'ide toeta, mille abil taastuda (soovitatavalt \u2014 toetades <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Point-in-time_recovery\">PITR<\/a><\/noindex>);<\/li>\n<li>v\u00f5ib luua master-slave topoloogiaid;<\/li>\n<li>on rikkalik laiendite loetelu;<\/li>\n<li>pakub kasutus\u00f5iguste ja halduste auditit.<\/li>\n<\/ol>\n<p>\nKui r\u00e4\u00e4kida \u00fcldiselt, siis l\u00e4henemisviisid seatud \u00fclesande t\u00e4itmiseks v\u00f5ivad olla \u00fcsna erinevad, kuid Ansible'i tee ei ole meile l\u00e4henev. (Sarnasele j\u00e4reldusele j\u00f5udsid ka meie kolleegid 2GIS-ist p\u00e4rast <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/509926\/\">oma katset<\/a><\/noindex> luua \u201evahend kiireks tornaadoresistentse Postgresi klastrisse paigaldamiseks\u201c.)<\/p>\n<p>Just operaatorid on levinud l\u00e4henemine sarnaste probleemide lahendamiseks Kubernetes \u00f6kos\u00fcsteemis. R\u00e4\u00e4kisime nende rakendamisest andmebaaside kontekstis, mida k\u00e4ivitatakse Kuberneteses, tehnilise direktor \u201eFlantast\u201c <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/distol\/\" class=\"user_link\">distol<\/a><\/noindex>, in <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/431500\/\">oma ettekandes<\/a><\/noindex>.<\/p>\n<p><i><strong>NB<\/strong><\/i><i>: Kiireks ja lihtsate operaatorite loomiseks soovitame t\u00e4helepanu p\u00f6\u00f6rata meie Open Source utiliidile <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/shell-operator\"><i>shell-operator<\/i><\/a><\/noindex><i>. Selle abil on v\u00f5imalik seda teha ilma Go teadmisteta ja s\u00fcsteemi administraatoritele tuttavamate meetoditega: Bash, Python jne.<\/i><\/p>\n<p>PostgreSQL-i jaoks on m\u00f5ned populaarsed K8s operaatorid:<\/p>\n<ul>\n<li>Stolon;<\/li>\n<li>Crunchy Data PostgreSQL Operator;<\/li>\n<li>Zalando Postgres Operator.<\/li>\n<\/ul>\n<p>\nVaadakem neid l\u00e4hemalt.<\/p>\n<h2>Operaatori valik<\/h2>\n<p>\nPeale nende oluliste v\u00f5imaluste, millest juba varem r\u00e4\u00e4giti, ootasime me \u2014 Kubernetes infrastruktuurihalduriteks \u2014 operaatoritelt ka j\u00e4rgmist:<\/p>\n<ul>\n<li> deploeerimist Gitist ja <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/extend-kubernetes\/operator\/#deploying-operators\">Custom Resources<\/a><\/noindex>;<\/li>\n<li> pod anti-affinity toetust;<\/li>\n<li> node affinity v\u00f5i node selector seadistamist;<\/li>\n<li> tolerations seadistamist;<\/li>\n<li> h\u00e4\u00e4lestamisv\u00f5imaluste olemasolu;<\/li>\n<li> selged tehnoloogiad ja isegi k\u00e4sud.<\/li>\n<\/ul>\n<p>\nS\u00fcviti detaile igast punktist (k\u00fcsige kommentaarides, kui teil j\u00e4\u00e4b p\u00e4rast artikli lugemist veel k\u00fcsimusi), m\u00e4rgin \u00fcldiselt, et need parameetrid on vajalikud klastrite s\u00f5lmede spetsialiseerimise t\u00e4psemaks kirjeldamiseks, et neid tellida konkreetselt rakenduste jaoks. Nii saame saavutada optimaalset tasakaalu j\u00f5udluse ja hinna osas.<\/p>\n<p>N\u00fc\u00fcd \u2014 PostgreSQL operaatorite juurde.<\/p>\n<h3>1. Stolon<\/h3>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/sorintlab\/stolon\">Stolon<\/a><\/noindex> Itaalia ettev\u00f5ttelt Sorint.lab <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/431500\/\">eelnevalt mainitud ettekandes<\/a><\/noindex> peeti mingisuguseks standardiks andmebaasi operaatorite seas. See on \u00fcsna vana projekt: esimene avalik v\u00e4ljaanne toimus juba novembris 2015(!), ja GitHubi hoidla v\u00f5ib uhkeldada peaaegu 3000 t\u00e4he ja 40+ kaasautorega.<\/p>\n<p>Ja t\u00f5epoolest, Stolon on suurep\u00e4rane n\u00e4ide l\u00e4bim\u00f5eldud arhitektuurist:<\/p>\n<p><img decoding=\"async\" alt=\"L\u00fchike \u00fclevaade PostgreSQL operaatoritest Kuberneteses, meie valik ja kogemus\" src=\"\/wp-content\/uploads\/2020\/09\/a34625c130bfd29c5645cf2417042de2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSelle operaatori seadistamisega saab tutvuda ettekandes v\u00f5i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/sorintlab\/stolon\/blob\/master\/doc\/architecture.md\">projekti dokumentatsioonis<\/a><\/noindex>. \u00dcldiselt v\u00f5ib \u00f6elda, et ta suudab teha k\u00f5ike, mis on kirjas: failover, l\u00e4bipaistva kliendi juurdep\u00e4\u00e4su proksid, varukoopiad... Lisaks pakuvad proksid \u00fchte teeninduspunkti \u2014 erinevalt kahest teisest lahendusest, mida arutatakse edasi (nendel on kaks teenust andmebaasi juurde p\u00e4\u00e4semiseks).<\/p>\n<p>Kuid Stolonil <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/sorintlab\/stolon\/issues\/463#issuecomment-379666733\">pole Custom Resources<\/a><\/noindex>, mis t\u00e4hendab, et seda ei saa deploy'ida nii, et lihtsasti ja kiiresti \u2014 \u201enagu kuumad pirukad\u201c \u2014 luua andmebaasi eksemplare Kuberneteses. Halduse teostab utiliit <code>stolonctl<\/code>, deploy on l\u00e4bi Helm chart'i ja kasutaja m\u00e4\u00e4ratud ressursid m\u00e4\u00e4ratakse ConfigMap'is.<\/p>\n<p>\u00dchelt poolt n\u00e4ib, et operaator ei olegi t\u00f5eline operaator (kuna ta ei kasuta CRD-d). Teiselt poolt on tegemist paindliku s\u00fcsteemiga, mis v\u00f5imaldab ressursse K8s-s seadistada nii, nagu teile sobib.<\/p>\n<p>Kokkuv\u00f5ttes ei tundunud meile optimaalne luua eraldi chart iga andmebaasi jaoks. Seet\u00f5ttu hakkasime otsima alternatiive.<\/p>\n<h3>2. Crunchy Data PostgreSQL Operator<\/h3>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/CrunchyData\/postgres-operator\">Crunchy Data operaator<\/a><\/noindex>, noore Ameerika idufirma, n\u00e4is loogilise alternatiivina. Selle avalik ajalugu algas esimese v\u00e4ljaandega m\u00e4rtsis 2017 ja sellest ajast on GitHubi hoidla saanud v\u00e4hem kui 1300 t\u00e4hte ja 50+ kaasautorit. Viimane v\u00e4ljaanne septembrist on testitud koost\u00f6\u00f6s Kubernetes 1.15\u20141.18, OpenShift 3.11+ ja 4.4+, GKE ja VMware Enterprise PKS 1.3+.<\/p>\n<p>Crunchy Data PostgreSQL Operaatori arhitektuur vastab samuti n\u00f5uetele:<\/p>\n<p><img decoding=\"async\" alt=\"L\u00fchike \u00fclevaade PostgreSQL operaatoritest Kuberneteses, meie valik ja kogemus\" src=\"\/wp-content\/uploads\/2020\/09\/343cd0494abae42fcf5b47c5bb4eb310.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHalduse teostamine toimub utiliidi kaudu <code>pgo<\/code>, kuid see genereerib omakorda Custom Resources Kubernetes'e jaoks. Seet\u00f5ttu r\u00f5\u00f5mustas meid kui potentsiaalseid kasutajaid operaator:<\/p>\n<ul>\n<li> on haldamine l\u00e4bi CRD;<\/li>\n<li> mugav kasutajate haldamine (samuti l\u00e4bi CRD);<\/li>\n<li> integreerimine teiste komponentidega <noindex><a rel=\"nofollow\" href=\"https:\/\/access.crunchydata.com\/documentation\/crunchy-postgres-containers\/4.3.1\/\">Crunchy Data Container Suite<\/a><\/noindex> \u2014 spetsiaalne konteinerite piltide kogum PostgreSQL jaoks ja t\u00f6\u00f6riistad selle kasutamiseks (sealhulgas pgBackRest, pgAudit, laiendused contrib-ist jne).<\/li>\n<\/ul>\n<p>\nSiiski t\u00f5id j\u00f5upingutused Crunchy Data operaatori kasutusele v\u00f5tmisega esile mitmeid probleeme:<\/p>\n<ul>\n<li>Toleratsioonide v\u00f5imalust ei olnud \u2014 ette n\u00e4htud oli vaid nodeSelector.<\/li>\n<li>Loodud pod'id olid osa Deployment'ist, kuigi me juurutame stateful rakendust. Erinevalt StatefulSet'ist ei oska Deployment'id luua kettaid.<\/li>\n<\/ul>\n<p>\nViimane puudus toob v\u00e4lja l\u00f5busaid momente: testkeskkonnas \u00f5nnestus k\u00e4ivitada 3 koopiat \u00fche ketta abil <i>kohalikku salvestust<\/i>, mist\u00f5ttu operaator teatas, et 3 koopiat t\u00f6\u00f6tab (kuigi see polnud t\u00f5si).<\/p>\n<p>Veel \u00fcheks selle operaatori erip\u00e4raks on valmis integratsioon erinevate abis\u00fcsteemidega. N\u00e4iteks on lihtne paigaldada pgAdmin ja pgBounce, ning <noindex><a rel=\"nofollow\" href=\"https:\/\/access.crunchydata.com\/documentation\/postgres-operator\/4.4.0\/installation\/other\/ansible\/installing-metrics\/\">dokumentatsioon<\/a><\/noindex> kaalutakse eelnevalt seadistatud Grafana ja Prometheust. Hiljuti <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/CrunchyData\/postgres-operator\/releases\/tag\/v4.5.0-beta.1\">v\u00e4lja antud versioonis 4.5.0-beta1<\/a><\/noindex> toodud v\u00e4lja t\u00e4iustatud integratsioon projekti <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/CrunchyData\/pgmonitor\">pgMonitor<\/a><\/noindex>, t\u00e4nu millele operaator pakub visuaalset statistikat PgSQL \u00fcle vaate \u201ekarbist v\u00e4lja\u201c.<\/p>\n<p>Sellegipoolest viis kummaline valik genereeritud Kubernetes'e ressurssidest meid vajadusele leida teine lahendus.<\/p>\n<h3>3. Zalando Postgres Operaator<\/h3>\n<p>\nZalando tooted on meile juba pikka aega tuttavad: meil on kogemus Zalenium'i kasutamisest ja muidugi proovisin me ka <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/patroni\">Patronit<\/a><\/noindex> \u2014 nende populaarne HA-lahendus PostgreSQL jaoks. Ettev\u00f5tte l\u00e4henemisest <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\">Postgres Operaatori<\/a><\/noindex> r\u00e4\u00e4kis \u00fcks selle autoritest \u2014 Alexey Klyukin \u2014 saates <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/479438\/\">Postgres-teisip\u00e4ev \u21165<\/a><\/noindex>, ja see meeldis meile.<\/p>\n<p>See on artiklis k\u00e4sitletud noorim lahendus: esimene v\u00e4ljaanne toimus 2018. aasta augustis. Siiski, hoolimata v\u00e4ikesest ametlikest v\u00e4ljaannetest, on projekt teinud suuri edusamme, edestades juba Crunchy Data lahendust, millel on \u00fcle 1300 t\u00e4he GitHub'is ja maksimaalne panustajate arv (\u00fcle 70).<\/p>\n<p>Selle operaatori \u201ekapoti all\u201c on ajaliselt t\u00f5estatud lahendused:<\/p>\n<ul>\n<li> Patroni ja <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/spilo\">Spilo<\/a><\/noindex> halduseks,<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wal-e\/wal-e\">WAL-E<\/a><\/noindex> varukoopiate jaoks,<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pgbouncer\/pgbouncer\">PgBouncer<\/a><\/noindex> \u00fchenduste basena.<\/li>\n<\/ul>\n<p>\nSiit on esitatud Zalando operaatori arhitektuur:<\/p>\n<p><img decoding=\"async\" alt=\"L\u00fchike \u00fclevaade PostgreSQL operaatoritest Kuberneteses, meie valik ja kogemus\" src=\"\/wp-content\/uploads\/2020\/09\/c66f10c1a818592ecaacd2db4ce5ace5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOperaatorit hallatakse t\u00e4ielikult Custom Resources kaudu, see loob automaatselt StatefulSet'i konteineritest, mida saab kohandada, lisades pod'ile erinevaid sidecar'e. K\u00f5ik see on oluline eelis v\u00f5rreldes Crunchy Data operaatoriga.<\/p>\n<p>Kuna just Zalando lahendus valiti kolmest kaalutud variandist, on allpool esitatud rohkem teavet selle v\u00f5imaluste kohta koos rakenduse praktikaga.<\/p>\n<h2>Zalando Postgres Operaatori praktika<\/h2>\n<p>\nOperaatori juurutamine toimub v\u00e4ga lihtsalt: piisab, kui laadida alla uusim versioon GitHub'ist ja rakendada YAML-failid katalogist. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/tree\/master\/manifests\">manifests<\/a><\/noindex>. Teise v\u00f5imalusena saab kasutada ka <noindex><a rel=\"nofollow\" href=\"https:\/\/operatorhub.io\/operator\/postgres-operator\">OperatorHub<\/a><\/noindex>.<\/p>\n<p>P\u00e4rast paigaldamist tuleks hoolitseda <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/blob\/master\/docs\/reference\/operator_parameters.md#aws-or-gcp-interaction\">logide ja varukoopiate salvestusruumide seadistamise eest<\/a><\/noindex>. See toimub ConfigMap kaudu <code>postgres-operator<\/code> nimetamiseks, kuhu operaator paigaldati. Kui salvestusruumid on seadistatud, saab juurutada esimese PostgreSQL klastri.<\/p>\n<p>N\u00e4iteks n\u00e4eb meie standardne juurutamine v\u00e4lja j\u00e4rgmine:<\/p>\n<pre><code class=\"plaintext\">apiVersion: acid.zalan.do\/v1\nkind: postgresql\nmetadata:\n name: staging-db\nspec:\n numberOfInstances: 3\n patroni:\n   synchronous_mode: true\n postgresql:\n   version: \"12\"\n resources:\n   limits:\n     cpu: 100m\n     memory: 1Gi\n   requests:\n     cpu: 100m\n     memory: 1Gi\n sidecars:\n - env:\n   - name: DATA_SOURCE_URI\n     value: 127.0.0.1:5432\n   - name: DATA_SOURCE_PASS\n     valueFrom:\n       secretKeyRef:\n         key: password\n         name: postgres.staging-db.credentials\n   - name: DATA_SOURCE_USER\n     value: postgres\n   image: wrouesnel\/postgres_exporter\n   name: prometheus-exporter\n   resources:\n     limits:\n       cpu: 500m\n       memory: 100Mi\n     requests:\n       cpu: 100m\n       memory: 100Mi\n teamId: staging\n volume:\n   size: 2Gi\n<\/code><\/pre>\n<p>\nSee manifest juurutab 3 eksemplari klastrit koos sidecar'iga <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wrouesnel\/postgres_exporter\">postgres_exporter<\/a><\/noindex>, mille kaudu kogume rakenduse m\u00f5\u00f5tmeid. Nagu n\u00e4ete, on k\u00f5ik v\u00e4ga lihtne ja soovi korral saab luua peaaegu piiramatu arvu klastreid.<\/p>\n<p>Tasub t\u00e4helepanu p\u00f6\u00f6rata ka <b>administratiivsele veebipaneelile<\/b> \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/blob\/master\/docs\/operator-ui.md\">postgres-operator-ui<\/a><\/noindex>. See tuleb koos operaatoriga ja v\u00f5imaldab luua ja eemaldada klastreid ning t\u00f6\u00f6tada varukoopiate kallal, mida operaator loob.<\/p>\n<p><img decoding=\"async\" alt=\"L\u00fchike \u00fclevaade PostgreSQL operaatoritest Kuberneteses, meie valik ja kogemus\" src=\"\/wp-content\/uploads\/2020\/09\/2e9ae033a9817d101c843ce061aafdb5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>PostgreSQL klastrite nimekiri<\/i><\/p>\n<p><img decoding=\"async\" alt=\"L\u00fchike \u00fclevaade PostgreSQL operaatoritest Kuberneteses, meie valik ja kogemus\" src=\"\/wp-content\/uploads\/2020\/09\/74a65f7f301da14a0cb7bea6d5ef84ec.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Varude haldamine<\/i><\/p>\n<p>Teine huvitav omadus on <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/blob\/master\/docs\/user.md#teams-api-roles\">Teams API<\/a><\/noindex>. See mehhanism loob automaatselt <b>rollid PostgreSQL-is<\/b>, l\u00e4htudes saadud kasutajate nimede loendist. P\u00e4rast seda v\u00f5imaldab API esitada kasutajate loendi, kellele luuakse automaatselt rollid.<\/p>\n<h3>Probleemid ja nende lahendamine<\/h3>\n<p>\nKuid operaatori kasutamine t\u00f5i peagi esile mitmeid olulisi puudusi:<\/p>\n<ol>\n<li> nodeSelectori toe puudumine;<\/li>\n<li> varukoopiate keelamise v\u00f5imatuse;<\/li>\n<li> andmebaaside loomise funktsiooni kasutamisel ei anta vaikimisi \u00f5igusi;<\/li>\n<li> vahel puudub dokumentatsioon v\u00f5i on see aegunud.<\/li>\n<\/ol>\n<p>\n\u00d5nneks on paljud neist lahendatavad. Alustame l\u00f5pust - probleemidega <strong>Microsofti dokumentatsioonile. Ainus t\u00e4helepanek \u2014 Ubuntu distributsiooni oleme juba alla laadinud ja installime selle j\u00e4rgmises etapis. Peaaegu kogu seadistamine seisneb Windowsi Linuxi alams\u00fcsteemi ja Virtuaalmasinate platvormi t\u00e4iendavate komponentide lubamises ning seej\u00e4rel arvuti seadete muutuste rakendamiseks taask\u00e4ivitamises:<\/strong>. <\/p>\n<p>T\u00f5en\u00e4oliselt kohtub te sellega, et pole alati selge, kuidas m\u00e4\u00e4rata varukoopi ja kuidas \u00fchendada varukoopia mahuti Operator UI-ga. Dokumentatsioon k\u00e4sitleb seda pinnapealselt, reaalsed kirjeldused on <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/pull\/481\">PR<\/a><\/noindex>:<\/p>\n<ol>\n<li>saladus tuleb teha;<\/li>\n<li>edastada see operaatorile parameetri kaudu <code>pod_environment_secret_name<\/code> CRD-s operaatori seadistustega v\u00f5i ConfigMapis (olenevalt sellest, kuidas otsustasite operaatorit installida).<\/li>\n<\/ol>\n<p>\nKuid, nagu osutus, on see praegusel hetkel v\u00f5imatu. Seet\u00f5ttu oleme kokku pannud <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/postgres-operator\">oma versiooni operaatorist<\/a><\/noindex> m\u00f5nede lisanduvate v\u00e4liste rakendustega. Rohkem teavet selle kohta - vt allpool.<\/p>\n<p>Kui edastada operaatorile varukoopia parameetreid, nimelt - <code>wal_s3_bucket<\/code> ja AWS S3 ligip\u00e4\u00e4suv\u00f5tmed, siis <strong>hakkab see varundama k\u00f5ike<\/strong>: mitte ainult produktsioonis olevaid andmebaase, vaid ka stagingut. See ei sobinud meie jaoks.<\/p>\n<p>Spilo parameetrite kirjeldamisel, mis on baasne Docker-i \u00fcmbrus PgSQL kasutamisel operaatori kaudu, selgus, et saab edastada parameetri <code>WAL_S3_BUCKET<\/code> t\u00fchjaks, seega saab varukoopiad v\u00e4lja l\u00fclitada. Veelgi enam, suureks r\u00f5\u00f5muks leidsime ka <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/pull\/908\">valmis PR-i<\/a><\/noindex>, mille me kohe oma forki lisasime. N\u00fc\u00fcd on piisav lihtsalt lisada <code>enableWALArchiving: false<\/code> PostgreSQL klastri ressursile.<\/p>\n<p>Jah, oli v\u00f5imalus teha teisiti, k\u00e4ivitades 2 operaatorit: \u00fcks stagingu jaoks (ilma varukoopiateta) ja teine - produktsiooni jaoks. Kuid nii suudame hakkama saada \u00fchega.<\/p>\n<p>Olgu, me \u00f5ppisime andmebaasidesse S3 ligip\u00e4\u00e4su edastama ja varukoopiad hakkasid salvestama. Kuidas saada t\u00f6\u00f6tama varukoopia lehed Operator UI-s?<\/p>\n<p><img decoding=\"async\" alt=\"L\u00fchike \u00fclevaade PostgreSQL operaatoritest Kuberneteses, meie valik ja kogemus\" src=\"\/wp-content\/uploads\/2020\/09\/46169b53707b0bbb686798c655022f40.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOperator UI-s tuleb lisada 3 muutujat:<\/p>\n<ul>\n<li> <code>SPILO_S3_BACKUP_BUCKET<\/code><\/li>\n<li> <code>AWS_ACCESS_KEY_ID<\/code><\/li>\n<li> <code>AWS_SECRET_ACCESS_KEY<\/code><\/li>\n<\/ul>\n<p>\nP\u00e4rast seda muutuvad varukoopiate haldamine v\u00f5imalikuks, mis meie puhul lihtsustab t\u00f6\u00f6d staginguga, v\u00f5imaldades edastada sealt tootmiselt l\u00f5ike ilma t\u00e4iendavate skriptideta.<\/p>\n<p>Veel \u00fche plussina nimetati Teams API-d ja laias ulatuses v\u00f5imalusi andmebaaside ja rollide loomisel operaatori kaudu. Kuid loodud <strong>rollidel ei olnud vaikimisi \u00f5igusi<\/strong>. Vastavalt sellele ei saanud lugemis\u00f5igustega kasutaja uusi tabeleid lugeda.<\/p>\n<p>Miks nii? Kuigi koodis on <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/blob\/master\/pkg\/cluster\/database.go#L42\">on<\/a><\/noindex> vajalikud <code>GRANT<\/code>, neid ei rakendata alati. On kaks meetodit: <code>syncPreparedDatabases<\/code> ja <code>syncDatabases<\/code>. Failis <code>syncPreparedDatabases<\/code> \u2014 kuigi jaotises <code>preparedDatabases<\/code> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/blob\/master\/manifests\/complete-postgres-manifest.yaml#L26\">on<\/a><\/noindex> on tingimus <code>defaultRoles<\/code> ja <code>defaultUsers<\/code> rollide loomiseks, \u2014 vaikimisi \u00f5igusi ei rakendata. Meie t\u00f6\u00f6tame praegu plaastri kallal, et need \u00f5igused automaatselt rakenduks.<\/p>\n<p>Ja viimane punkt meie jaoks olulistes t\u00e4iustustes \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/pull\/975\">pat\u0161<\/a><\/noindex>, mis lisab Node Affinity loodavasse StatefulSet'i. Meie kliendid eelistavad sageli kulusid v\u00e4hendada, kasutades spot-instanse, ja neid ei tohiks kindlasti kasutada andmebaasiteenuste jaoks. Selle k\u00fcsimuse saaks lahendada ka toleratsioonide abil, kuid Node Affinity olemasolu annab suurema kindluse.<\/p>\n<h3>Mis saime?<\/h3>\n<p>\nNende probleemide lahendamise tulemusena harisime Zalando Postgres Operator'i oma <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/postgres-operator\">enda hoidlate<\/a><\/noindex>, kus see kogutakse nende kasulike plaastritega. Ja mugavuse huvides kogusime ka <noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/r\/flant\/postgres-operator\">Docker-ima<\/a><\/noindex>.<\/p>\n<p>PR nimekiri, mis on forkis vastu v\u00f5etud:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/pull\/1066\">turvalise kergema pildi koostamine operaatori jaoks<\/a><\/noindex>;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/pull\/908\">varukoopiate deaktiveerimine<\/a><\/noindex>;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/pull\/1121\">ressursside versioonide v\u00e4rskendamine aktiveeritud k8s versioonide jaoks<\/a><\/noindex>;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/pull\/975\">Node Affinity rakendamine<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\nOleks suurep\u00e4rane, kui kogukond toetaks neid PR-e, et need j\u00f5uaksid j\u00e4rgmise operaatori versiooniga (1.6) upstream'i.<\/p>\n<h2>Boonus! Edukuse lugu produktsiooni migratsioonist<\/h2>\n<p>\nKui kasutate Patronit, saate operaatorile migreerida elava produktsiooni minimaalsete seiskumistega.<\/p>\n<p>Spilo v\u00f5imaldab luua standby-kliustreid S3-hoidlate kaudu <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wal-e\/wal-e\">Wal-E<\/a><\/noindex>, kui binaarne logi PgSQL salvestatakse esmalt S3-s, seej\u00e4rel kopeeritakse replikaga. Aga mis teha, kui te <i>ei<\/i> kasutate Wal-E vanas infrastruktuuris? Selle probleemi lahendus on juba <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/true_engineering\/blog\/437318\/\">ettepanekud<\/a><\/noindex> Habr's.<\/p>\n<p>Abiks on PostgreSQL-i loogiline replikatsioon. Kuid \u00e4rme lasku detailidesse, kuidas luua publikatsioone ja tellimusi, sest\u2026 meie plaan eba\u00f5nnestus.<\/p>\n<p>Asjaolu on see, et andmebaasis oli mitu koormatud tabelit miljonite ridadega, mis pidevalt t\u00e4iendati ja kustutati. <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgrespro\/12\/sql-createsubscription\">Lihtne tellimine<\/a><\/noindex> jot <code>copy_data<\/code>, kui uus replik kopeerib kogu sisu meistrilt, ei j\u00f5udnud lihtsalt meistrist m\u00f6\u00f6da. Sisu kopeerimine t\u00f6\u00f6tas n\u00e4dal aega, kuid ei j\u00f5udnud meistrile j\u00e4rgi. L\u00f5ppkokkuv\u00f5ttes aitas probleemi lahendada <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/avitotech\/recovery-use-cases-for-logical-replication-in-postgresql-10-a1e6bab03072\">artikkel<\/a><\/noindex> kolleeg Avitost: andmeid saab \u00fcle kanda, kasutades <code>pg_dump<\/code>. Kirjeldan meie (veidi t\u00e4iustatud) varianti sellest algoritmist.<\/p>\n<p>Idee on, et saab luua v\u00e4lja l\u00fclitatud tellimuse, mis on seotud konkreetse replikeerimise slotiga ja seej\u00e4rel parandada tehingu numbri. Kasutusel olid replikad tootmise jaoks. See on oluline, kuna replikad aitavad luua \u00fchtse dump'i ja j\u00e4tkata muudatuste saamist peastersest.<\/p>\n<p>Edasistes m\u00e4rkustes, mis kirjeldavad migreerimise protsessi, kasutatakse j\u00e4rgmisi t\u00e4histusi hostide jaoks:<\/p>\n<ol>\n<li><i>master<\/i> \u2014 algserver;<\/li>\n<li><i>replica1<\/i> \u2014 voogereplikatsioon vanal tootmisserveril;<\/li>\n<li><i>replica2<\/i> \u2014 uus loogiline replikatsioon.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Migreerimise plaan<\/h3>\n<p>\n1. Loome peasterses tellimuse k\u00f5igi tabelite jaoks skeemis <code>public<\/code> andmebaasi <code>dbname<\/code>:<\/p>\n<pre><code class=\"bash\">psql -h master -d dbname -c \"CREATE PUBLICATION dbname FOR ALL TABLES;\"\n<\/code><\/pre>\n<p>\n2. Loome replikeerimise slot peasterses:<\/p>\n<pre><code class=\"bash\">psql -h master -c \"select pg_create_logical_replication_slot('repl', 'pgoutput');\"\n<\/code><\/pre>\n<p>\n3. Peatame replikatsiooni vanal replikal:<\/p>\n<pre><code class=\"bash\">psql -h replica1 -c \"select pg_wal_replay_pause();\"\n<\/code><\/pre>\n<p>\n4. Saame tehingu numbri peastersest:<\/p>\n<pre><code class=\"bash\">psql -h master -c \"select replay_lsn from pg_stat_replication where client_addr = 'replica1';\"\n<\/code><\/pre>\n<p>\n5. Teeme dump'i vanalt replikalt. Teeme seda mitmes voos, mis aitab protsessi kiirendada:<\/p>\n<pre><code class=\"bash\">pg_dump -h replica1 --no-publications --no-subscriptions -O -C -F d -j 8 -f dump\/ dbname\n<\/code><\/pre>\n<p>\n6. Laeme dump'i uuele serverile:<\/p>\n<pre><code class=\"bash\">pg_restore -h replica2 -F d -j 8 -d dbname dump\/\n<\/code><\/pre>\n<p>\n7. P\u00e4rast dump'i laadimist on v\u00f5imalik alustada replikatsiooni voogereplika peal:<\/p>\n<pre><code class=\"bash\">psql -h replica1 -c \"select pg_wal_replay_resume();\"\n<\/code><\/pre>\n<p>\n7. Loome tellimuse uuel loogilisel replikal:<\/p>\n<pre><code class=\"bash\">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');\"\n<\/code><\/pre>\n<p>\n8. Saame <code>oid<\/code> tellimuse:<\/p>\n<pre><code class=\"bash\">psql -h replica2 -d dbname -c \"select oid, * from pg_subscription;\"\n<\/code><\/pre>\n<p>\n9. Oletame, et saime <code>oid=1000<\/code>. Rakendame tehingu numbri tellimusele:<\/p>\n<pre><code class=\"bash\">psql -h replica2 -d dbname -c \"select pg_replication_origin_advance('pg_1000', 'AA\/AAAAAAAA');\"\n<\/code><\/pre>\n<p>\n10. Alustame replikatsiooni:<\/p>\n<pre><code class=\"bash\">psql -h replica2 -d dbname -c \"alter subscription oldprod enable;\"\n<\/code><\/pre>\n<p>\n11. Kontrollime tellimuse staatust, replikatsioon peab t\u00f6\u00f6tama:<\/p>\n<pre><code class=\"bash\">psql -h replica2 -d dbname -c \"select * from pg_replication_origin_status;\"\npsql -h master -d dbname -c \"select slot_name, restart_lsn, confirmed_flush_lsn from pg_replication_slots;\"\n<\/code><\/pre>\n<p>\n12. P\u00e4rast seda, kui replikatsioon on k\u00e4ivitatud ja andmebaasid on s\u00fcnkroonitud, on v\u00f5imalik t\u00e4ita l\u00fclitust.<\/p>\n<p>13. P\u00e4rast replikatsiooni peatamist tuleb parandada j\u00e4rjestusi. Seda on h\u00e4sti kirjeldatud <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.postgresql.org\/wiki\/Fixing_Sequences\">artiklis wiki.postgresql.org<\/a><\/noindex>.<\/p>\n<p>Selle plaani t\u00f5ttu \u00f5nnestus l\u00fclitus viia l\u00e4bi minimaalsete viivitustega.<\/p>\n<h2>Kokkuv\u00f5te<\/h2>\n<p>\nKubernetesi operaatorid v\u00f5imaldavad erinevaid toiminguid lihtsustada, v\u00e4hendades need K8s-resursside loomisele. Kuid hoolimata suurep\u00e4rasest automatiseerimisest, mida nende abil saavutatakse, tuleb meeles pidada, et see v\u00f5ib tuua kaasa ka mitmeid ootamatuid n\u00fcansse, seega valige operaatorid m\u00f5istlikult.<\/p>\n<p>Uurides kolme populaarseimat Kubernetesi operaatorit PostgreSQL jaoks, valisime Zalando projekti. Selle kasutamine t\u00f5i kaasa teatud raskusi, kuid tulemus oli t\u00f5eliselt rahuldustpakkuv, nii et plaanime laiendada seda kogemust ka m\u00f5nele muule PgSQL installatsioonile. Kui teil on sarnaste lahenduste kasutamise kogemusi, ootame teid kommentaarides neid detailselt jagama!<\/p>\n<h2>P.S.<\/h2>\n<p>\nLugege ka meie blogist:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/431500\/\">Andmebaasid ja Kubernetes (\u00fclevaade ja video ettekandest)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/479438\/\">Postgres-teisip\u00e4ev \u21165: PostgreSQL ja Kubernetes. CI\/CD. Testimise automatiseerimine<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/480722\/\">\u00dcks lugu Redis'i operaatorist K8s-is ja mini\u00fclevaade selle andmebaasi anal\u00fc\u00fcsi t\u00f6\u00f6riistadest<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/520616\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0451 \u0447\u0430\u0449\u0435 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b: \u00ab\u0425\u043e\u0442\u0438\u043c \u043a\u0430\u043a Amazon RDS, \u043d\u043e \u0434\u0435\u0448\u0435\u0432\u043b\u0435\u00bb; \u00ab\u0425\u043e\u0442\u0438\u043c \u043a\u0430\u043a RDS, \u043d\u043e \u0432\u0435\u0437\u0434\u0435, \u0432 \u043b\u044e\u0431\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435\u00bb. \u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 managed-\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 Kubernetes, \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f PostgreSQL (Stolon, \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043e\u0442 Crunchy Data \u0438 Zalando) \u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0441\u0432\u043e\u0439 \u0432\u044b\u0431\u043e\u0440. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 \u043e\u043f\u044b\u0442 \u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":95323,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-95322","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0451 \u0447\u0430\u0449\u0435 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kratkij-obzor-operatorov-postgresql-dlya-kubernetes-nash-vybor-i-opyt\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 PostgreSQL \u0434\u043b\u044f Kubernetes, \u043d\u0430\u0448 \u0432\u044b\u0431\u043e\u0440 \u0438 \u043e\u043f\u044b\u0442 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0451 \u0447\u0430\u0449\u0435 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kratkij-obzor-operatorov-postgresql-dlya-kubernetes-nash-vybor-i-opyt\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-09-28T05:42:39+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-09-28T05:42:39+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Kokkuv\u00f5te PostgreSQL operaatoritest Kubernetesse, meie valik ja kogemus | ProHoster","description":"\u00dcha sagedamini klientidelt.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kratkij-obzor-operatorov-postgresql-dlya-kubernetes-nash-vybor-i-opyt","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 PostgreSQL \u0434\u043b\u044f Kubernetes, \u043d\u0430\u0448 \u0432\u044b\u0431\u043e\u0440 \u0438 \u043e\u043f\u044b\u0442 | ProHoster","og:description":"\u0412\u0441\u0451 \u0447\u0430\u0449\u0435 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kratkij-obzor-operatorov-postgresql-dlya-kubernetes-nash-vybor-i-opyt","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-09-28T05:42:39+00:00","article:modified_time":"2020-09-28T05:42:39+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"95322","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 11:08:22","updated":"2022-09-30 21:12:08","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/95322","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=95322"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/95322\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/95323"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=95322"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=95322"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=95322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}