{"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":"PostgreSQL-i operaatorite l\u00fchitutvustus Kuberneteses, meie valik ja kogemus","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"PostgreSQL-i operaatorite l\u00fchitutvustus 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: \u201eTahame nagu Amazon RDS, aga odavamalt\u201c; \u201eTahame nagu RDS, kuid igas infrastruktuuris\u201c. Et luua sarnane hallatav lahendus Kuberneteses, vaatasime populaarseimate PostgreSQL operaatorite (Stolon, Crunchy Data ja Zalando operaatorid) praegust seisu ja tegime oma valiku.<\/p>\n<p>See artikkel on meie saadud kogemus nii teoreetilisest (lahenduste \u00fclevaade) kui ka praktilisest (mis valiti ning mis sellest sai) vaatenurgast. Kuid k\u00f5igepealt selgitame v\u00e4lja, millised n\u00f5udmised esitatakse potentsiaalsele RDS asendusele...<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 kohaselt, nad m\u00f5istavad hallatavat (managed) andmebaasiteenust, mis:<\/p>\n<ol>\n<li>on kergesti seadistatav;<\/li>\n<li>omab v\u00f5imalust t\u00f6\u00f6tada snapshots'itega ja taastuda neist (eelmisel juhul \u2014 toega <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Point-in-time_recovery\">PITR<\/a><\/noindex>);<\/li>\n<li>kurbab luua master-slave topoloogiaid;<\/li>\n<li>omab ulatuslikku laiendite nimekirja;<\/li>\n<li>pakub kasutajate\/auditite ja juurdep\u00e4\u00e4sude haldamist.<\/li>\n<\/ol>\n<p>\n\u00dcldiselt v\u00f5ivad l\u00e4henemised seatud \u00fclesande t\u00e4itmiseks olla \u00fcsna erinevad, kuid tingimuslik Ansible on meile v\u00f5\u00f5ras. (Sarnasele j\u00e4reldusele j\u00f5udsid ka 2GIS-i kolleegid oma katses <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/509926\/\">luua \"kiirelt paigaldatava talitlusrikka Postgres-klaastri t\u00f6\u00f6riist\".)<\/a><\/noindex> Omandatud operaatorid on \u00fcldtunnustatud l\u00e4henemine sarnaste probleemide lahendamiseks Kubernetes\u2019e \u00f6kos\u00fcsteemis. Rohkem teavet nende kohta, mida kasutada Kubernetes'e sees t\u00f6\u00f6tavates andmebaasides, jagas juba Flanta tehniline direktor<\/p>\n<p>oma esitlustes: <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\/\">Kiire ja lihtne operaatorite loomine on soovitatav meie avatud l\u00e4htekoodiga utiliidiga<\/a><\/noindex>.<\/p>\n<p><i><strong>NB<\/strong><\/i><i>. Kasutades seda, on v\u00f5imalik seda teha ilma teadmata Go keelt, kasutades rohkem s\u00fcsteemiadministraatoritele tuttavaid viise: Bash, Python jne. <\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/shell-operator\"><i>shell-operator<\/i><\/a><\/noindex><i>PostgreSQL-i jaoks on olemas mitu populaarset K8s-ooperatoori:<\/i><\/p>\n<p>Stolon;<\/p>\n<ul>\n<li>Crunchy Data PostgreSQL Operator;<\/li>\n<li>Zalando Postgres Operator.<\/li>\n<li>Vaatame neid l\u00e4hemalt.<\/li>\n<\/ul>\n<p>\nOperaatori valik<\/p>\n<h2>Peale nende oluliste v\u00f5imaluste, mida oli juba eespool mainitud, ootasime \u2013 kui Kubernetes'i infrastruktuuri insenerid \u2013 operaatoritelt ka j\u00e4rgmist:<\/h2>\n<p>\nGitist paigaldamine ja<\/p>\n<ul>\n<li> Kohandatud ressursid <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/extend-kubernetes\/operator\/#deploying-operators\">pod anti-affiniteedi toe;<\/a><\/noindex>;<\/li>\n<li> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 pod anti-affinity;<\/li>\n<li> node affinity v\u00f5i node selector seadistamine;<\/li>\n<li> toleratsioonide seadistamine;<\/li>\n<li> tuning-v\u00f5imaluste olemasolu;<\/li>\n<li> arusaadavad tehnoloogiad ja isegi k\u00e4sud.<\/li>\n<\/ul>\n<p>\nIlma igasse punkti detailidesse laskumata (k\u00fcsige kommentaarides, kui tekivad k\u00fcsimused p\u00e4rast artikli lugemist), m\u00e4rkida, et need parameetrid on vajalikud klastrite s\u00f5lmede spetsialiseerumise t\u00e4psemaks kirjeldamiseks, et tellida neid konkreetsete rakenduste jaoks. Nii saame saavutada optimaalse tasakaalu j\u00f5udluse ja hinna vahel.<\/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\u00f5tte Sorint.lab poolt <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/431500\/\">juba mainitud ettekandes<\/a><\/noindex> peeti mingisuguseks etaloniks andmebaasi operaatorite seas. See on \u00fcsna vana projekt: esimene avalik v\u00e4ljaanne toimus juba 2015. aasta novembris(!), ja GitHubi repole on kogunenud peaaegu 3000 t\u00e4hte ning 40+ panustajat.<\/p>\n<p>Ja t\u00f5epoolest, Stolon on suurep\u00e4rane n\u00e4ide l\u00e4bi m\u00f5eldud arhitektuurist:<\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL-i operaatorite l\u00fchitutvustus Kuberneteses, meie valik ja kogemus\" src=\"\/wp-content\/uploads\/2020\/09\/a34625c130bfd29c5645cf2417042de2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSelle operaatori seadistuse \u00fcksikasjadega saab tutvuda ettekandes v\u00f5i <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/sorintlab\/stolon\/blob\/master\/doc\/architecture.md\">projekti dokumentatsioonist<\/a><\/noindex>. \u00dcldiselt v\u00f5ib \u00f6elda, et see suudab k\u00f5ike kirjeldatut: failover, klientide l\u00e4bipaistva juurdep\u00e4\u00e4su proxid, varukoopiad\u2026 Lisaks pakuvad proxid juurdep\u00e4\u00e4su l\u00e4bi \u00fche teenuse l\u00f5pp-punkti \u2014 erinevalt kahest j\u00e4rgnevast lahendusest (neil on kaks teenust andmebaasi juurdep\u00e4\u00e4suks).<\/p>\n<p>Kuid Stolonil <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/sorintlab\/stolon\/issues\/463#issuecomment-379666733\">ei ole Custom Resources<\/a><\/noindex>, mist\u00f5ttu ei saa seda lihtsalt ja kiiresti nagu \u201ekuuma pirukaga\u201d DB eksemplare Kubernetesesse luua. Halduse teostab utiliit <code>stolonctl<\/code>, deploy on l\u00e4bi Helm-charti, ja kasutaja m\u00e4\u00e4ratleb need ConfigMap\u2019is.<\/p>\n<p>\u00dchelt poolt tundub, et operaator ei ole v\u00e4ga operaator (sest ta ei kasuta CRD-d). Teiselt poolt on see paindlik s\u00fcsteem, mis v\u00f5imaldab seadistada ressursse K8s just nii, nagu soovite.<\/p>\n<p>Kokkuv\u00f5ttes ei tundunud meile optimaalne tee luua iga DB jaoks eraldi chart. Seet\u00f5ttu hakkasime otsima alternatiive.<\/p>\n<h3>2. Crunchy Data PostgreSQL Operaat\u043e\u0440<\/h3>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/CrunchyData\/postgres-operator\">Crunchy Data operaator<\/a><\/noindex>, noore Ameerika idufirma n\u00e4ib olevat loogiline alternatiiv. Selle avalik ajalugu algab esimesest versioonist m\u00e4rtsis 2017, mille j\u00e4rel on GitHubi repo saanud veidi v\u00e4hem kui 1300 t\u00e4hte ja 50+ kaast\u00f6\u00f6tajat. Viimane v\u00e4ljaanne septembris on testitud koos Kubernetes 1.15\u20141.18, OpenShift 3.11+ ja 4.4+, GKE ning VMware Enterprise PKS 1.3+.<\/p>\n<p>Crunchy Data PostgreSQL operaatori arhitektuur vastab samuti deklareeritud n\u00f5uetele:<\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL-i operaatorite l\u00fchitutvustus Kuberneteses, meie valik ja kogemus\" src=\"\/wp-content\/uploads\/2020\/09\/343cd0494abae42fcf5b47c5bb4eb310.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHalduse tegemine toimub utiliidi kaudu <code>pgo<\/code>, kuid see genereerib omakorda Custom Resources Kubernetes'ele. Seega r\u00f5\u00f5mustas operaator meid, kui potentsiaalseid kasutajaid:<\/p>\n<ul>\n<li> on haldus l\u00e4bi CRD;<\/li>\n<li> mugav kasutajate haldus (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 spetsialiseeritud konteinerite piltide kogum PostgreSQL-i ja selle kasutamiseks m\u00f5eldud utiliitide (sealhulgas pgBackRest, pgAudit, laiendused contrib-st jne) jaoks.<\/li>\n<\/ul>\n<p>\nSiiski t\u00f5i Crunchy Data operaatorit kasutama asudes esile mitmeid probleeme:<\/p>\n<ul>\n<li>Toleratsioonide v\u00f5imalust ei olnud \u2014 oli ette n\u00e4htud ainult nodeSelector.<\/li>\n<li>Loodud pod\u2019id olid osa Deployment\u2019ist, kuigi me jagasime stateful-rakendust. Erinevalt StatefulSet\u2019ist ei oska Deployment\u2019id luua kettaid.<\/li>\n<\/ul>\n<p>\nViimane puudus toob kaasa l\u00f5busaid hetki: testkeskkonnas \u00f5nnestus k\u00e4ivitada 3 koopiat \u00fche ketta abil <i>kohalik salvestus<\/i>, mist\u00f5ttu operaator teatas, et 3 koopiat t\u00f6\u00f6tab (kuigi see polnud t\u00f5si).<\/p>\n<p>Veel \u00fcks selle operaatori omadus on selle valmis integreerimine erinevate abis\u00fcsteemidega. N\u00e4iteks on lihtne paigaldada pgAdmin ja pgBounce, samas <noindex><a rel=\"nofollow\" href=\"https:\/\/access.crunchydata.com\/documentation\/postgres-operator\/4.4.0\/installation\/other\/ansible\/installing-metrics\/\">dokumentatsioonis<\/a><\/noindex> kaalutakse eelkonfigureeritud Grafana ja Prometheus. Hiljutises <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/CrunchyData\/postgres-operator\/releases\/tag\/v4.5.0-beta.1\">v\u00e4ljaandes 4.5.0-beta1<\/a><\/noindex> m\u00e4rgitakse eraldi paranenud integreerimist projektiga <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/CrunchyData\/pgmonitor\">pgMonitor<\/a><\/noindex>, mille t\u00f5ttu operaator pakub PgSQL m\u00f5\u00f5dikute selget visualiseerimist \u201ekarbist v\u00e4lja\u201d.<\/p>\n<p>Siiski viis kummaline valik genereeritud Kubernetes\u2019i resursse meid vajaduseni leida muu lahendus.<\/p>\n<h3>3. Zalando Postgres Operator<\/h3>\n<p>\nZalando tooted on meile ammu tuntud: meil on kogemusi Zaleniumi kasutamisega ja kindlasti oleme proovinud <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/patroni\">Patroni<\/a><\/noindex> \u2014 nende populaarset HA-lahendust PostgreSQL jaoks. Ettev\u00f5tte l\u00e4henemisest <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\">Postgres Operator<\/a><\/noindex> r\u00e4\u00e4kis \u00fcks selle autoritest \u2014 Aleksei Klyukin \u2014 saates <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/479438\/\">Postgres-teisip\u00e4ev #5<\/a><\/noindex>, ja see meeldis meile.<\/p>\n<p>See on noorim lahendus artiklis arutletud: esimene versioon ilmus augustis 2018. aastal. Siiski, hoolimata v\u00e4hesest ametlikust v\u00e4ljalaskmisest, on projekt teinud suure sammu edasi, \u00fcletades juba populaarsuses Crunchy Data lahendust, millel on \u00fcle 1300 t\u00e4he GitHubis ja maksimaalne kontriibutajate arv (\u00fcle 70).<\/p>\n<p>Selle operaatori \u201eall\u201c kasutatakse ajaga proovile pandud lahendusi:<\/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> \u2014 varukoopiate jaoks,<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pgbouncer\/pgbouncer\">PgBouncer<\/a><\/noindex> \u2014 \u00fchenduste basena.<\/li>\n<\/ul>\n<p>\nSiin on esitatud Zalando operaatori arhitektuur:<\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL-i operaatorite l\u00fchitutvustus Kuberneteses, meie valik ja kogemus\" src=\"\/wp-content\/uploads\/2020\/09\/c66f10c1a818592ecaacd2db4ce5ace5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 Custom Resources, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 StatefulSet \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0442\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0432 pod \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 sidecar&#8217;\u044b. \u0412\u0441\u0451 \u044d\u0442\u043e \u2014 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043b\u044e\u0441 \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u043e\u0442 Crunchy Data.<\/p>\n<p>Kuna me valisime Zalando lahenduse kolme arutletud variandi seast, esitatakse allpool edasi selle v\u00f5imaluste kirjeldus koos rakenduse praktikaga.<\/p>\n<h2>Zalando Postgres Operaatori praktika<\/h2>\n<p>\nOperaatori juurutamine toimub v\u00e4ga lihtsalt: piisab, kui laadida alla uusim v\u00e4ljaanne GitHubist ja rakendada YAML-failid kaustast. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/tree\/master\/manifests\">manifests<\/a><\/noindex>. Samuti v\u00f5ib kasutada <noindex><a rel=\"nofollow\" href=\"https:\/\/operatorhub.io\/operator\/postgres-operator\">OperatorHub<\/a><\/noindex>.<\/p>\n<p>P\u00e4rast installimist tuleks muretseda <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/blob\/master\/docs\/reference\/operator_parameters.md#aws-or-gcp-interaction\">logide ja varunduste hoidlate seadistamise \u00fcle<\/a><\/noindex>See toimub l\u00e4bi ConfigMap <code>postgres-operator<\/code> nimetuses, kuhu olete operaatori paigaldanud. Kui hoidlad on seadistatud, saab k\u00e4itada esimese PostgreSQL klastrit.<\/p>\n<p>N\u00e4iteks meie standardne paigaldus n\u00e4eb 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: &quot;12&quot;\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>\nAntud manifest paigaldab klastrit, kus on 3 eksemplari koos sidecar'iga <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wrouesnel\/postgres_exporter\">postgres_exporter<\/a><\/noindex>, millest v\u00f5tame rakenduse m\u00f5\u00f5dikud. Nagu n\u00e4ete, on k\u00f5ik v\u00e4ga lihtne ja soovi korral saab luua s\u00f5na otseses m\u00f5ttes piiramatu arvu klastreid.<\/p>\n<p>Tasub t\u00e4helepanu p\u00f6\u00f6rata ka <b>veebipaneelile haldamiseks<\/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 toob koos operaatoriga, mis v\u00f5imaldab luua ja kustutada klustreid ning t\u00f6\u00f6tada operaatori poolt loodud varukoopiatena.<\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL-i operaatorite l\u00fchitutvustus 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=\"PostgreSQL-i operaatorite l\u00fchitutvustus Kuberneteses, meie valik ja kogemus\" src=\"\/wp-content\/uploads\/2020\/09\/74a65f7f301da14a0cb7bea6d5ef84ec.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Varukoopiate haldamine<\/i><\/p>\n<p>Teine huvitav omadus on toimetamine <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/blob\/master\/docs\/user.md#teams-api-roles\">Teams API<\/a><\/noindex>. Antud mehhanism genereerib automaatselt <b>rolle PostgreSQLis<\/b>, l\u00e4htuvalt saadud kasutajanime nimekirjast. P\u00e4rast seda v\u00f5imaldab API tagastada nimekirja kasutajatest, kellele loodakse 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> nodeSelector'i toe puudumine;<\/li>\n<li> varukoopiate keelamise v\u00f5imaluse puudumine;<\/li>\n<li> andmebaaside loomise funktsiooni kasutamine ei anna vaikimisi privileege;<\/li>\n<li> m\u00f5nikord ei piisa dokumentatsioonist v\u00f5i on see aegunud.<\/li>\n<\/ol>\n<p>\n\u00d5nneks saavad paljusid neist lahendada. Alustame l\u00f5pust \u2014 probleemide osas <strong>dokumentatsiooniga<\/strong>. <\/p>\n<p>T\u00f5en\u00e4oliselt kohtate olukordi, kus pole alati selge, kuidas varukoopia m\u00e4\u00e4rata ja kuidas \u00fchendada varukoopia anum Operaatori kasutajaliidesega. Sellega seoses r\u00e4\u00e4gitakse dokumentatsioonis ainult \u00fcle, aga reaalne kirjeldus on <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/pull\/481\">PR<\/a><\/noindex>:<\/p>\n<ol>\n<li>peate looma salajase;<\/li>\n<li>edastama selle operaatorile parameetrina <code>pod_environment_secret_name<\/code> CRD-s kujunduse seadetes v\u00f5i ConfigMapis (s\u00f5ltub sellest, kuidas otsustasite operaatori installida).<\/li>\n<\/ol>\n<p>\nKuid nagu selgus, on see hetkel v\u00f5imatu. T\u00e4pselt sellep\u00e4rast oleme kogunud <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/postgres-operator\">oma versiooni operaatorist<\/a><\/noindex> m\u00f5ningate lisav\u00e4liste arendustegevustega. Rohkem sellest \u2014 vaadake allpool.<\/p>\n<p>Kui edastada operaatorile varukoopiate parameetrid, nimelt \u2014 <code>wal_s3_bucket<\/code> ja juurdep\u00e4\u00e4suv\u00f5tmed AWS S3-s, siis <strong>teeb ta varukoopiaid k\u00f5igest<\/strong>: mitte ainult tootmisandmebaasidest, vaid ka staging'ist. See ei rahuldanud meid.<\/p>\n<p>Spilo parameetrite kirjelduses, mis on p\u00f5hine Docker-i kattes PgSQL t\u00f6\u00f6 kasutamisel operaatori kaudu, selgus, et saab edastada parameetri <code>WAL_S3_BUCKET<\/code> t\u00fchjana, seel\u00e4bi varukoopiaid keelates. Lisaks, suureks r\u00f5\u00f5muks leidsime ka <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/pull\/908\">valmis PR<\/a><\/noindex>, mille me koheselt oma forki v\u00f5tsime. N\u00fc\u00fcd piisab lihtsalt <code>enableWALArchiving: false<\/code> PostgreSQL klastrite ressursile lisamisest.<\/p>\n<p>Jah, oli v\u00f5imalus teisi teed minna, k\u00e4ivitades 2 operaatorit: \u00fcks staging'i jaoks (ilma varukoopiateta) ja teine tootmise jaoks. Kuid nii suutsime hakkama saada \u00fchega.<\/p>\n<p>Okei, me \u00f5ppisime edastama andmebaasides juurdep\u00e4\u00e4su S3-le ja varukoopiad hakkasid laokogusse j\u00f5udma. Kuidas saame t\u00f6\u00f6le panna varukoopiate lehed Operator UI-s?<\/p>\n<p><img decoding=\"async\" alt=\"PostgreSQL-i operaatorite l\u00fchitutvustus 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 muutuja:<\/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 muutub varundamise haldamine v\u00f5imalikuks, mis meie puhul lihtsustab t\u00f6\u00f6protsesse stagingus, v\u00f5imaldades t\u00f5sta sinna tootmisandmeid ilma t\u00e4iendavate skriptideta.<\/p>\n<p>Veel \u00fche plussina toodi v\u00e4lja t\u00f6\u00f6 Teams API-ga ja laiad v\u00f5imalused andmebaaside ja rollide loomisel operaatori vahenditega. Kuid loodud <strong>rollid ei sisaldanud vaikimisi \u00f5igusi.<\/strong>Seet\u00f5ttu ei teadnud 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\">has<\/a><\/noindex> vajalikud <code>GRANT<\/code>, ei rakendata neid alati. On kaks meetodit: <code>syncPreparedDatabases<\/code> ja <code>syncDatabases<\/code>. Dokumendihalduses <code>syncPreparedDatabases<\/code> \u2014 ehkki sektsioonis <code>preparedDatabases<\/code> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/blob\/master\/manifests\/complete-postgres-manifest.yaml#L26\">has<\/a><\/noindex> on tingimus <code>defaultRoles<\/code> ja <code>defaultUsers<\/code> rollide loomise jaoks, ei rakendata vaikimisi \u00f5igusi. Oleme valmis t\u00f6\u00f6tama pat\u0161iga, et need \u00f5igused rakenduksid automaatselt.<\/p>\n<p>Ja viimane punkt meie praegustes t\u00e4iustustes \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/pull\/975\">plekk<\/a><\/noindex>, lisades Node Affinity loodud StatefulSet'i. Meie kliendid eelistavad sageli kulusid v\u00e4hendada, kasutades spot-instantse, kuid neid ei tohiks kasutada DBA teenuste jaoks. Selle k\u00fcsimuse saaks lahendada ka toleratsioonidega, kuid Node Affinity olemasolu annab suurema kindluse.<\/p>\n<h3>Mis saime?<\/h3>\n<p>\nNende probleemide lahendamise tulemuste p\u00f5hjal forkasime Postgres Operatori Zalando'lt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/postgres-operator\">oma reposse<\/a><\/noindex>, kus see koguneb nii kasulike patchidega. Mugavuse huvides oleme kokku kogunud ka <noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/r\/flant\/postgres-operator\">Docker-image<\/a><\/noindex>.<\/p>\n<p>PR-de 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 kergkaalu pildi ehitamine operaatori jaoks<\/a><\/noindex>;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/pull\/908\">varukoopiate keelamine<\/a><\/noindex>;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\/pull\/1121\">ressursside versioonide uuendamine aktuaalsete 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 tore, kui kogukond toetaks neid PR-e, et need j\u00f5uaksid j\u00e4rgmise operaatori versiooniga (1.6) upstream'i.<\/p>\n<h2>Boonus! Edulugu productioni migratsioonist<\/h2>\n<p>\nKui kasutate Patronit, saate operaatoreid migratsiooni kaudu elava productioniga minimaalse seisaku kestuse.<\/p>\n<p>Spilo v\u00f5imaldab luua standby klastreid l\u00e4bi S3 salvestuste <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wal-e\/wal-e\">Wal-E<\/a><\/noindex>, kus PgSQL binaarlog k\u00f5igepealt salvestatakse S3-sse ja seej\u00e4rel laaditakse v\u00e4lja koopiana. Aga mis siis, kui teil on <i>ei<\/i> kasutatakse Wal-E vanas infrastruktuuris? Selle probleemi lahendus on juba <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/true_engineering\/blog\/437318\/\">oli pakutud<\/a><\/noindex> Habr's.<\/p>\n<p>Siin tuleb appi PostgreSQL loogiline replikaat. Kuid me ei hakka detailidesse laskuma, kuidas v\u00e4ljaandeid ja tellimusi luua, sest... meie plaan eba\u00f5nnestus.<\/p>\n<p>Asi on selles, et andmebaasis oli mitu koormatud tabelit, milles oli miljoneid ridu, mis pidevalt t\u00e4ienesid ja kustutati. <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgrespro\/12\/sql-createsubscription\">Lihtne tellimus<\/a><\/noindex> koos <code>copy_data<\/code>, kui uus replika kopeerib kogu sisu originaalist, lihtsalt ei j\u00f5udnud originaali j\u00e4rgi. Sisu kopeerimine t\u00f6\u00f6tas n\u00e4dal aega, kuid ei j\u00f5udnud kunagi originaali j\u00e4rele. L\u00f5puks 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> kolleegid Avitost: andmeid saab \u00fcle kanda, kasutades <code>pg_dump<\/code>. Kirjeldan meie (veidi kohandatud) versiooni sellest algoritmist.<\/p>\n<p>Idee on see, et saab teha v\u00e4lja l\u00fclitatud tellimuse, mis on seotud konkreetse replikatsiooni ajavahemikuga, ja seej\u00e4rel parandada tehingu numbrit. Oli olemas replikaad, et t\u00f6\u00f6delda tootmisprotsessi. See on oluline, sest replika aitab luua j\u00e4rjekindlat dump'i ja j\u00e4tkata muudatuste saamist originaalist.<\/p>\n<p>J\u00e4rgnevatel k\u00e4skudel, mis kirjeldavad migreerimisprotsessi, kasutatakse hostide t\u00e4histamiseks j\u00e4rgmisi m\u00e4rke:<\/p>\n<ol>\n<li><i>master<\/i> \u2014 algne server;<\/li>\n<li><i>replica1<\/i> \u2014 voogesitusreplikatsioon vanas production-is;<\/li>\n<li><i>replica2<\/i> \u2014 uus loogiline replikatsioon.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Migratsiooniplaan<\/h3>\n<p>\n1. Loome masteris 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 &quot;CREATE PUBLICATION dbname FOR ALL TABLES;&quot;\n<\/code><\/pre>\n<p>\n2. Loome replikaatsiooni slot'i masteris:<\/p>\n<pre><code class=\"bash\">psql -h master -c &quot;select pg_create_logical_replication_slot('repl', 'pgoutput');&quot;\n<\/code><\/pre>\n<p>\n3. Peatame replikaatsiooni vanas replikas:<\/p>\n<pre><code class=\"bash\">psql -h replica1 -c &quot;select pg_wal_replay_pause();&quot;\n<\/code><\/pre>\n<p>\n4. Saame masterist tehingu numbri:<\/p>\n<pre><code class=\"bash\">psql -h master -c &quot;select replay_lsn from pg_stat_replication where client_addr = 'replica1';&quot;\n<\/code><\/pre>\n<p>\n5. Teeme vana replikast dump'i. Teeme seda mitmes voos, et kiirendada protsessi:<\/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 saab voogreplikatsiooni k\u00e4ivitada voogesitusreplikas:<\/p>\n<pre><code class=\"bash\">psql -h replica1 -c &quot;select pg_wal_replay_resume();&quot;\n<\/code><\/pre>\n<p>\n7. Loome tellimuse uuel loogilisel replikal:<\/p>\n<pre><code class=\"bash\">psql -h replica2 -c &quot;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');&quot;\n<\/code><\/pre>\n<p>\n8. Saame <code>oid<\/code> tellimuse:<\/p>\n<pre><code class=\"bash\">psql -h replica2 -d dbname -c &quot;select oid, * from pg_subscription;&quot;\n<\/code><\/pre>\n<p>\n9. Oletame, et oleme saanud <code>oid=1000<\/code>. Rakendame tehingu numbri tellimusele:<\/p>\n<pre><code class=\"bash\">psql -h replica2 -d dbname -c &quot;select pg_replication_origin_advance('pg_1000', 'AA\/AAAAAAAA');&quot;\n<\/code><\/pre>\n<p>\n10. K\u00e4ivitame replikeerimise:<\/p>\n<pre><code class=\"bash\">psql -h replica2 -d dbname -c &quot;alter subscription oldprod enable;&quot;\n<\/code><\/pre>\n<p>\n11. Kontrollime tellimuse olekut, replikeerimine peab t\u00f6\u00f6tama:<\/p>\n<pre><code class=\"bash\">psql -h replica2 -d dbname -c &quot;select * from pg_replication_origin_status;&quot;\npsql -h master -d dbname -c &quot;select slot_name, restart_lsn, confirmed_flush_lsn from pg_replication_slots;&quot;\n<\/code><\/pre>\n<p>\n12. P\u00e4rast replikeerimise k\u00e4ivitamist ja andmebaaside s\u00fcnkroniseerimist saab teostada vahetuse.<\/p>\n<p>13. P\u00e4rast replikeerimise katkestamist on vaja parandada j\u00e4rjestused. Selle kohta on hea \u00fclevaade <noindex><a rel=\"nofollow\" href=\"https:\/\/wiki.postgresql.org\/wiki\/Fixing_Sequences\">artiklis wiki.postgresql.org<\/a><\/noindex>.<\/p>\n<p>T\u00e4nu sellisele plaanile l\u00e4ks vahetus l\u00e4bi v\u00f5imalikult v\u00e4ikeste viivitustega.<\/p>\n<h2>Kokkuv\u00f5te<\/h2>\n<p>\nKubernetes'i operaatorid lihtsustavad erinevaid toiminguid, muutes need K8s-resursside loomiseks. Kuid p\u00e4rast h\u00e4mmastava automatiseerimise saavutamist tuleks meeles pidada, et see v\u00f5ib tuua kaasa ka mitmeid ootamatuid n\u00fcansse, seega valige operaatorid teadlikult.<\/p>\n<p>Vaadates kolme populaarseimat Kubernetes- operaatorit PostgreSQL-ile, otsustasime Zalando projekti kasuks. Sellest hoolimata tuli \u00fcletada teatavad raskused, kuid tulemus oli t\u00f5eliselt r\u00f5\u00f5mustav, seega plaanime seda kogemust laiendada ka m\u00f5nedele muudele PgSQL-installeerimistele. Kui teil on kogemusi sarnaste lahendustega, oleksime t\u00e4nulikud, kui jagaksite \u00fcksikasju kommentaarides!<\/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 nr 5: 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\/\">Lugu Redis- operaatorist K8s-is ja l\u00fchike \u00fclevaade selle andmebaasi anal\u00fc\u00fcsit\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 4.9.10 - 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 \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\" \/>\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) 4.9.10\" \/>\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 \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\" \/>\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\udd47L\u00fchike \u00fclevaade PostgreSQL- operaatoritest Kuberneteses, meie valik ja kogemus | ProHoster","description":"\u00dcha enam k\u00fcsivad kliendid: \u201eSoovime nagu Amazon RDS, aga odavam!\u201c; \u201eSoovime nagu RDS, aga igal pool, igas infrastruktuuris.\u201c Sellise hallatud lahenduse rakendamiseks Kuberneteses vaatasime \u00fcle hetke populaarseimate PostgreSQL- operaatorite (Stolon, Crunchy Data ja Zalando operaatorid) seisundi ning tegime oma valiku. See artikkel on meie teadlikud kogemused ja","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 \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","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"},"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}]}}