{"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\/sv\/blog\/administrirovanie\/postgres-vtornik-5-postgresql-i-kubernetes-ci-cd-avtomatizatsiya-testirovaniya","title":{"rendered":"Postgres-tisdag nr 5: 'PostgreSQL och Kubernetes. CI\/CD. Automatisering av tester.'","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Postgres-tisdag nr 5: &#039;PostgreSQL och Kubernetes. CI\/CD. Automatisering av tester.&#039;\" src=\"\/wp-content\/uploads\/2020\/01\/5eb8dd2afa4cab58a7359b305814d77f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI slutet av f\u00f6rra \u00e5ret h\u00f6lls \u00e4nnu ett direkts\u00e4nt evenemang av det ryska PostgreSQL-samh\u00e4llet <noindex><a rel=\"nofollow\" href=\"https:\/\/www.meetup.com\/postgresqlrussia\/\">#RuPostgres<\/a><\/noindex>, d\u00e4r medgrundaren Nikolaj Samokhvalov pratade med teknikchefen f\u00f6r \"Flanta\", Dmitrij Stoljarev, om denna DBMS i kontexten av Kubernetes.<\/p>\n<p>Vi publicerar en transkription av den huvudsakliga delen av denna diskussion, och p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/channel\/UC0SBGSNmBLrTZIkbN-lJHnw\">YouTube-kanalen f\u00f6r samh\u00e4llet<\/a><\/noindex> har den fullst\u00e4ndiga videoinspelningen publicerats:<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=\"Spela 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>Databaser och 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>: Det finns inget entydigt svar p\u00e5 den fr\u00e5gan. Men \u00f6verlag handlar det om enkelhet och bekv\u00e4mlighet... potentiellt. Alla vill ju ha managed-tj\u00e4nster.<\/p>\n<p><i><b>NS<\/b>: S\u00e5 att man kan <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/rds\/\">RDS<\/a><\/noindex>, men bara f\u00f6r sig sj\u00e4lv?<\/i><\/p>\n<p><b>DS<\/b>: Ja, s\u00e5 som RDS, bara var som helst.<\/p>\n<p><i><b>NS<\/b>: \"Var som helst\" \u2014 det \u00e4r en bra po\u00e4ng. I stora f\u00f6retag finns allt spritt p\u00e5 olika platser. Men varf\u00f6r skulle man, om det \u00e4r ett stort f\u00f6retag, inte v\u00e4lja en f\u00e4rdig l\u00f6sning? Till exempel har Nutanix sina egna utvecklingar, andra f\u00f6retag (VMware...) har likadana \"RDS, bara f\u00f6r sig sj\u00e4lv\".<\/i><\/p>\n<p><b>DS<\/b>: Men det h\u00e4r pratar vi om en specifik implementation som kommer att fungera endast under vissa f\u00f6ruts\u00e4ttningar. Om vi pratar om Kubernetes s\u00e5 finns det en enorm variation i infrastrukturen (som kan finnas i K8s). I grund och botten \u00e4r det en standard f\u00f6r API till molnet...<\/p>\n<p><i><b>NS<\/b>: Och dessutom gratis!<\/i><\/p>\n<p><b>DS<\/b>: Det \u00e4r inte s\u00e5 viktigt. Att det \u00e4r gratis \u00e4r inte s\u00e5 viktigt f\u00f6r en stor del av marknaden. Det viktiga \u00e4r n\u00e5got annat... Du kanske minns min presentation \"<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/431500\/\">Databaser och Kubernetes<\/a><\/noindex>\u00bb?<\/p>\n<p><i><b>NS<\/b>: Ja.<\/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>: N\u00e4r det g\u00e4ller perf-st\u00e4nder, s\u00e5 tror jag att det nog inte finns l\u00e4ngre, eftersom kraven d\u00e4r \u00e4r specifika. Om vi pratar om s\u00e4rskilda fall d\u00e4r en mycket stor databas beh\u00f6vs p\u00e5 staging, s\u00e5 \u00e4r svaret nog ocks\u00e5 nej... Om det \u00e4r en statisk milj\u00f6, som \u00e4r l\u00e5nglivad, vad \u00e4r d\u00e5 vinsten med att databasen ligger i K8s?<\/p>\n<p><i><b>NS<\/b>: Ingen. Men var ser vi statiska milj\u00f6er? En statisk milj\u00f6 \u00e4r redan gammal imorgon.<\/i><\/p>\n<p><b>DS<\/b>: Staging kan vara statisk. Vi har kunder...<\/p>\n<p><i><b>NS<\/b>: Ja, jag har ocks\u00e5 n\u00e5gra. Det \u00e4r ett stort problem om du har en databas p\u00e5 10 TB, men staging \u00e4r 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> och nu kan vi flytta den mellan maskiner.<\/p>\n<p><i><b>NS<\/b>: Databaser av denna storlek, upp till 100 GB, p\u00e5 bra diskar och med bra n\u00e4tverk kan distribueras p\u00e5 n\u00e5gra minuter, eller hur? En hastighet p\u00e5 1 GB i sekunden \u00e4r redan ingen exotik.<\/i><\/p>\n<p><b>DS<\/b>: Ja, f\u00f6r linj\u00e4ra operationer \u00e4r det inget problem.<\/p>\n<p><i><b>NS<\/b>: Okej, vi m\u00e5ste bara t\u00e4nka p\u00e5 prod. Men om vi \u00f6verv\u00e4ger Kubernetes f\u00f6r icke-prod-milj\u00f6er \u2013 hur g\u00f6r vi d\u00e5? Jag ser att Zalando <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\">g\u00f6r en operator<\/a><\/noindex>, i Crunchy <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/CrunchyData\/postgres-operator\">utvecklar<\/a><\/noindex>, finns det n\u00e5gra andra alternativ. Och det finns <noindex><a rel=\"nofollow\" href=\"https:\/\/ongres.com\/\">OnGres<\/a><\/noindex> \u2013 v\u00e5r goda v\u00e4n Alvaro fr\u00e5n Spanien: de g\u00f6r i princip inte bara <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/326414\/\">operat\u00f6r<\/a><\/noindex>, utan en hel distribution (<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>: Varf\u00f6r Envoy? F\u00f6r att balansera just Postgres-trafik?<\/p>\n<p><i><b>NS<\/b>: Ja. S\u00e5 de ser detta som: om vi tar en Linux-distribution och k\u00e4rnan, s\u00e5 \u00e4r vanlig PostgreSQL k\u00e4rnan, och de vill skapa en distribution som \u00e4r v\u00e4nlig mot molnet och kan k\u00f6ras i Kubernetes. De kopplar ihop komponenter (backuper osv.) och justerar dem s\u00e5 att de fungerar bra.<\/i><\/p>\n<p><b>DS<\/b>: V\u00e4ldigt coolt! Det \u00e4r i grunden mjukvara f\u00f6r att skapa sin egen hanterade Postgres.<\/p>\n<p><i><b>NS<\/b>: Linux-distributioner har st\u00e4ndiga problem: hur man g\u00f6r drivrutiner s\u00e5 att all h\u00e5rdvara st\u00f6ds. Deras id\u00e9 \u00e4r att de ska fungera i Kubernetes. Jag vet att vi nyligen s\u00e5g en koppling till AWS i Zalando-operat\u00f6ren och det \u00e4r inte s\u00e5d\u00e4r j\u00e4ttebra. Det borde ju inte vara en koppling till en specifik infrastruktur \u2014 vad skulle d\u00e5 syftet vara?<\/i><\/p>\n<p><b>DS<\/b>: Jag vet inte i vilken situation Zalando kopplade, men i Kubernetes \u00e4r lagringssystemet just nu gjort s\u00e5 att man inte kan ta en diskbackup p\u00e5 ett generiskt s\u00e4tt. Nyligen i standarden \u2014 i den senaste versionen <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465417\/\">CSI-specifikationer<\/a><\/noindex> \u2014 s\u00e5 \u201dgjorde\u201d de m\u00f6jligheten till snapshots, men var har den implementerats? \u00c4rligt talat, det \u00e4r fortfarande s\u00e5 r\u00e5tt\u2026 Vi f\u00f6rs\u00f6ker CSI ovanp\u00e5 AWS, GCE, Azure, vSphere, men s\u00e5 fort man b\u00f6rjar anv\u00e4nda det ser man att det \u00e4nnu inte \u00e4r klart.<\/p>\n<p><i><b>NS<\/b>: D\u00e4rf\u00f6r tvingas man ibland koppla p\u00e5 infrastruktur. Jag tror det fortfarande \u00e4r i ett tidigt stadium \u2014 tillv\u00e4xtproblem. Fr\u00e5gan \u00e4r: vad skulle du rekommendera nyb\u00f6rjare som vill prova PgSQL i K8s? Vilken operat\u00f6r, kanske?<\/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\">f\u00f6r Redis<\/a><\/noindex> <i>(snart publicerar vi en artikel om den ocks\u00e5)<\/i>.<\/p>\n<p><i><b>NS<\/b>: Men f\u00f6r MySQL finns det ingen heller? Jag vet att Percona\u2026 eftersom de nu sysslar med b\u00e5de MySQL, MongoDB och Postgres, de borde skapa n\u00e5gon form av universell l\u00f6sning: f\u00f6r alla databaser, f\u00f6r alla molnleverant\u00f6rer.<\/i><\/p>\n<p><b>DS<\/b>: Vi har inte haft tid att titta p\u00e5 operat\u00f6rer f\u00f6r MySQL. F\u00f6r oss \u00e4r det inte det viktigaste just nu. MySQL fungerar bra som frist\u00e5ende. Varf\u00f6r en operat\u00f6r, n\u00e4r du bara kan k\u00f6ra databasen... Du kan k\u00f6ra en Docker-container med PostgreSQL, eller s\u00e5 kan du bara k\u00f6ra den enkelt.<\/p>\n<p><i><b>NS<\/b>: Det var ocks\u00e5 en fr\u00e5ga. Helt utan operat\u00f6r?<\/i><\/p>\n<p><b>DS<\/b>: Ja, vi har 100% PostgreSQL som k\u00f6rs utan operat\u00f6r. S\u00e5 \u00e4r det \u00e4n s\u00e5 l\u00e4nge. Vi anv\u00e4nder aktivt operat\u00f6ren f\u00f6r Prometheus och Redis. Vi planerar att hitta en operat\u00f6r f\u00f6r Elasticsearch \u2013 det \u00e4r det som \u201dbrinner mest\u201d, eftersom vi vill kunna installera det i Kubernetes i 100% av fallen. Liksom vi vill att MongoDB alltid ska installeras i Kubernetes. Det finns vissa \u00f6nskem\u00e5l \u2013 det k\u00e4nns som om man kan g\u00f6ra n\u00e5got i dessa fall. Men vi har inte ens tittat p\u00e5 Postgres. Sj\u00e4lvklart vet vi om olika alternativ, men i praktiken har vi frist\u00e5ende.<\/p>\n<h2>Databas f\u00f6r testning i Kubernetes<\/h2>\n<p>\n<i><b>NS<\/b>: L\u00e5t oss g\u00e5 vidare till testning. Hur rullar man ut f\u00f6r\u00e4ndringar i databasen \u2013 sett fr\u00e5n en DevOps-perspektiv. Det finns mikrotj\u00e4nster, m\u00e5nga databaser, hela tiden f\u00f6r\u00e4ndras n\u00e5got n\u00e5gonstans. Hur s\u00e4kerst\u00e4ller man en bra CI\/CD s\u00e5 att allt \u00e4r i ordning ur databassynpunkt? Vad \u00e4r din metod?<\/i><\/p>\n<p><b>DS<\/b>: Det kan inte finnas ett enda svar. Det finns flera faktorer. Den f\u00f6rsta \u00e4r storleken p\u00e5 databasen som vi vill rulla ut. Du n\u00e4mnde att f\u00f6retag har olika inst\u00e4llningar till att kopian av produktionsdatabasen ska finnas p\u00e5 dev och staging.<\/p>\n<p><i><b>NS<\/b>: Och under GDPR, tror jag att de hanterar det mer och mer varsamt... Jag kan s\u00e4ga att i Europa har man redan b\u00f6rjat b\u00f6tf\u00e4lla.<\/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>Vi har kommit fram till en modell: om kunden har ett fixtures dataset (minimal version av databasen), s\u00e5 anv\u00e4nder vi dem som standard. F\u00f6r review-milj\u00f6er, n\u00e4r vi har skapat en branch, s\u00e5 har vi en instans av applikationen som rullas ut \u2013 vi l\u00e4gger in en liten databas d\u00e4r. Men det blev bra och <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/417509\/\">en variant<\/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>: Enkelt genom att kopiera?<\/i><\/p>\n<p><b>DS<\/b>: Data lagras direkt i Docker-bilden. Det vill s\u00e4ga, vi har en f\u00e4rdig bild, l\u00e5t oss s\u00e4ga p\u00e5 100 GB. Tack vare lagren i Docker kan vi snabbt bygga upp denna bild det antal g\u00e5nger vi beh\u00f6ver. Metoden \u00e4r enkel, men fungerar ganska bra.<\/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>: L\u00e4ngesedan.<\/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>: Vad spelar det f\u00f6r roll: det \u00e4r ju blobbar, bara bitar och byte.<\/p>\n<p><i><b>NS<\/b>: Skillnaden \u00e4r: g\u00f6r ni det genom dump och \u00e5terst\u00e4llning?<\/i><\/p>\n<p><b>DS<\/b>: Inte n\u00f6dv\u00e4ndigtvis. Metoderna f\u00f6r att generera denna bild kan variera.<\/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>: Men med ZFS \u00e4r ni begr\u00e4nsade till en nod.<\/p>\n<p><i><b>NS<\/b>: Ja. Men med ZFS finns det ocks\u00e5 en magisk <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.oracle.com\/cd\/E18752_01\/html\/819-5461\/gbchx.html\">send<\/a><\/noindex>: med den kan man skicka en snapshot och till och med (jag har inte testat detta s\u00e5 mycket \u00e4n, men...) kan man skicka en delta mellan tv\u00e5 <code>PGDATA<\/code>. Faktum \u00e4r att vi har ett annat verktyg som vi inte har \u00f6verv\u00e4gt s\u00e5 mycket f\u00f6r s\u00e5dana uppgifter. I PostgreSQL finns det <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/12\/app-pgrewind.html\">pg_rewind<\/a><\/noindex>, som fungerar som en \"smart\" rsync och hoppar \u00f6ver mycket som man kan skippa, eftersom det inte har \u00e4ndrats \u00f6verhuvudtaget. Vi kan snabbt synkronisera mellan tv\u00e5 servrar och backa tillbaka p\u00e5 exakt samma s\u00e4tt.<\/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>: Nej, allt g\u00f6rs p\u00e5 en maskin.<\/i><\/p>\n<p><b>DS<\/b>: Men hur ska ni rulla ut 50 g\u00e5nger om just den databasen, s\u00e4g, \u00e4r terabyte-stor? Den beh\u00f6ver nog typ 256 GB RAM?<\/p>\n<p><i><b>NS<\/b>: Ja, ibland beh\u00f6vs mycket minne \u2014 det \u00e4r normalt. Men h\u00e4r \u00e4r ett exempel fr\u00e5n verkligheten. P\u00e5 produktionsmaskinen har vi 96 k\u00e4rnor och 600 GB. F\u00f6r databasen anv\u00e4nds 32 k\u00e4rnor (\u00e4ven 16 k\u00e4rnor ibland nu) och 100-120 GB minne.<\/i><\/p>\n<p><b>DS<\/b>: Och ryms 50 kopior d\u00e4r?<\/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>Vi har till exempel en databas p\u00e5 10 TB. Vi gjorde disken f\u00f6r den, och ZFS komprimerade storleken med cirka 30-40%. Eftersom vi inte g\u00f6r belastningstest \u00e4r vi inte intresserade av exakt svarstid: det kan vara upp till 2 g\u00e5nger l\u00e5ngsammare \u2014 det \u00e4r okej.<\/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> en annan startar, d\u00e5 anv\u00e4nds den andra k\u00e4rnan. Vi har tilldelat 16-32 k\u00e4rnor, s\u00e5 10 personer kan arbeta samtidigt, inga problem.<\/i><\/p>\n<p><i>Eftersom fysiskt <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>, l\u00e5t oss s\u00e4ga, vid 25%. S\u00e5 det blir 200 GB. Mer \u00e4n tre s\u00e5dana kan man inte starta, f\u00f6r d\u00e5 tar minnet slut.<\/i><\/p>\n<p><i>Men vi ins\u00e5g p\u00e5 n\u00e5got s\u00e4tt att det inte beh\u00f6vdes: vi s\u00e4tter shared_buffers till 2 GB. PostgreSQL har <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/runtime-config-query.html#GUC-EFFECTIVE-CACHE-SIZE\">effective_cache_size<\/a><\/noindex>, och egentligen p\u00e5verkar bara det <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Query_plan\">planerna<\/a><\/noindex>. Vi s\u00e4tter det till 0,5 TB. Och det spelar ingen roll att de faktiskt inte finns: den bygger planer som om de fanns.<\/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>: Tycker du inte att det h\u00e4r finns n\u00e5gra problem? Det f\u00f6rsta \u2014 det h\u00e4r \u00e4r en l\u00f6sning som bara fungerar p\u00e5 PostgreSQL. Denna metod \u00e4r mycket specifik, den \u00e4r inte generell. Den andra \u2014 Kubernetes (och allt som g\u00e5r mot molnteknologier nu) f\u00f6ruts\u00e4tter m\u00e5nga noder, och dessa noder \u00e4r flyktiga. I ditt fall \u00e4r det en stateful, persistent nod. Dessa saker v\u00e4cker mots\u00e4gelser f\u00f6r mig.<\/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>Om Kubernetes. Du s\u00e4ger ju sj\u00e4lv \u00f6verallt att v\u00e5r databas \u00e4r persistent. Om instansen kraschar, \u00e4r det viktigaste att spara disken. V\u00e5r plattform \u00e4r ocks\u00e5 helt i Kubernetes, och komponenten med Postgres \u00e4r separat (\u00e4ven om den en dag kommer att vara d\u00e4r). S\u00e5 h\u00e4r \u00e4r det: instansen kraschar, men vi har sparat dess PV och helt enkelt kopplat den till en annan (ny) instans, som om ingenting har h\u00e4nt.<\/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>, i <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/476998\/\">1.17<\/a><\/noindex> (den h\u00e4r versionen sl\u00e4pptes <i>veckor<\/i> sedan) blir dessa funktioner bara en 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>: H\u00e4r m\u00e5ste vi ocks\u00e5 se till att alla motorer (Amazon, Google\u2026) har b\u00f6rjat st\u00f6dja denna version \u2014 det tar ju ocks\u00e5 tid.<\/i><\/p>\n<p><b>DS<\/b>: F\u00f6r tillf\u00e4llet anv\u00e4nder vi dem inte. Vi anv\u00e4nder v\u00e5r egen.<\/p>\n<h2>Lokal utveckling f\u00f6r 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>: Jag tycker att det h\u00e4r fallet \u2014 att rulla ut p\u00e5 en nod \u2014 handlar uteslutande om lokal utveckling. Eller kanske n\u00e5gra manifestationer av det m\u00f6nstret. Det finns <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/333470\/\">Minikube<\/a><\/noindex>, det finns <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>. Vi g\u00e5r mot att anv\u00e4nda Kubernetes IN Docker. Vi har just b\u00f6rjat arbeta med det f\u00f6r tester.<\/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>: Ja. Det finns en ganska rolig imitation d\u00e4r, men po\u00e4ngen \u00e4r att\u2026 Vi har ett verktyg f\u00f6r distribution \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/\">werf<\/a><\/noindex>. Vi vill g\u00f6ra ett l\u00e4ge i det \u2014 hypotetiskt <code>werf up<\/code>: \u00abStarta min lokala Kubernetes\u00bb. Och sen starta en hypotetisk <code>werf follow<\/code>. D\u00e5 kan utvecklaren redigera i IDE, medan det i systemet k\u00f6rs en process som ser \u00e4ndringar och bygger om bilder, distribuerar dem till lokal K8s. S\u00e5 vill vi f\u00f6rs\u00f6ka l\u00f6sa problemet med lokal utveckling.<\/p>\n<h2>Snapshots och kloning av databaser i K8s-realiteten<\/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>, m\u00f6jligtvis i timmar).<\/i><\/p>\n<p><i>Ist\u00e4llet kan du f\u00e5 dessa data p\u00e5 en eller tv\u00e5 sekunder, k\u00f6ra ditt test och kasta bort det. Dessa snapshots l\u00f6ser olika uppgifter. I det f\u00f6rsta fallet \u2014 f\u00f6r att kunna skala upp och f\u00e5 nya repliker, och i det andra \u2014 f\u00f6r tester.<\/i><\/p>\n<p><b>DS<\/b>: Jag h\u00e5ller inte med. Att g\u00f6ra en korrekt kloning av volymer \u00e4r en uppgift f\u00f6r molnet. Jag har inte sett deras implementation, men jag vet hur vi g\u00f6r det p\u00e5 h\u00e5rdvara. Vi har Ceph, och i det kan man s\u00e4ga till vilken fysisk volym som helst (<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ceph.com\/docs\/master\/rbd\/\">RBD<\/a><\/noindex>) och f\u00e5 en andra volym med samma egenskaper p\u00e5 bara n\u00e5gra tiotals millisekunder, <i>clone<\/i> IOPS <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/IOPS\">och s\u00e5 vidare. Man m\u00e5ste f\u00f6rst\u00e5 att det d\u00e4r inne \u00e4r en smart copy-on-write. Varf\u00f6r skulle inte molnet kunna g\u00f6ra detsamma? Jag \u00e4r s\u00e4ker p\u00e5 att de p\u00e5 ett eller annat s\u00e4tt f\u00f6rs\u00f6ker g\u00f6ra det.<\/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>: Varf\u00f6r m\u00e5ste man n\u00f6dv\u00e4ndigtvis starta en hel instans? Vi har en instans med 32 k\u00e4rnor, med 16... och den rymmer ett visst antal \u2014 till exempel fyra. N\u00e4r vi best\u00e4ller den femte kommer en instans att starta, och sen kommer den att tas bort.<\/i><\/p>\n<p><b>DS<\/b>: Ja, intressant, i Kubernetes \u00e4r det en annan historia. Vi har inte databasen i K8s, utan en enda instans. Men att klona en flerterrabytes databas tar inte mer \u00e4n tv\u00e5 sekunder.<\/p>\n<p><i><b>NS<\/b>: Det \u00e4r fantastiskt. Men min ursprungliga po\u00e4ng \u00e4r att detta inte \u00e4r en generisk l\u00f6sning. Ja, det \u00e4r bra, men det passar bara Postgres och bara p\u00e5 en nod.<\/i><\/p>\n<p><b>DS<\/b>: Det passar inte bara f\u00f6r Postgres: det h\u00e4r \u00e4r planer, som jag beskrev, kommer bara att fungera s\u00e5 i den. Men om man inte bryr sig om planerna, utan bara beh\u00f6ver all data f\u00f6r funktionell testning, d\u00e5 fungerar det med vilken databas som helst.<\/p>\n<p><i><b>NS<\/b>: F\u00f6r m\u00e5nga \u00e5r sedan gjorde vi n\u00e5got liknande med LVM-snapshots. Det \u00e4r klassiskt. Denna metod anv\u00e4ndes mycket aktivt. Men stateful-noder \u00e4r en utmaning. F\u00f6r de m\u00e5ste man alltid ha koll p\u00e5 och inte l\u00e5ta dem falla.<\/i><\/p>\n<p><b>DS<\/b>: Ser du inte h\u00e4r n\u00e5gon m\u00f6jlighet f\u00f6r ett hybrid? L\u00e5t oss s\u00e4ga, stateful \u2014 det \u00e4r en pod av n\u00e5got slag, den arbetar med flera personer (m\u00e5nga testare). Vi har en volym, men tack vare filsystemet \u00e4r klonerna lokala. Om podden kraschar, s\u00e5 finns disken kvar \u2014 podden kommer att starta igen, l\u00e4sa informationen om alla kloner, \u00e5terst\u00e4lla allt och s\u00e4ga: 'H\u00e4r \u00e4r era kloner startade p\u00e5 dessa portar, jobba vidare med dem.'<\/p>\n<p><i><b>NS<\/b>: Teknisk sett inneb\u00e4r det att det inom Kubernetes \u00e4r en pod d\u00e4r vi k\u00f6r flera Postgres.<\/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>: Ja.<\/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>: Jag tror inte p\u00e5 en och en halv sekund f\u00f6r m\u00e5nga terabyte. I Ceph g\u00f6r du det sj\u00e4lv, men du pratar om moln. G\u00e5 till molnet, g\u00f6r en kloning av en EBS-volym p\u00e5 m\u00e5nga terabyte p\u00e5 EC2 och se vilken prestanda du f\u00e5r. Det kommer inte att ta n\u00e5gra sekunder. Jag \u00e4r mycket intresserad av n\u00e4r de n\u00e5r den niv\u00e5n. Jag f\u00f6rst\u00e5r vad du pratar om, men jag till\u00e5ter mig att inte h\u00e5lla med.<\/i><\/p>\n<p><b>DS<\/b>: Okej, men jag sa att det handlar om medell\u00e5ng sikt, inte kortsiktig. Inom n\u00e5gra \u00e5r.<\/p>\n<h2>Om PostgreSQL-operat\u00f6ren fr\u00e5n Zalando<\/h2>\n<p>\nVid mitten av detta m\u00f6te ansl\u00f6t sig ocks\u00e5 Alexey Klyukin, en tidigare utvecklare fr\u00e5n Zalando, som ber\u00e4ttade om historien om PostgreSQL-operat\u00f6ren:<\/p>\n<blockquote><p>Det \u00e4r bra att detta \u00e4mne \u00f6verhuvudtaget togs upp: b\u00e5de Postgres och Kubernetes. N\u00e4r vi b\u00f6rjade arbeta med det i Zalando 2017 var det ett \u00e4mne som alla ville syssla med, men ingen gjorde det. Alla hade redan b\u00f6rjat anv\u00e4nda Kubernetes, men n\u00e4r man fr\u00e5gade hur man skulle hantera databaser, s\u00e5 sa till och med s\u00e5dana personer som <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kelseyhightower\">Kelsey Hightower<\/a><\/noindex>, som predikade K8s, ungef\u00e4r f\u00f6ljande:<\/p>\n<p><i>\"G\u00e5 till managed-tj\u00e4nster och anv\u00e4nd dem, k\u00f6r inte databaser i Kubernetes. Annars kommer din K8s att till exempel besluta att g\u00f6ra en uppgradering, st\u00e4nga av alla noder, och dina data kommer att \u00e5ka l\u00e5ngt bort.\"<\/i><\/p>\n<p>Vi beslutade oss f\u00f6r att g\u00f6ra en operat\u00f6r som, trots detta r\u00e5d, skulle k\u00f6ra Postgres-databaser i Kubernetes. Och vi hade en god grund \u2013 <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-image<\/a><\/noindex> f\u00f6r den.<\/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>Och vi hade redan en Docker-container. Det fanns en PaaS som anv\u00e4nde Docker. Varf\u00f6r inte prova K8s? Varf\u00f6r inte skriva v\u00e5r egen operator? Murat Kabilov, som kom till oss fr\u00e5n Avito, startade detta som ett initiativ \u2014 f\u00f6r att \"leka\", \u2014 och projektet \"fl\u00f6g\".<\/p>\n<p>Men jag ville egentligen ber\u00e4tta om AWS. Varf\u00f6r det historiskt sett fanns kod kopplad till AWS...<\/p>\n<p>N\u00e4r du startar n\u00e5got i Kubernetes m\u00e5ste du f\u00f6rst\u00e5 att K8s \u00e4r ett s\u00e5dant work in progress. Det utvecklas st\u00e4ndigt, f\u00f6rb\u00e4ttras och ibland g\u00e5r det till och med s\u00f6nder. Du m\u00e5ste noggrant f\u00f6lja alla \u00e4ndringar i Kubernetes, vara beredd p\u00e5 att dyka ner i det och f\u00f6rst\u00e5 hur det fungerar i detalj - kanske mer \u00e4n du skulle vilja. Detta g\u00e4ller i princip f\u00f6r vilken plattform som helst d\u00e4r du k\u00f6r dina databaser...<\/p>\n<p>S\u00e5 n\u00e4r vi skapade operatorn hade vi en Postgres som arbetade med ett externt volume (i det h\u00e4r fallet - EBS, eftersom vi arbetade i AWS). Databasen v\u00e4xte, och vid n\u00e5got tillf\u00e4lle beh\u00f6vde vi g\u00f6ra en resize: exempelvis, den ursprungliga storleken p\u00e5 EBS var 100 TB, databasen hade v\u00e4xt till den storleken, nu ville vi g\u00f6ra EBS till 200 TB. Hur? Naturligtvis kan man g\u00f6ra dump\/restore till en ny instans, men det \u00e4r tidskr\u00e4vande och inneb\u00e4r driftstopp.<\/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>Ingen hindrar en fr\u00e5n att g\u00f6ra samma sak f\u00f6r andra plattformar. I operatorn finns det ingen koppling som s\u00e4ger att den bara kan k\u00f6ras p\u00e5 AWS, och att den inte kommer att fungera p\u00e5 n\u00e5got annat. S\u00e5, det \u00e4r ett Open Source-projekt: om n\u00e5gon vill p\u00e5skynda anv\u00e4ndningen av det nya API:et \u2013 vars\u00e5god. Det finns <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\">GitHub<\/a><\/noindex>, pull-f\u00f6rfr\u00e5gningar \u2013 Zalando-teamet f\u00f6rs\u00f6ker reagera ganska snabbt p\u00e5 dem och fr\u00e4mja operat\u00f6ren. S\u00e5vitt jag vet, projektet <noindex><a rel=\"nofollow\" href=\"https:\/\/summerofcode.withgoogle.com\/archive\/2019\/organizations\/6187982082539520\/\">deltog<\/a><\/noindex> i Google Summer of Code och n\u00e5gra andra liknande initiativ. Zalando arbetar mycket aktivt med det.\n<\/p><\/blockquote>\n<p><\/p>\n<h2>P.S. Bonus!<\/h2>\n<p>\nOm du \u00e4r intresserad av \u00e4mnet PostgreSQL och Kubernetes, s\u00e5 vill vi ocks\u00e5 uppm\u00e4rksamma att f\u00f6rra veckan h\u00f6lls n\u00e4sta Postgres-tisdag, d\u00e4r Nikolaj hade ett samtal med <b>Alexander Kukushkin fr\u00e5n Zalando<\/b>. Inspelningen finns tillg\u00e4nglig <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=FE0xi7SBqsg\">h\u00e4r<\/a><\/noindex>.<\/p>\n<h2>P.P.S.<\/h2>\n<p>\nL\u00e4s \u00e4ven i v\u00e5r blogg:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/431500\/\">Databaser och Kubernetes (\u00f6versikt och videof\u00f6rel\u00e4sning)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/475036\/\">Migrering av Cassandra till Kubernetes: s\u00e4rdrag och l\u00f6sningar<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/461149\/\">Enkla migreringar av MongoDB till Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/450662\/\">En utmanande migrering av RabbitMQ till Kubernetes<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>K\u00e4lla: <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\/sv\/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=\"sv_SE\" \/>\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\/sv\/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-tisdag nr 5: \"PostgreSQL och Kubernetes. CI\/CD. Automatisering av testning\" | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/postgres-vtornik-5-postgresql-i-kubernetes-ci-cd-avtomatizatsiya-testirovaniya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/55467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=55467"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/55467\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/55468"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=55467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=55467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=55467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}