{"id":55467,"date":"2020-01-21T00:00:00","date_gmt":"2020-01-20T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/postgres-vtornik-5-postgresql-i-kubernetes-ci-cd-avtomatizatsiya-testirovaniya"},"modified":"2020-02-18T14:03:35","modified_gmt":"2020-02-18T11:03:35","slug":"postgres-vtornik-5-postgresql-i-kubernetes-ci-cd-avtomatizatsiya-testirovaniya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/postgres-vtornik-5-postgresql-i-kubernetes-ci-cd-avtomatizatsiya-testirovaniya","title":{"rendered":"Postgres-torek \u0161t. 5: 'PostgreSQL in Kubernetes. CI\/CD. Avtomatizacija testiranja'","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Postgres-torek \u0161t. 5: &#039;PostgreSQL in Kubernetes. CI\/CD. Avtomatizacija testiranja&#039;\" src=\"\/wp-content\/uploads\/2020\/01\/5eb8dd2afa4cab58a7359b305814d77f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa koncu prej\u0161njega leta je potekal \u0161e en neposredni prenos ruskega PostgreSQL dru\u0161tva <noindex><a rel=\"nofollow\" href=\"https:\/\/www.meetup.com\/postgresqlrussia\/\">#RuPostgres<\/a><\/noindex>, v okviru katerega je njegov soustanovitelj Nikolaj Samohvalov govoril s tehni\u010dnim direktorjem \u201eFlanta\u201c Dmitrijem Stolyarovim o tej SGBD v kontekstu Kubernetes.<\/p>\n<p>Objavljamo prepis glavnega dela te razprave, na <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/channel\/UC0SBGSNmBLrTZIkbN-lJHnw\">YouTube kanalu skupnosti<\/a><\/noindex> je objavljen celoten video zapis:<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"qXc9VTr4TFc\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/qXc9VTr4TFc\/hqdefault.jpg\" alt=\"Predvajaj video\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h2>Baze podatkov in Kubernetes<\/h2>\n<p>\n<i><b>NS<\/b>: \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u0440\u043e VACUUM \u0438 CHECKPOINT&#8217;\u044b. \u0425\u043e\u0442\u0438\u043c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e Kubernetes. \u042f \u0437\u043d\u0430\u044e, \u0447\u0442\u043e \u0443 \u0442\u0435\u0431\u044f \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u043b\u0435\u0442 \u043e\u043f\u044b\u0442\u0430. \u0421\u043c\u043e\u0442\u0440\u0435\u043b \u0442\u0432\u043e\u0438 \u0432\u0438\u0434\u0435\u043e \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u0436\u0435 \u043a\u0443\u0441\u043e\u0447\u043a\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u2026 \u0414\u0430\u0432\u0430\u0439 \u0441\u0440\u0430\u0437\u0443 \u0441 \u043c\u0435\u0441\u0442\u0430 \u0432 \u043a\u0430\u0440\u044c\u0435\u0440: \u0437\u0430\u0447\u0435\u043c \u0432\u043e\u043e\u0431\u0449\u0435 Postgres \u0438\u043b\u0438 MySQL \u0432 K8s?<\/i><\/p>\n<p><b>DS<\/b>: Enotnega odgovora na to vpra\u0161anje ni in tudi ne more biti. Vendar pa gre na splo\u0161no za enostavnost in udobje\u2026 potencialno. Vsem seveda \u017eeli, da bi imeli upravljane storitve.<\/p>\n<p><i><b>NS<\/b>: Tako kot <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/rds\/\">RDS<\/a><\/noindex>, samo pri sebi?<\/i><\/p>\n<p><b>DS<\/b>: Da: tako kot RDS, samo kjer koli.<\/p>\n<p><i><b>NS<\/b>: \u201eKjer koli\u201c \u2014 to je dobra pripomba. V velikih podjetjih je vse razporejeno na razli\u010dnih mestih. Zakaj torej, \u010de gre za veliko podjetje, ne bi vzeli \u017ee pripravljenega re\u0161itve? Na primer, Nutanix ima svoje re\u0161itve, druge dru\u017ebe (VMware\u2026) pa prav tako \u2014 \u201eRDS, samo pri sebi\u201c.<\/i><\/p>\n<p><b>DS<\/b>: A vendar govorimo o posamezni razli\u010dici, ki bo delovala le pod dolo\u010denimi pogoji. \u010ce pa govorimo o Kubernetesu, je tu ogromna razli\u010dnost infrastrukture (ki lahko obstaja v K8s). V bistvu je to standard za API do oblakov\u2026<\/p>\n<p><i><b>NS<\/b>: In \u0161e brezpla\u010dno!<\/i><\/p>\n<p><b>DS<\/b>: To ni tako pomembno. Brezpla\u010dnost je pomembna le za manj\u0161i segment trga. Pomembno je drugo\u2026 Verjetno se spomni\u0161 moje predstavitve \u201e<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/431500\/\">Baze podatkov in Kubernetes<\/a><\/noindex>\u00bb?<\/p>\n<p><i><b>NS<\/b>: Da.<\/i><\/p>\n<p><b>DS<\/b>: \u042f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0435\u0433\u043e \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e. \u0427\u0430\u0441\u0442\u044c \u043b\u044e\u0434\u0435\u0439 \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438, \u0447\u0442\u043e \u044f \u0433\u043e\u0432\u043e\u0440\u044e: \u00ab\u0420\u0435\u0431\u044f\u0442\u0430, \u043f\u043e\u0435\u0445\u0430\u043b\u0438 \u0432\u0441\u0435\u043c\u0438 \u0411\u0414 \u0432 Kubernetes!\u00bb, \u2014 \u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u0441\u0451 \u0436\u0443\u0442\u043a\u0438\u0435 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u044b. \u0410 \u044f-\u0442\u043e \u0445\u043e\u0442\u0435\u043b \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u043e \u0434\u0440\u0443\u0433\u043e\u043c: \u00ab\u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u0430\u043a\u0438\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u043a\u0430\u043a \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0430\u0442\u044c. \u0421\u0435\u0439\u0447\u0430\u0441 \u0435\u0445\u0430\u0442\u044c \u0431\u0430\u0437\u0430\u043c\u0438 \u0432 Kubernetes? Production&#8217;\u043e\u043c? \u041d\u0443, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u043b\u044e\u0431\u0438\u0442\u0435\u2026 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u0432\u0435\u0449\u0430\u043c\u0438. \u0410 \u0432\u043e\u0442 \u0434\u043b\u044f dev&#8217;\u0430 \u2014 \u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e. \u0414\u043b\u044f dev&#8217;\u0430 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f\/\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439\u00bb.<\/p>\n<p><i>\u041d\u0421: \u041f\u043e\u0434 dev&#8217;\u043e\u043c \u0442\u044b \u0438\u043c\u0435\u0435\u0448\u044c \u0432 \u0432\u0438\u0434\u0443 \u0432\u0441\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 prod? Staging, QA\u2026<\/i><\/p>\n<p><b>DS<\/b>: \u010ce govorimo o perf-stendih, verjetno ni ve\u010d, saj so tam zahteve specifi\u010dne. \u010ce govorimo o posebnih primerih, kjer je na stagingu potrebna zelo velika baza podatkov, potem tudi morda ne ... \u010ce gre za stati\u010dno okolje, ki dolgotrajno obstaja, kak\u0161na je torej korist, da je baza name\u0161\u010dena v K8s?<\/p>\n<p><i><b>NS<\/b>: Nobene. Ampak kje obi\u010dajno vidimo stati\u010dna okolja? Stati\u010dno okolje je \u017ee jutri zastaralo.<\/i><\/p>\n<p><b>DS<\/b>: Staging je lahko stati\u010den. Imamo stranke ...<\/p>\n<p><i><b>NS<\/b>: Ja, tudi jaz imam. Velik problem je, \u010de ima\u0161 bazo na 10 TB, staging pa 200 GB ...<\/i><\/p>\n<p><b>DS<\/b>: \u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u043e\u0439 \u043a\u0435\u0439\u0441! \u041d\u0430 staging \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f prod&#8217;\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u043d\u043e\u0441\u044f\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0418 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0430: \u00ab\u0432\u044b\u043a\u0430\u0442\u0438\u0442\u044c \u0432 production\u00bb. \u042d\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u2014 \u0434\u0435\u043b\u044c\u0442\u044b \u2014 \u0434\u043e\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f (\u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e API&#8217;\u0448\u043a\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f) \u0432 production. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<p><i><b>NS<\/b>: \u042f \u0432\u0438\u0434\u0435\u043b \u0441\u0442\u0430\u0440\u0442\u0430\u043f\u044b \u0432 \u0414\u043e\u043b\u0438\u043d\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0438\u0434\u044f\u0442 \u0432 RDS&#8217;\u0435 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0432 Heroku \u0435\u0449\u0451 \u2014 \u044d\u0442\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0438 2-3-\u043b\u0435\u0442\u043d\u0435\u0439 \u0434\u0430\u0432\u043d\u043e\u0441\u0442\u0438, \u2014 \u0438 \u043e\u043d\u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u044e\u0442 \u0434\u0430\u043c\u043f \u0441\u0435\u0431\u0435 \u043d\u0430 \u043b\u0430\u043f\u0442\u043e\u043f. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0431\u0430\u0437\u0430 \u043f\u043e\u043a\u0430 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c 80 \u0413\u0431, \u0430 \u043d\u0430 \u043b\u0430\u043f\u0442\u043e\u043f\u0435 \u0435\u0441\u0442\u044c \u043c\u0435\u0441\u0442\u043e. \u041f\u043e\u0442\u043e\u043c \u043e\u043d\u0438 \u0434\u043e\u043a\u0443\u043f\u0430\u044e\u0442 \u0434\u0438\u0441\u043a\u0438 \u043a\u0430\u0436\u0434\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043f\u043e 3 \u0431\u0430\u0437\u044b \u0438\u043c\u0435\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0435\u0441\u0442\u0438. \u0412\u043e\u0442 \u0442\u0430\u043a \u0431\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u0436\u0435. \u0422\u0430\u043a\u0436\u0435 \u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e \u043d\u0435 \u0431\u043e\u044f\u0442\u0441\u044f prod \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 staging \u2014 \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438. \u041d\u043e \u0432\u0438\u0434\u0435\u043b \u0438 \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u044f\u0442\u0441\u044f, \u0438 \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0440\u0443\u043a. \u041d\u043e \u043f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u043c\u044b \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435, \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c \u043f\u0440\u043e Kubernetes. \u042f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u0447\u0442\u043e \u0432 prod&#8217;\u0435 \u043f\u043e\u043a\u0430 \u043d\u0438 \u0443 \u043a\u043e\u0433\u043e?<\/i><\/p>\n<p><b>DS<\/b>: \u0423 \u043d\u0430\u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0431\u0430\u0437\u044b \u0435\u0441\u0442\u044c \u0432 prod&#8217;\u0435. \u0420\u0435\u0447\u044c \u043f\u0440\u043e \u043e\u0431\u044a\u0435\u043c\u044b \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442 \u0438 \u043d\u0435\u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043b\u0435\u043d\u044c \u0431\u044b\u043b\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0435\u043f\u043b\u0438\u043a\u0438 (\u0434\u0430 \u0438 \u043d\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438). \u0418 \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u043f\u043e\u0434 Kubernetes&#8217;\u043e\u043c \u0435\u0441\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u042d\u0442\u0430 \u0431\u0430\u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u2014 \u0443\u0441\u043b\u043e\u0432\u043d\u043e \u0432 VMware, \u043f\u043e\u0432\u0435\u0440\u0445 \u0421\u0425\u0414. \u041c\u044b \u0435\u0451 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043b\u0438 \u0432 <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/persistent-volumes\/\">PV<\/a><\/noindex> in zdaj jo lahko prena\u0161amo iz naprave v napravo.<\/p>\n<p><i><b>NS<\/b>: Baze tak\u0161ne velikosti, do 100 GB, na dobrih diskih in ob dobrem omre\u017eju, lahko razporedimo v nekaj minutah, prav? Hitrost 1 GB na sekundo ni ve\u010d eksotika.<\/i><\/p>\n<p><b>DS<\/b>: Ja, za linearno operacijo to ni te\u017eava.<\/p>\n<p><i><b>NS<\/b>: Okej, o produkciji moramo samo razmi\u0161ljati. Kaj pa, \u010de razmi\u0161ljamo o Kubernetesu za ne-prod okolja \u2014 kako nastaviti? Vidim, da v Zalando <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\">delajo operator<\/a><\/noindex>, v Crunchy <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/CrunchyData\/postgres-operator\">delajo<\/a><\/noindex>, obstajajo \u0161e druge mo\u017enosti. In tu je <noindex><a rel=\"nofollow\" href=\"https:\/\/ongres.com\/\">OnGres<\/a><\/noindex> \u2014 to je na\u0161 dober prijatelj Alvaro iz \u0160panije: oni ne delajo le <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/326414\/\">operator<\/a><\/noindex>, temve\u010d celoten distribucijski paket (<noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/ongresinc\/stackgres\">StackGres<\/a><\/noindex>), \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043c\u0438\u043c\u043e \u0441\u0430\u043c\u043e\u0433\u043e Postgres&#8217;\u0430 \u0435\u0449\u0451 \u0438 \u0431\u044d\u043a\u0430\u043f \u0440\u0435\u0448\u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0445\u0430\u0442\u044c, \u043f\u0440\u043e\u043a\u0441\u0438 Envoy\u2026<\/i><\/p>\n<p><b>DS<\/b>: Zakaj Envoy? Za uravnote\u017eenje prometa Postgres-a?<\/p>\n<p><i><b>NS<\/b>: Da. Torej to vidijo tako: \u010de vzamemo Linux distribucijo in jedro, potem je obi\u010dajni PostgreSQL jedro, oni pa \u017eelijo ustvariti distribucijo, ki bo prijazna oblaku in se bo vrtela v Kubernetesu. Povezujejo komponente (varnostne kopije itd.) in jih optimizirajo, da dobro delujejo.<\/i><\/p>\n<p><b>DS<\/b>: Zelo kul! V bistvu je to programska oprema za ustvarjanje svojega upravljanega Postgres-a.<\/p>\n<p><i><b>NS<\/b>: Pri Linux distribucijah so vedno te\u017eave: kako izdelati gonilnike, da bo podprta vsa strojna oprema. Njihova ideja je, da bodo delovali v Kubernetesu. Vem, da smo pri operaterju Zalando nedavno opazili vezavo na AWS in to \u017ee ni dobro. Ne bi smelo biti vezano na dolo\u010deno infrastrukturo \u2014 kak\u0161en je potem smisel?<\/i><\/p>\n<p><b>DS<\/b>: Ne vem, v kateri situaciji se je Zalando vezal, ampak trenutno je shranjevanje v Kubernetesu urejeno tako, da ni mogo\u010de splo\u0161no narediti diskovne varnostne kopije. Nedavno je v standardu \u2014 v zadnji razli\u010dici <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465417\/\">specifikacije CSI<\/a><\/noindex> \u2014 omogo\u010deno snemanje posnetkov, a kje je to implementirano? Iskreno, \u0161e vedno je tako nepredelano\u2026 Posku\u0161amo CSI nad AWS, GCE, Azure, vSphere, ampak takoj ko za\u010dne\u0161 uporabljati, je jasno, da \u0161e ni pripravljeno.<\/p>\n<p><i><b>NS<\/b>: Zato v\u010dasih moramo biti vezani na infrastrukturo. Mislim, da je to \u0161e vedno zgodnja faza \u2014 te\u017eave pri rasti. Vpra\u0161anje: kaj bi priporo\u010dil novincem, ki \u017eelijo preizkusiti PgSQL v K8s? Kak\u0161en operater, morda?<\/i><\/p>\n<p><b>DS<\/b>: \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e Postgres \u0434\u043b\u044f \u043d\u0430\u0441 \u2014 \u044d\u0442\u043e 3%. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0441\u043e\u0444\u0442\u0430 \u0432 Kubernetes, \u043d\u0435 \u0431\u0443\u0434\u0443 \u0434\u0430\u0436\u0435 \u0432\u0441\u0451 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Elasticsearch. \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u2014 \u043a\u0443\u0447\u0430: \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e, \u0434\u0440\u0443\u0433\u0438\u0435 \u2014 \u043d\u0435\u0442. \u041c\u044b \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f, \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0435, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0438 \u0435\u0433\u043e \u0432\u0441\u0435\u0440\u044c\u0451\u0437. \u0412 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f Kubernetes \u2014 \u043d\u0435 \u0432 \u00ab\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0435, \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 Amazon&#8217;\u0430\u00bb\u2026 \u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u043c\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0430\u0441\u0441\u043e\u0432\u043e (= \u043f\u043e\u0447\u0442\u0438 \u0443 \u0432\u0441\u0435\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spotahome\/redis-operator\">za Redis<\/a><\/noindex> <i>(kmalu bomo objavili \u010dlanek tudi o njem)<\/i>.<\/p>\n<p><i><b>NS<\/b>: A za MySQL tudi ni? Vem, da se Percona\u2026 ker sedaj obravnavajo tako MySQL, MongoDB, kot tudi Postgres, morajo razviti nek univerzalni sistem: za vse baze, za vse obla\u010dne ponudnike.<\/i><\/p>\n<p><b>DS<\/b>: Nismo uspeli pogledati operatore za MySQL. To trenutno nije na\u0161 glavni fokus. MySQL dobro radi u standalone re\u017eimu. Za\u0161to nam treba operator ako jednostavno mo\u017eemo pokrenuti bazu podataka\u2026 Mo\u017ee se pokrenuti Docker kontejner s Postrgesom, ili se to mo\u017ee u\u010diniti jednostavnije.<\/p>\n<p><i><b>NS<\/b>: O tome je tako\u0111er bilo pitanje. Uop\u0107e bez operatora?<\/i><\/p>\n<p><b>DS<\/b>: Da, 100% na\u0161 PostgreSQL se pokre\u0107e bez operatora. Za sada je to tako. Aktivno koristimo operator za Prometheus, za Redis. Planiramo prona\u0107i operator za Elasticsearch \u2014 to je najhitnije, jer ga \u017eelimo postaviti u Kubernetes u 100% slu\u010dajeva. Tako\u0111er \u017eelimo da MongoDB uvijek bude u Kubernetesu. Ovde se pojavljuju odre\u0111ene \u017eelje \u2014 imamo ose\u0107aj da se u ovim slu\u010dajevima mo\u017ee ne\u0161to uraditi. A za Postgres \u010dak nismo ni gledali. Naravno, znamo za postojanje razli\u010ditih opcija, ali u praksi imamo standalone.<\/p>\n<h2>Baza podataka za testiranje u Kubernetesu<\/h2>\n<p>\n<i><b>NS<\/b>: Pre\u0111imo na temu testiranja. Kako implementirati promene u bazi \u2014 iz perspektive DevOps-a. Postoje mikroservisi, mnogo baza, stalno se ne\u0161to menja. Kako osigurati normalan CI\/CD, tako da je sa stanovi\u0161ta DB sve u redu. Koji je tvoj pristup?<\/i><\/p>\n<p><b>DS<\/b>: Ne mo\u017ee biti jednog odgovora. Postoji nekoliko parametara. Prvi \u2014 to je veli\u010dina baze koju \u017eelimo implementirati. Sam si spomenuo da se u kompanijama razli\u010dito odnose prema tome da kopija production baze bude na dev i stage.<\/p>\n<p><i><b>NS<\/b>: A u uslovima GDPR-a, mislim da se sve vi\u0161e i vi\u0161e paze... Mogu re\u0107i da su u Evropi ve\u0107 po\u010deli da kazne.<\/i><\/p>\n<p><b>DS<\/b>: \u041d\u043e \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0444\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435\u043b\u0430\u0435\u0442 \u0434\u0430\u043c\u043f \u0441 production&#8217;\u0430 \u0438 \u0435\u0433\u043e \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u0443\u0435\u0442. \u041f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f prod&#8217;\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (\u0441\u043d\u0430\u043f\u0448\u043e\u0442, \u0434\u0430\u043c\u043f, \u0431\u0438\u043d\u0430\u0440\u043d\u0430\u044f \u043a\u043e\u043f\u0438\u044f\u2026), \u043d\u043e \u043e\u043d\u0438 \u0430\u043d\u043e\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438: \u044d\u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0444\u0438\u043a\u0441\u0442\u0443\u0440\u044b \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0431\u0430\u0437\u0443. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430-\u0442\u043e \u043a\u0430\u043a\u0430\u044f: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043e\u0431\u0440\u0430\u0437? \u0418 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043d\u0443\u0436\u043d\u043e\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438?<\/p>\n<p>Do\u0161li smo do sheme: ako klijent ima set podataka za fixture (minimalna verzija baze), po defaultu ih koristimo. Ako se radi o review okru\u017eenjima, kada smo kreirali branch, imamo instance aplikacije \u2014 tamo implementiramo malu bazu. Ali dobro je ispalo i <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/417509\/\">varijantu<\/a><\/noindex>, \u043a\u043e\u0433\u0434\u0430 \u0441 production&#8217;\u0430 \u0440\u0430\u0437 \u0432 \u0441\u0443\u0442\u043a\u0438 (\u043d\u043e\u0447\u044c\u044e) \u0441\u043d\u0438\u043c\u0430\u0435\u043c \u0434\u0430\u043c\u043f \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 PostgreSQL \u0438 MySQL \u0441 \u044d\u0442\u0438\u043c\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u0415\u0441\u043b\u0438 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u043d\u0430\u0434\u043e 50 \u0440\u0430\u0437 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0431\u0430\u0437\u0443, \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u0431\u044b\u0441\u0442\u0440\u043e.<\/p>\n<p><i><b>NS<\/b>: Preprosto kopiranje?<\/i><\/p>\n<p><b>DS<\/b>: Podatki so shranjeni neposredno v Docker sliki. Imamo torej pripravljeno sliko, recimo, da je velika 100 GB. Zaradi plasti v Dockerju lahko hitro razporedimo to sliko v potrebnem \u0161tevilu. Na\u010din je preprost, a deluje dobro.<\/p>\n<p><i><b>NS<\/b>: \u0414\u0430\u043b\u044c\u0448\u0435, \u043a\u043e\u0433\u0434\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0435, \u043e\u043d\u043e \u043f\u0440\u044f\u043c\u043e \u0432\u043d\u0443\u0442\u0440\u0438 Docker&#8217;\u0430 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u0434\u0430? Copy-on-write \u0432\u043d\u0443\u0442\u0440\u0438 Docker&#8217;\u0430 \u2014 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0438 \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u043e\u0435\u0445\u0430\u043b\u0438, \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e. \u041a\u043b\u0430\u0441\u0441! \u0418 \u0432\u044b \u044d\u0442\u043e \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0432\u043e\u0432\u0441\u044e?<\/i><\/p>\n<p><b>DS<\/b>: \u017de dolgo.<\/p>\n<p><i><b>NS<\/b>: \u041c\u044b \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u043c\u0438 \u0432\u0435\u0449\u0430\u043c\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f. \u0422\u043e\u043b\u044c\u043a\u043e \u043c\u044b \u043d\u0435 Docker&#8217;\u043e\u0432\u0441\u043a\u0438\u0439 copy-on-write \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c, \u0430 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0435\u0449\u0451.<\/i><\/p>\n<p><b>DS<\/b>: \u041e\u043d \u043d\u0435 generic. \u0410 Docker&#8217;\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0432\u0441\u0435\u043c\u0435\u0441\u0442\u043d\u043e.<\/p>\n<p><i><b>NS<\/b>: \u041f\u043e \u0438\u0434\u0435\u0435, \u0434\u0430. \u041d\u043e \u0443 \u043d\u0430\u0441 \u0442\u043e\u0436\u0435 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0438, \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438. \u0417\u0434\u0435\u0441\u044c \u043a\u0430\u043a\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u041c\u044b \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b Postgres&#8217;\u0430 \u043d\u0430 \u0432\u0441\u0451 \u044d\u0442\u043e \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0441\u043c\u043e\u0442\u0440\u0438\u043c. \u0422\u0435\u043f\u0435\u0440\u044c \u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b Docker&#8217;\u0430 \u0438 \u0443\u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u043e \u0435\u0441\u043b\u0438 \u0431\u0430\u0437\u0430 \u2014 \u043e\u0433\u0440\u043e\u043c\u043d\u0430\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 1 \u0422\u0431, \u0442\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0432\u0441\u0451 \u0434\u043e\u043b\u0433\u043e: \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u043e\u0447\u044c\u044e, \u0438 \u0437\u0430\u043f\u0438\u0445\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0432 Docker\u2026 \u0410 \u0435\u0441\u043b\u0438 5 \u0422\u0431 \u0437\u0430\u043f\u0438\u0445\u0438\u0432\u0430\u0442\u044c \u0432 Docker\u2026 \u0418\u043b\u0438 \u0432\u0441\u0451 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e?<\/i><\/p>\n<p><b>DS<\/b>: Kak\u0161na je razlika: to so le binarne datoteke, preprosto biti in bajti.<\/p>\n<p><i><b>NS<\/b>: Razlika je taka: to po\u010dnete preko dump in restore?<\/i><\/p>\n<p><b>DS<\/b>: Sploh ni nujno. Na\u010dini generiranja te slike so lahko razli\u010dni.<\/p>\n<p><i><b>NS<\/b>: \u0414\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0442\u0430\u043a, \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430 \u043c\u044b \u0435\u0433\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c \u0432 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438. \u041e\u043d \u043f\u043e \u0441\u0443\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u043f\u043b\u0438\u043a\u043e\u0439, \u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0435 \u0441 \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0430 \u0447\u0435\u0440\u0435\u0437 \u0430\u0440\u0445\u0438\u0432. \u0411\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0430\u0440\u0445\u0438\u0432, \u043a\u0443\u0434\u0430 WAL&#8217;\u044b \u043d\u0430\u043a\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c, \u0442\u0430\u043c \u0436\u0435 \u0431\u044d\u043a\u0430\u043f\u044b \u0441\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f\u2026 \u042d\u0442\u0438 WAL&#8217;\u044b \u043f\u043e\u0442\u043e\u043c \u0434\u043e\u043b\u0435\u0442\u0430\u044e\u0442 \u2014 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439 (\u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e 1-2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b) \u2014 \u0434\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430. \u0421 \u043d\u0435\u0433\u043e \u043c\u044b \u043b\u044e\u0431\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c \u2014 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0443 \u043d\u0430\u0441 ZFS.<\/i><\/p>\n<p><b>DS<\/b>: Ampak z ZFS ste omejeni na eno vozli\u0161\u010de.<\/p>\n<p><i><b>NS<\/b>: Ja. Ampak ZFS ima \u0161e \u010darobno <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.oracle.com\/cd\/E18752_01\/html\/819-5461\/gbchx.html\">send<\/a><\/noindex>: z njim lahko po\u0161ljete posnetek in celo (to \u0161e nisem prav testiral, ampak\u2026) lahko po\u0161iljate razliko med dvema <code>PGDATA<\/code>. V resnici imamo \u0161e en instrument, ki ga nismo prav razmi\u0161ljali za tak\u0161ne naloge. V PostgreSQL obstaja <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/12\/app-pgrewind.html\">pg_rewind<\/a><\/noindex>, deluje kot \u201epameten\u201c rsync, ki presko\u010di veliko tistega, kar ni nujno gledati, ker se tam ni ni\u010d spremenilo. Med dvema stre\u017enikoma lahko hitro sinhroniziramo in se natan\u010dno vrnemo nazaj.<\/i><\/p>\n<p><i>\u0422\u0430\u043a \u0432\u043e\u0442, \u043c\u044b \u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u0441 \u044d\u0442\u043e\u0439, \u0431\u043e\u043b\u0435\u0435 DBA&#8217;\u043d\u043e\u0439, \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043e \u0447\u0451\u043c \u0442\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043b: \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u0431\u0430\u0437\u0430, \u043d\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c 50 \u0440\u0430\u0437 \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0443\u0442\u044c \u043b\u0438 \u043d\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/i><\/p>\n<p><b>DS<\/b>: 50 \u0440\u0430\u0437 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043a\u0430\u0437\u0430\u0442\u044c 50 Spot&#8217;\u043e\u0432\u044b\u0445 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432.<\/p>\n<p><i><b>NS<\/b>: Ne, vse dela na eni napravi.<\/i><\/p>\n<p><b>DS<\/b>: Ampak kako boste razporedili 50-krat, \u010de je ta ena baza, recimo, terabajtna. Najverjetneje potrebuje pribli\u017eno 256 GB RAM-a?<\/p>\n<p><i><b>NS<\/b>: Da, v\u010dasih potrebujemo veliko pomnilnika - to je normalno. Ampak to je primer iz prakse. Na produkcijski napravi imamo 96 jeder in 600 GB. Pri tem uporablja 32 jeder (tudi 16 jeder v\u010dasih) in 100-120 GB pomnilnika za BDP.<\/i><\/p>\n<p><b>DS<\/b>: In tam gre 50 kopij?<\/p>\n<p><i><b>NS<\/b>: \u0422\u0430\u043a \u043a\u043e\u043f\u0438\u044f-\u0442\u043e \u043e\u0434\u043d\u0430, \u0434\u0430\u043b\u044c\u0448\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 copy-on-write (ZFS&#8217;\u043d\u044b\u0439)\u2026 \u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.<\/i><\/p>\n<p><i>Na\u0161a baza ima na primer 10 TB. Disk zanj smo naredili, ZFS pa je \u0161e zmanj\u0161al velikost za 30-40%. Ker ne izvajamo obremenitvenega testiranja, nam natan\u010den odzivni \u010das ni pomemben: lahko je do 2-krat po\u010dasnej\u0161i - to je v redu.<\/i><\/p>\n<p><i>\u041c\u044b \u0434\u0430\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\u043c, QA, DBA \u0438 \u0442.\u043f. \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 1-2 \u043f\u043e\u0442\u043e\u043a\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e. \u041e\u043d\u0430 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 10 \u044f\u0434\u0435\u0440 \u2014 \u0435\u0439 \u043d\u0443\u0436\u0435\u043d 1 \u0431\u044d\u043a\u0435\u043d\u0434 Postgres&#8217;\u0430, 1 \u044f\u0434\u0440\u043e. \u041c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f \u2014 \u043c\u043e\u0436\u0435\u0442, <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/12\/routine-vacuuming.html#AUTOVACUUM\">autovacuum<\/a><\/noindex> \u0161e ena se bo zagnala, takrat se vklju\u010di drugo jedro. Imamo dodeljenih 16-32 jeder, tako da lahko 10 oseb dela hkrati, brez te\u017eav.<\/i><\/p>\n<p><i>Ker so fizi\u010dno <code>PGDATA<\/code> \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0430\u044f, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a, \u0447\u0442\u043e \u043c\u044b \u043e\u0431\u043c\u0430\u043d\u044b\u0432\u0430\u0435\u043c Postgres \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435. \u0424\u0438\u0448\u043a\u0430 \u0432 \u0447\u0435\u043c: \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 10 Postgres&#8217;\u043e\u0432 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u043a\u0430\u043a\u0430\u044f? \u0421\u0442\u0430\u0432\u044f\u0442 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/runtime-config-resource.html\">shared_buffers<\/a><\/noindex>, recimo, na 25%. Tako je to 200 GB. Ve\u010d kot tri take ne more\u0161 zagnati, ker zmanjka pomnilnika.<\/i><\/p>\n<p><i>Ampak v nekem trenutku smo ugotovili, da to ni potrebno: nastavljamo shared_buffers na 2 GB. PostgreSQL ima <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/runtime-config-query.html#GUC-EFFECTIVE-CACHE-SIZE\">effective_cache_size<\/a><\/noindex>, in v resnici samo ta vpliva na <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Query_plan\">na\u010drte<\/a><\/noindex>. Ta je nastavljen na 0,5 TB. In ni pomembno, da dejansko ni: gradi na\u010drte, kot da so.<\/i><\/p>\n<p><i>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u043b\u0430\u043d\u044b \u2014 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u043a\u0430\u043a \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 production. \u0421\u0435\u043a\u0443\u043d\u0434\u044b \u0442\u0430\u043c \u0431\u0443\u0434\u0443\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 (\u0442\u043e\u0440\u043c\u043e\u0437\u043d\u0435\u0435), \u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c, \u0438 \u0441\u0430\u043c\u0438 \u043f\u043b\u0430\u043d\u044b (\u043a\u0430\u043a\u0438\u0435 \u0442\u0430\u043c JOIN&#8217;\u044b \u0438 \u0442.\u043f.) \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0438\u043c\u0438 \u0436\u0435, \u043a\u0430\u043a \u043d\u0430 production. \u0418 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435.<\/i><\/p>\n<p><b>DS<\/b>: Ne misli\u0161, da tukaj obstaja ve\u010d te\u017eav? Prva je re\u0161itev, ki deluje samo na PostgreSQL. Tak pristop je zelo specifi\u010den, ni generi\u010den. Druga te\u017eava je, da Kubernetes (in vse, kamor zdaj gredo obla\u010dne tehnologije) predpostavlja ve\u010d vozli\u0161\u010d, ta vozli\u0161\u010da pa so efemerna. V tvojem primeru pa gre za stateful, persistentno vozli\u0161\u010de. Te stvari me motijo.<\/p>\n<p><i><b>NS<\/b>: \u041f\u0435\u0440\u0432\u043e\u0435 \u2014 \u0441\u043e\u0433\u043b\u0430\u0441\u0435\u043d, \u044d\u0442\u043e \u0447\u0438\u0441\u0442\u043e Postgres&#8217;\u043e\u0432\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f. \u0414\u0443\u043c\u0430\u044e, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c direct IO \u0438 \u0431\u0443\u0444\u0435\u0440\u043d\u044b\u0439 \u043f\u0443\u043b \u043f\u043e\u0447\u0442\u0438 \u043f\u043e\u0434 \u0432\u0441\u044e \u043f\u0430\u043c\u044f\u0442\u044c, \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 \u2014 \u043f\u043b\u0430\u043d\u044b \u0431\u0443\u0434\u0443\u0442 \u0434\u0440\u0443\u0433\u0438\u0435. \u041d\u043e \u043c\u044b \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 Postgres&#8217;\u043e\u043c \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c, \u043f\u0440\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u043d\u0435 \u0434\u0443\u043c\u0430\u0435\u043c.<\/i><\/p>\n<p><i>Kar se ti\u010de Kubernetesa. Saj sam povsod govori\u0161, da imamo trajno bazo. \u010ce instanca propade, je klju\u010dno ohraniti disk. Na\u0161a celotna platforma deluje v Kubernetesu, komponenta s PostgreSQL pa je lo\u010dena (\u010deprav bo tudi ta enkrat tam). Zato je tako: instanca je propadla, a mi smo ohranili njen PV in preprosto priklju\u010dili k drugi (novi) instanci, kot da se ni\u010d ni zgodilo.<\/i><\/p>\n<p><b>DS<\/b>: \u0421 \u043c\u043e\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f, \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u043c pod&#8217;\u044b \u0432 Kubernetes. K8s \u2014 \u044d\u043b\u0430\u0441\u0442\u0438\u0447\u043d\u044b\u0439: \u0443\u0437\u043b\u044b \u0437\u0430\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u0438 \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0417\u0430\u0434\u0430\u0447\u0430 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c pod \u0438 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e X \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 K8s \u0441\u0430\u043c \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u0442\u0441\u044f. \u041d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 \u0432 Kubernetes \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0430: \u0432 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/467477\/\">1.16<\/a><\/noindex>, v <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/476998\/\">1.17<\/a><\/noindex> (ta izdaja je iz\u0161la <i>pred tednom<\/i> dni) te funkcije postajajo le beta.<\/p>\n<p>\u041f\u0440\u043e\u0439\u0434\u0435\u0442 \u043f\u043e\u043b\u0433\u043e\u0434\u0430-\u0433\u043e\u0434 \u2014 \u043e\u043d\u043e \u0441\u0442\u0430\u043d\u0435\u0442 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c, \u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043e \u0442\u0430\u043a\u043e\u0432\u044b\u043c. \u0422\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u043e\u0432 \u0438 resize&#8217;\u0430 \u0443\u0436\u0435 \u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u0430\u0448\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0431\u0430\u0437\u0430. \u0414\u0430, \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e\u0439, \u043d\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u00ab\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c\u00bb, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u043c\u0435\u044e\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 copy-on-write \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p><i><b>NS<\/b>: Tukaj pa je \u0161e potrebno, da vsi pogoni (Amazon, Google\u2026) za\u010dnejo podpirati to razli\u010dico \u2014 to tudi vzame nekaj \u010dasa.<\/i><\/p>\n<p><b>DS<\/b>: Zaenkrat je ne uporabljamo. Uporabljamo svoje.<\/p>\n<h2>Lokalni razvoj pod Kubernetes<\/h2>\n<p>\n<i><b>NS<\/b>: \u0421\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f \u043b\u0438 \u0442\u044b \u0441 \u0442\u0430\u043a\u043e\u0439 \u0445\u043e\u0442\u0435\u043b\u043a\u043e\u0439, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0432\u0441\u0435 pod&#8217;\u044b \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0427\u0442\u043e\u0431\u044b \u043f\u043e-\u0431\u044b\u0441\u0442\u0440\u043e\u043c\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c proof of concept, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 Kubernetes, \u043d\u0435 \u0432\u044b\u0434\u0435\u043b\u044f\u044f \u043f\u043e\u0434 \u044d\u0442\u043e \u043a\u0443\u0447\u0443 \u043c\u0430\u0448\u0438\u043d. \u0415\u0441\u0442\u044c Minikube, \u0434\u0430?<\/i><\/p>\n<p><b>DS<\/b>: Je pense que ce cas - le d\u00e9ploiement sur un n\u0153ud - concerne exclusivement le d\u00e9veloppement local. Ou certains aspects d'un tel mod\u00e8le. Il y a <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/333470\/\">Minikube<\/a><\/noindex>, il y a <noindex><a rel=\"nofollow\" href=\"https:\/\/k3s.io\/\">k3s<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/kind\">KIND<\/a><\/noindex>. Nous allons utiliser Kubernetes IN Docker. Nous avons commenc\u00e9 \u00e0 travailler avec pour les tests.<\/p>\n<p><i><b>NS<\/b>: \u042f \u0440\u0430\u043d\u044c\u0448\u0435 \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0437\u0430\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435 pod&#8217;\u044b \u0432 \u043e\u0434\u0438\u043d Docker-\u043e\u0431\u0440\u0430\u0437. \u041d\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043e \u0434\u0440\u0443\u0433\u043e\u043c. \u0412\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0442\u0430\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 pod&#8217;\u044b \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0432 Docker&#8217;\u0435.<\/i><\/p>\n<p><b>DS<\/b>: Oui. Et ils ont r\u00e9alis\u00e9 une imitation assez amusante, mais le sens est le suivant\u2026 Nous avons un utilitaire pour le d\u00e9ploiement - <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/\">werf<\/a><\/noindex>. Nous voulons y ajouter un mode - disons <code>werf up<\/code>: \u00abLance moi un Kubernetes local\u00bb. Et ensuite, lancer un certain <code>werf follow<\/code>. Ainsi, le d\u00e9veloppeur pourra modifier dans l'IDE, tandis qu'un processus est en cours dans le syst\u00e8me, d\u00e9tectant les modifications et reconstruisant les images, les red\u00e9ployant dans K8s local. C'est ainsi que nous voulons essayer de r\u00e9soudre le probl\u00e8me du d\u00e9veloppement local.<\/p>\n<h2>Snapshots et clonage de DB dans les r\u00e9alit\u00e9s de K8s<\/h2>\n<p>\n<i><b>NS<\/b>: \u0415\u0441\u043b\u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a copy-on-write. \u042f \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u0443 \u043e\u0431\u043b\u0430\u043a\u043e\u0432 \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u044b. \u041e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 GCP: \u0443 \u0442\u0435\u0431\u044f \u043d\u0430 \u0432\u043e\u0441\u0442\u043e\u0447\u043d\u043e\u043c \u043f\u043e\u0431\u0435\u0440\u0435\u0436\u044c\u0435 \u0421\u0428\u0410 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u0442\u0435\u0440\u0430\u0431\u0430\u0439\u0442\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0430\u043d\u0441. \u0414\u0435\u043b\u0430\u0435\u0448\u044c \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u044b. \u041f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0448\u044c \u0438\u0437 \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u0430 \u043a\u043e\u043f\u0438\u044e \u0434\u0438\u0441\u043a\u0430 \u043d\u0430 \u0437\u0430\u043f\u0430\u0434\u043d\u043e\u043c \u043f\u043e\u0431\u0435\u0440\u0435\u0436\u044c\u0435 \u2014 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442 \u0443\u0436\u0435 \u0432\u0441\u0451 \u0433\u043e\u0442\u043e\u0432\u043e, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u044d\u0448 \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u041d\u043e \u044d\u0442\u0438 \u043a\u043b\u043e\u043d\u044b (\u0441\u043d\u0430\u043f\u0448\u043e\u0442\u044b) \u2014 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430&#8217;provision&#8217;\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0442\u043e\u043c. \u042d\u0442\u043e \u043a\u0440\u0443\u0442\u043e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u0442\u044c.<\/i><\/p>\n<p><i>\u0410 \u0432\u043e\u0442 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432, \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0441\u043d\u0430\u043f\u0448\u043e\u0442\u044b, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0448\u044c \u0432 Docker&#8217;\u0435 \u0438\u043b\u0438 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u0432 ZFS, btrfs \u0438 \u0434\u0430\u0436\u0435 LVM\u2026 \u2014 \u043e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043a\u0430\u043a \u0440\u0430\u0437 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043d\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0412 \u043e\u0431\u043b\u0430\u043a\u0435 \u0442\u044b \u0435\u0449\u0451 \u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0437\u0430 \u043d\u0438\u0445 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u0448\u044c \u0438 \u0436\u0434\u0430\u0442\u044c \u0443\u0436\u0435 \u043d\u0435 \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0430 \u043c\u0438\u043d\u0443\u0442\u044b (\u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/about-aws\/whats-new\/2019\/11\/amazon-ebs-fast-snapshot-restore-eliminates-need-for-prewarming-data-into-volumes-created-snapshots\/\">lazy load&#8217;\u0430<\/a><\/noindex>, peut-\u00eatre m\u00eame des heures).<\/i><\/p>\n<p><i>Au lieu de cela, vous pouvez obtenir ces donn\u00e9es en une ou deux secondes, ex\u00e9cuter le test et les jeter. Ces snapshots r\u00e9solvent des t\u00e2ches diff\u00e9rentes. Dans le premier cas - pour \u00e9voluer et obtenir de nouvelles r\u00e9pliques, et dans le second - pour des tests.<\/i><\/p>\n<p><b>DS<\/b>: Ne strinjam se. Uroumeniti normalno kloniranje volumnov \u2014 to je naloga oblaka. Nisem gledal njihove implementacije, a vem, kako to delamo na strojni opremi. Imamo Ceph, v njem lahko kateremu koli fizi\u010dnemu volumnu (<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ceph.com\/docs\/master\/rbd\/\">RBD<\/a><\/noindex>) re\u010demo <i>clone<\/i> in za nekaj deset milisekund dobimo drugi volumen z enakimi specifikacijami, <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/IOPS\">IOPS<\/a><\/noindex>&#8216;\u0430\u043c\u0438 \u0438 \u0442.\u043f. \u041d\u0430\u0434\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043c \u0432\u043d\u0443\u0442\u0440\u0438 \u0445\u0438\u0442\u0440\u044b\u0439 copy-on-write. \u041f\u043e\u0447\u0435\u043c\u0443 \u043e\u0431\u043b\u0430\u043a\u0443 \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a \u0436\u0435? \u0423\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u043e\u043d\u0438 \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0441\u0442\u0430\u0440\u0430\u044e\u0442\u0441\u044f \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<p><i><b>NS<\/b>: A vendar jim kljub vsemu minejo sekunde, desetine sekund, da dvignejo instanco, prinesejo tja Docker itd.<\/i><\/p>\n<p><b>DS<\/b>: Zakaj bi morali dvigovati celo instanco? Imamo instanco z 32 jedri, z 16 ... in vanjo se lahko spravi dolo\u010deno \u0161tevilo \u2014 na primer \u0161tiri. Ko naro\u010dimo peto, se \u017ee dvigne instanca, nato pa se izbri\u0161e.<\/p>\n<p><i><b>NS<\/b>: Da, zanimivo, v Kubernetesu je zgodba druga\u010dna. Na\u0161a baza podatkov ni v K8s, in imamo samo eno instanco. Vendar pa za kloniranje ve\u010dterabajtne baze ne porabimo ve\u010d kot dve sekundi.<\/i><\/p>\n<p><b>DS<\/b>: To je super. Ampak moja prvotna misel je bila, da to ni generi\u010dna re\u0161itev. Da, je odli\u010dna, vendar deluje samo za Postgres in le na enem vozli\u0161\u010du.<\/p>\n<p><i><b>NS<\/b>: Ni primerno samo za Postgres: ti plani, kot sem opisoval, bodo tako delovali samo v njem. Ampak \u010de se ne obremenjujemo s plani, ampak potrebujemo vse podatke za funkcionalno testiranje, potem je to primerno za katerikoli DBMS.<\/i><\/p>\n<p><b>DS<\/b>: Pred mnogimi leti smo delali podobno na LVM-snapshotih. To je klasika. Tak pristop je bil zelo aktivno uporabljen. Preprosto stateful vozli\u0161\u010da \u2014 to je te\u017eava. Ker jih ne smemo spraviti dol, vedno jih moramo imeti v mislih ...<\/p>\n<p><i><b>NS<\/b>: Ali ne vidi\u0161 tukaj kak\u0161ne mo\u017enosti hibrida? Recimo, stateful \u2014 to je nek pod, deluje na ve\u010d ljudeh (mnogi testerji). Imamo en volumen, ampak zahvaljujo\u010d datote\u010dnemu sistemu so kloni \u2014 lokalni. \u010ce pod pade, disk ostane \u2014 pod se ponovno dvigne, informacije o vseh klonih se preberejo, vse se vrne nazaj in re\u010de: 'Tukaj so va\u0161i kloni na teh vratih, delajte z njimi naprej.'<\/i><\/p>\n<p><b>DS<\/b>: \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 Kubernetes \u044d\u0442\u043e \u043e\u0434\u0438\u043d pod, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043c\u043d\u043e\u0433\u043e Postgres&#8217;\u043e\u0432.<\/p>\n<p><i><b>NS<\/b>: Da. Ima omejitev: recimo, hkrati ne delajo ve\u010d kot 10 ljudi. \u010ce je potrebno 20 \u2014 bomo zagnali drugi taki pod. Popolnoma se da klonirati, pridobiti drugi poln volumen, na njem bo 10 'tankih' klonov. Ne vidi\u0161 te mo\u017enosti?<\/i><\/p>\n<p><b>DS<\/b>: \u041d\u0430\u0434\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u044e\u0434\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u0422\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0443 \u044d\u0442\u043e\u0433\u043e pod&#8217;\u0430 \u0432\u044b\u0441\u043e\u043a\u0438\u0435 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438 (capabilities), \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439\u2026 \u041d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044e\u0441\u044c: \u044f \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u0441\u0440\u043e\u0447\u043d\u043e\u0439 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0435 \u0432 Kubernetes \u043f\u043e\u0447\u0438\u043d\u044f\u0442 storage, \u0432 \u043e\u0431\u043b\u0430\u043a\u0430\u0445 \u043f\u043e\u0447\u0438\u043d\u044f\u0442 \u0432\u0441\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0441 \u0442\u043e\u043c\u0430\u043c\u0438 \u00ad\u2014 \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u00ab\u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c\u00bb. \u0411\u0443\u0434\u0435\u0442 resize, \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u2026 \u0415\u0441\u0442\u044c \u0442\u043e\u043c \u2014 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c: \u00ab\u0421\u043e\u0437\u0434\u0430\u0439 \u043d\u043e\u0432\u044b\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u043e\u0433\u043e\u00bb, \u2014 \u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u043b\u0442\u043e\u0440\u044b \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0447\u0442\u043e \u043d\u0430\u0434\u043e.<\/p>\n<p><i><b>NS<\/b>: Ne vjerujem u pola sekunde za mnoge terabajte. Na Ceph-u to radi\u0161 sam, a govori\u0161 o oblacima. Idi u oblak, na EC2 napravi klon volumen EBS s mnogo terabajta i vidi kakva \u0107e performansa biti. To ne\u0107e trajati nekoliko sekundi. Jako me zanima kada \u0107e do\u0107i do takvog pokazatelja. Razumijem o \u010demu govori\u0161, ali \u0107u se usuditi ne slo\u017eiti.<\/i><\/p>\n<p><b>DS<\/b>: U redu, ali rekao sam da u srednjoro\u010dnom razdoblju, ne kratkoro\u010dnom. Tijekom nekoliko godina.<\/p>\n<h2>O operatoru za PostgreSQL od Zalanda<\/h2>\n<p>\nSredinom ovog sastanka pridru\u017eio se i Aleksej Kljukin, biv\u0161i programer iz tvrtke Zalando, koji je ispri\u010dao povijest operatora PostgreSQL:<\/p>\n<blockquote><p>Super je \u0161to se uop\u0107e dotakla ova tema: i Postgres i Kubernetes. Kada smo po\u010deli raditi na tome u Zalandu 2017. godine, to je bila tema kojom su svi htjeli baviti, ali nitko nije radio. Svi su ve\u0107 imali Kubernetes, ali kada su pitali kako s bazama podataka, \u010dak su i takvi ljudi kao <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kelseyhightower\">Kelsey Hightower<\/a><\/noindex>, koji su propovijedali K8s, govorili otprilike sljede\u0107e:<\/p>\n<p><i>\u2018Idite u upravljane usluge i koristite ih, nemojte pokretati BDP u Kubernetesu. Ina\u010de \u0107e va\u0161 K8s odlu\u010diti, na primjer, napraviti nadogradnju, ugasiti sve \u010dvorove, a va\u0161i podaci oti\u0107i daleko, daleko\u2019.<\/i><\/p>\n<p>Odlu\u010dili smo stvoriti operatora koji \u0107e, unato\u010d tom savjetu, pokretati BDP Postgres u Kubernetesu. I imali smo dobru osnovu \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/patroni\">Patroni<\/a><\/noindex>. \u042d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 failover \u0434\u043b\u044f PostgreSQL, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0442.\u0435. \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 etcd, consul \u0438\u043b\u0438 ZooKeeper \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435. \u0422\u0430\u043a\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a\u043e\u0439 \u0441\u0435\u0439\u0447\u0430\u0441 \u043b\u0438\u0434\u0435\u0440, \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u2014 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0432\u0441\u0451 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435, \u2014 \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u043e split brain&#8217;\u0430. \u041f\u043b\u044e\u0441, \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/patroni\/tree\/master\/docker\">Docker-sliko<\/a><\/noindex> zanj.<\/p>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435, \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432 auto failover \u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0441\u043b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0438\u0437 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u0430 \u0432 \u043e\u0431\u043b\u0430\u043a\u043e. \u041e\u0431\u043b\u0430\u043a\u043e \u0431\u044b\u043b\u043e \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438 PaaS (Platform-as-a-Service). \u041e\u043d\u043e Open Source&#8217;\u043d\u043e\u0435, \u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043f\u043e\u0434\u043d\u044f\u0442\u044c, \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0442\u0440\u0443\u0434\u0438\u0442\u044c\u0441\u044f. \u041d\u0430\u0437\u044b\u0432\u0430\u043b\u043e\u0441\u044c <noindex><a rel=\"nofollow\" href=\"https:\/\/stups.io\/\">STUPS<\/a><\/noindex>.<\/p>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e Kubernetes&#8217;\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e. \u0422\u043e\u0447\u043d\u0435\u0435, \u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, K8s \u0443\u0436\u0435 \u0431\u044b\u043b, \u043d\u043e \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0441\u044b\u0440\u044b\u043c, \u0447\u0442\u043e \u0434\u043b\u044f production \u043d\u0435 \u0433\u043e\u0434\u0438\u043b\u0441\u044f. \u042d\u0442\u043e \u0431\u044b\u043b, \u043f\u043e-\u043c\u043e\u0435\u043c\u0443, 2015 \u0438\u043b\u0438 2016 \u0433\u043e\u0434. \u041a 2017-\u043c\u0443 \u0433\u043e\u0434\u0443 Kubernetes \u0441\u0442\u0430\u043b \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0437\u0440\u0435\u043b\u044b\u043c \u2014 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0442\u0443\u0434\u0430.<\/p>\n<p>Ve\u0107 smo imali Docker kontejner. Postojala je PaaS koja je koristila Docker. Za\u0161to ne probati K8s? Za\u0161to ne napisati vlastiti operator? Murat Kabilov, koji nam je do\u0161ao iz Avita, zapo\u010deo je to kao projekat po vlastitoj inicijativi \u2014 \"za zabavu\" \u2014 i projekat je \"procvao\".<\/p>\n<p>Ali zapravo sam hteo govoriti o AWS-u. Za\u0161to je tamo istorijski bio kod vezan za AWS...<\/p>\n<p>Kada pokre\u0107ete ne\u0161to u Kubernetesu, treba razumeti da je K8s u stalnom razvoju. Kontinuirano se unapre\u0111uje i povremeno se \u010dak i kvari. Potrebno je pa\u017eljivo pratiti sve promene u Kubernetesu, biti spreman u slu\u010daju potrebe da se dublje upoznate sa njim i nau\u010dite kako sve to funkcioni\u0161e u detalje \u2014 mo\u017eda \u010dak vi\u0161e nego \u0161to biste \u017eeleli. To va\u017ei za svaku platformu na kojoj pokre\u0107ete svoje baze podataka...<\/p>\n<p>Dakle, kada smo radili operator, imali smo Postgres koji je radio s eksternim volumenom (u ovom slu\u010daju \u2014 EBS, po\u0161to smo radili na AWS-u). Baza podataka je rasla, u jednom trenutku je bilo potrebno uraditi resize: na primer, inicijalna veli\u010dina EBS-a je bila 100 TB, baza je dostigla tu veli\u010dinu, a sada \u017eelimo pove\u0107ati EBS na 200 TB. Kako? Pretpostavimo, mo\u017eemo uraditi dump\/restore na novi instancu, ali to je dug proces i uzrokuje zastoje.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0442\u0430\u043a\u043e\u0439 resize, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b EBS&#8217;\u0430 \u0438 \u043f\u043e\u0442\u043e\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e. \u0418 \u043c\u044b \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b\u0438, \u043d\u043e \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0443 Kubernetes&#8217;\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e API \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 resize&#8217;\u0430. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043d\u0430 AWS, \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043a\u043e\u0434 \u0434\u043b\u044f \u0435\u0433\u043e API.<\/p>\n<p>Niko ne spre\u010dava da se isto uradi za druge platforme. U operatoru nema zavisnosti da se mo\u017ee pokrenuti samo na AWS-u, nego mo\u017ee raditi i na svim ostalim platformama. U su\u0161tini, to je Open Source projekat: ako neko \u017eeli da ubrza kori\u0161\u0107enje novog API-ja \u2014 dobrodo\u0161li. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\">GitHub<\/a><\/noindex>, pull-requests \u2013 ekipa Zalando se trudi da na njih reaguje prili\u010dno brzo i unapre\u0111uje operatera. koliko znam, projekat <noindex><a rel=\"nofollow\" href=\"https:\/\/summerofcode.withgoogle.com\/archive\/2019\/organizations\/6187982082539520\/\">je u\u010destvovao<\/a><\/noindex> u Google Summer of Code i nekim sli\u010dnim inicijativama. Zalando aktivno radi na tome.\n<\/p><\/blockquote>\n<p><\/p>\n<h2>P.S. Bonus!<\/h2>\n<p>\nAko vas zanima tema PostgreSQL i Kubernetes, tako\u0111e skre\u0107emo pa\u017enju da je pro\u0161le nedelje odr\u017ean slede\u0107i Postgres-torak, gde se Nikolaj razgovarao sa <b>Aleksandrom Kuku\u0161kinom iz Zalando<\/b>. Video je dostupan <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=FE0xi7SBqsg\">ovde<\/a><\/noindex>.<\/p>\n<h2>P.P.S.<\/h2>\n<p>\nPreberite tudi na na\u0161em blogu:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/431500\/\">Baze podatkov in Kubernetes (pregled in video predavanja)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/475036\/\">Migracija Cassandra v Kubernetes: posebnosti in re\u0161itve<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/461149\/\">Zapletena migracija MongoDB v Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/450662\/\">Neprekidna migracija RabbitMQ u Kubernetes<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/479438\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u043c\u0438\u043d\u0443\u0432\u0448\u0435\u0433\u043e \u0433\u043e\u0434\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0441\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0433\u043e PostgreSQL-\u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 #RuPostgres, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0433\u043e \u0441\u043e\u043e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u041d\u0438\u043a\u043e\u043b\u0430\u0439 \u0421\u0430\u043c\u043e\u0445\u0432\u0430\u043b\u043e\u0432 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0441 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u00ab\u0424\u043b\u0430\u043d\u0442\u0430\u00bb \u0414\u043c\u0438\u0442\u0440\u0438\u0435\u043c \u0421\u0442\u043e\u043b\u044f\u0440\u043e\u0432\u044b\u043c \u043f\u0440\u043e \u044d\u0442\u0443 \u0421\u0423\u0411\u0414 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 Kubernetes. \u041c\u044b \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u0435\u043c \u0441\u0442\u0435\u043d\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044d\u0442\u043e\u0439 \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438, \u0430 \u043d\u0430 YouTube-\u043a\u0430\u043d\u0430\u043b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u0430 \u043f\u043e\u043b\u043d\u0430\u044f \u0432\u0438\u0434\u0435\u043e\u0437\u0430\u043f\u0438\u0441\u044c: \u0411\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 Kubernetes \u041d\u0421: \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u0440\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":55468,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-55467","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.4 - aioseo.com -->\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\/sl\/blog\/administrirovanie\/postgres-vtornik-5-postgresql-i-kubernetes-ci-cd-avtomatizatsiya-testirovaniya\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\udd47Postgres-\u0432\u0442\u043e\u0440\u043d\u0438\u043a \u21165: \u00abPostgreSQL \u0438 Kubernetes. CI\/CD. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00bb | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/postgres-vtornik-5-postgresql-i-kubernetes-ci-cd-avtomatizatsiya-testirovaniya\" \/>\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-01-20T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:03:35+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\udd47Postgres-torak br. 5: \u201ePostgreSQL i Kubernetes. CI\/CD. Automatizacija testiranja\u201c | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/postgres-vtornik-5-postgresql-i-kubernetes-ci-cd-avtomatizatsiya-testirovaniya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\udd47Postgres-\u0432\u0442\u043e\u0440\u043d\u0438\u043a \u21165: \u00abPostgreSQL \u0438 Kubernetes. CI\/CD. \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00bb | ProHoster","og:url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/postgres-vtornik-5-postgresql-i-kubernetes-ci-cd-avtomatizatsiya-testirovaniya","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-01-20T21:00:00+00:00","article:modified_time":"2020-02-18T11:03:35+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55467","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 19:43:31","updated":"2022-10-06 02:34:09","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/55467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=55467"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/55467\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/55468"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=55467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=55467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=55467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}