{"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\/de\/blog\/administrirovanie\/postgres-vtornik-5-postgresql-i-kubernetes-ci-cd-avtomatizatsiya-testirovaniya","title":{"rendered":"Postgres-Dienstag Nr. 5: \u201ePostgreSQL und Kubernetes. CI\/CD. Automatisierung von Tests\u201c","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Postgres-Dienstag Nr. 5: \u201ePostgreSQL und Kubernetes. CI\/CD. Automatisierung von Tests\u201c\" src=\"\/wp-content\/uploads\/2020\/01\/5eb8dd2afa4cab58a7359b305814d77f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEnde letzten Jahres fand eine weitere Live-\u00dcbertragung der russischen PostgreSQL-Community statt <noindex><a rel=\"nofollow\" href=\"https:\/\/www.meetup.com\/postgresqlrussia\/\">#RuPostgres<\/a><\/noindex>, in deren Rahmen Mitbegr\u00fcnder Nikolai Samokhvalov mit dem technischen Direktor von \u201eFlant\u201c Dmitry Stolyarov \u00fcber diese DBMS im Kontext von Kubernetes sprach.<\/p>\n<p>Wir ver\u00f6ffentlichen das Transkript des Hauptteils dieser Diskussion, und auf <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/channel\/UC0SBGSNmBLrTZIkbN-lJHnw\">dem YouTube-Kanal der Community<\/a><\/noindex> wurde die vollst\u00e4ndige Videoaufzeichnung ver\u00f6ffentlicht:<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=\"Video abspielen\" 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>Datenbanken und 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>: Es gibt keine eindeutige Antwort auf diese Frage und kann sie auch nicht geben. Aber grunds\u00e4tzlich liegt es an der Einfachheit und Bequemlichkeit\u2026 das Potenzial. Jeder m\u00f6chte schlie\u00dflich Managed-Services.<\/p>\n<p><i><b>NS<\/b>: Damit wie <noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/rds\/\">RDS<\/a><\/noindex>, nur bei sich selbst?<\/i><\/p>\n<p><b>DS<\/b>: Ja, damit wie RDS, nur \u00fcberall.<\/p>\n<p><i><b>NS<\/b>: \u201e\u00dcberall\u201c ist ein guter Hinweis. In gro\u00dfen Unternehmen ist alles an verschiedenen Orten angesiedelt. Warum sollte man in einem gro\u00dfen Unternehmen nicht auf eine fertig ausgearbeitete L\u00f6sung zur\u00fcckgreifen? Zum Beispiel hat Nutanix eigene Entwicklungen, und andere Unternehmen (wie VMware\u2026) bieten dasselbe \u201eRDS, nur bei sich selbst\u201c an.<\/i><\/p>\n<p><b>DS<\/b>: Aber das ist nur eine spezifische Implementierung, die nur unter bestimmten Bedingungen funktioniert. Wenn es um Kubernetes geht, gibt es eine enorme Vielfalt an Infrastruktur, die in K8s vorhanden sein kann. Im Grunde genommen ist dies der Standard f\u00fcr die API zu Cloud-Diensten\u2026<\/p>\n<p><i><b>NS<\/b>: Und das sogar kostenlos!<\/i><\/p>\n<p><b>DS<\/b>: Das ist nicht so entscheidend. Die Kostenfreiheit ist f\u00fcr einen nicht allzu gro\u00dfen Marktsektor wichtig. Es geht um etwas anderes\u2026 Du erinnerst dich sicher an den Bericht \u201e<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/431500\/\">Datenbanken und 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>: Wenn wir von Performance-St\u00e4nden sprechen, dann wahrscheinlich nicht, denn die Anforderungen sind dort spezifisch. Wenn wir von speziellen F\u00e4llen sprechen, in denen im Staging eine sehr gro\u00dfe Datenbank ben\u00f6tigt wird, dann auch wahrscheinlich nicht\u2026 Wenn es sich um eine statische, langlebige Umgebung handelt, was bringt es dann, wenn die Datenbank in K8s liegt?<\/p>\n<p><i><b>NS<\/b>: Gar nichts. Aber wo sehen wir statische Umgebungen? Eine statische Umgebung ist schon morgen veraltet.<\/i><\/p>\n<p><b>DS<\/b>: Staging kann statisch sein. Wir haben Kunden\u2026<\/p>\n<p><i><b>NS<\/b>: Ja, ich habe auch welche. Es ist ein gro\u00dfes Problem, wenn du eine Datenbank mit 10 TB hast, aber Staging nur 200 GB\u2026<\/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> verschoben und k\u00f6nnen sie jetzt von Maschine zu Maschine transferieren.<\/p>\n<p><i><b>NS<\/b>: Datenbanken dieser Gr\u00f6\u00dfe, bis zu 100 GB, auf guten Festplatten und bei einer stabilen Netzwerkanbindung k\u00f6nnen innerhalb weniger Minuten bereitgestellt werden, oder? Eine Geschwindigkeit von 1 GB pro Sekunde ist mittlerweile nichts Au\u00dfergew\u00f6hnliches.<\/i><\/p>\n<p><b>DS<\/b>: Ja, f\u00fcr lineare Operationen ist das kein Problem.<\/p>\n<p><i><b>NS<\/b>: Okay, wir m\u00fcssen nur \u00fcber die Produktionsumgebung nachdenken. Und wie sieht es aus, wenn wir Kubernetes f\u00fcr Nicht-Produktionsumgebungen in Betracht ziehen \u2014 wie gehe ich vor? Ich sehe, dass bei Zalando <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\">ein Operator<\/a><\/noindex>entwickelt wird, bei Crunchy <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/CrunchyData\/postgres-operator\">arbeiten sie daran, und es gibt noch einige andere Optionen. Und bei<\/a><\/noindex>OnGres <noindex><a rel=\"nofollow\" href=\"https:\/\/ongres.com\/\">\u2014 das ist unser guter Bekannter Alvaro aus Spanien: Sie erstellen nicht einfach nur<\/a><\/noindex> einen Operator <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/326414\/\">, sondern eine komplette Distribution (<\/a><\/noindex>StackGres<noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/ongresinc\/stackgres\">), die neben PostgreSQL auch ein Backup-Tool und den Envoy-Proxy integriert hat\u2026<\/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>: Wof\u00fcr ist Envoy? F\u00fcr die Lastverteilung von PostgreSQL-Traffic?<\/p>\n<p><i><b>NS<\/b>: Ja. Sie sehen es also so: Wenn man ein Linux-Distribution und den Kernel nimmt, dann ist PostgreSQL im Grunde der Kernel, und sie wollen eine Distribution erstellen, die cloudfreundlich ist und in Kubernetes l\u00e4uft. Sie verbinden Komponenten (Backups usw.) und optimieren sie, damit sie gut funktionieren.<\/i><\/p>\n<p><b>DS<\/b>: Sehr cool! Im Grunde handelt es sich um eine Software, um ein verwaltetes Postgres zu erstellen.<\/p>\n<p><i><b>NS<\/b>: Linux-Distributionen haben immer Probleme: Wie man Treiber erstellt, damit die gesamte Hardware unterst\u00fctzt wird. Ihre Idee ist, dass sie in Kubernetes arbeiten werden. Ich wei\u00df, dass wir bei dem Betreiber Zalando k\u00fcrzlich eine Bindung an AWS gesehen haben, und das ist schon nicht so gut. Es sollte keine Bindung an eine spezifische Infrastruktur geben \u2013 wo w\u00e4re dann der Sinn?<\/i><\/p>\n<p><b>DS<\/b>: Ich wei\u00df nicht, in welcher spezifischen Situation Zalando sich festgelegt hat, aber derzeit ist der Storage in Kubernetes so gestaltet, dass man keine generische Methode verwenden kann, um ein Disk-Backup zu erstellen. K\u00fcrzlich wurde in den Standards \u2013 in der letzten Version <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/465417\/\">der CSI-Spezifikation<\/a><\/noindex> \u2013 die M\u00f6glichkeit von Snapshots eingef\u00fchrt, aber wo wurde das umgesetzt? Ehrlich gesagt, es ist immer noch so unausgereift\u2026 Wir testen CSI auf AWS, GCE, Azure, vSphere, aber wenn man es etwas verwendet, sieht man, dass es noch nicht bereit ist.<\/p>\n<p><i><b>NS<\/b>: Daher m\u00fcssen wir uns manchmal mit der Infrastruktur besch\u00e4ftigen. Ich denke, wir befinden uns noch in einer fr\u00fchen Phase \u2014 den Wachstumsproblemen. Frage: Was w\u00fcrdest du Anf\u00e4ngern raten, die PgSQL in K8s ausprobieren m\u00f6chten? Welchen Operator k\u00f6nntest du empfehlen?<\/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\u00fcr Redis<\/a><\/noindex> <i>(bald ver\u00f6ffentlichen wir auch einen Artikel \u00fcber ihn)<\/i>.<\/p>\n<p><i><b>NS<\/b>: Gibt es f\u00fcr MySQL keinen? Ich wei\u00df, dass Percona... da sie jetzt sowohl MySQL als auch MongoDB und Postgres unterst\u00fctzen, m\u00fcssen sie wahrscheinlich eine universelle L\u00f6sung entwickeln: f\u00fcr alle Datenbanken und alle Cloud-Anbieter.<\/i><\/p>\n<p><b>DS<\/b>: Wir haben die Operatoren f\u00fcr MySQL noch nicht betrachtet. Das ist f\u00fcr uns derzeit nicht der Hauptfokus. MySQL funktioniert gut im Standalone-Modus. Warum einen Operator, wenn man einfach die Datenbank starten kann\u2026 Man kann einen Docker-Container mit Postgres starten, oder es ganz einfach halten.<\/p>\n<p><i><b>NS<\/b>: Dazu gab es auch eine Frage. Ganz ohne Operator?<\/i><\/p>\n<p><b>DS<\/b>: Ja, zu 100% l\u00e4uft bei uns PostgreSQL ohne Operator. Im Moment ist es so. Wir nutzen aktiv einen Operator f\u00fcr Prometheus und f\u00fcr Redis. Wir haben Pl\u00e4ne, einen Operator f\u00fcr Elasticsearch zu finden \u2013 das ist am dringendsten, weil wir ihn in 100% der F\u00e4lle in Kubernetes setzen m\u00f6chten. Genauso wie wir auch wollen, dass MongoDB immer in Kubernetes l\u00e4uft. Es gibt bestimmte W\u00fcnsche \u2013 das Gef\u00fchl, dass wir in diesen F\u00e4llen etwas tun k\u00f6nnen. Aber bei Postgres haben wir uns noch nicht umgesehen. Nat\u00fcrlich wissen wir von den verschiedenen Optionen, aber in der Praxis nutzen wir Standalone.<\/p>\n<h2>Datenbank f\u00fcr Tests in Kubernetes<\/h2>\n<p>\n<i><b>NS<\/b>: Lasst uns zum Thema Testen \u00fcbergehen. Wie man \u00c4nderungen in der Datenbank ausrollt \u2013 aus der Perspektive von DevOps. Es gibt Mikrodienste, viele Datenbanken, und st\u00e4ndig \u00e4ndert sich etwas. Wie stellt man sicher, dass CI\/CD gut funktioniert, damit alles aus der Sicht der DBMS in Ordnung ist? Was ist dein Ansatz?<\/i><\/p>\n<p><b>DS<\/b>: Es gibt nicht die eine Antwort. Es gibt mehrere Parameter. Der erste ist die Gr\u00f6\u00dfe der Datenbank, die wir ausrollen wollen. Du hast selbst erw\u00e4hnt, dass Unternehmen unterschiedlich mit der Bereitstellung einer Kopie der Prod-Datenbank auf Dev und Staging umgehen.<\/p>\n<p><i><b>NS<\/b>: Im Hinblick auf die GDPR denke ich, dass sie immer vorsichtiger werden... Ich kann sagen, dass in Europa bereits mit Bu\u00dfgeldern begonnen wurde.<\/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>Wir haben uns f\u00fcr folgendes Schema entschieden: Wenn der Kunde einen Fixture-Datensatz hat (eine minimale Version der Datenbank), verwenden wir diesen standardm\u00e4\u00dfig. Wenn es um Review-Umgebungen geht, bei denen wir einen Branch erstellt haben und eine Instanz der Anwendung hochgefahren wird \u2013 dann setzen wir eine kleine Datenbank ein. Aber auch die <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/417509\/\">Variante ist gut gelungen.<\/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>: Einfach durch Kopieren?<\/i><\/p>\n<p><b>DS<\/b>: Die Daten werden direkt im Docker-Image gespeichert. Das hei\u00dft, wir haben ein fertiges Image, sagen wir 100 GB gro\u00df. Dank der Schichten in Docker k\u00f6nnen wir dieses Image schnell die gew\u00fcnschte Anzahl von Male bereitstellen. Die Methode ist einfach, funktioniert aber gut.<\/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>: Schon lange.<\/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>: Was macht das f\u00fcr einen Unterschied: das sind doch Blobs, einfach Bits und Bytes.<\/p>\n<p><i><b>NS<\/b>: Der Unterschied ist: Machen Sie das \u00fcber Dump und Restore?<\/i><\/p>\n<p><b>DS<\/b>: Das ist \u00fcberhaupt nicht notwendig. Die Methoden zur Erstellung dieses Images k\u00f6nnen unterschiedlich sein.<\/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>: Aber mit ZFS sind Sie auf einen Knoten beschr\u00e4nkt.<\/p>\n<p><i><b>NS<\/b>: Ja. Aber ZFS hat auch einen magischen <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.oracle.com\/cd\/E18752_01\/html\/819-5461\/gbchx.html\">send<\/a><\/noindex>: damit kann man einen Snapshot senden und sogar (das habe ich noch nicht so richtig getestet, aber\u2026) kann man das Delta zwischen zwei <code>PGDATA<\/code>. Tats\u00e4chlich haben wir noch ein weiteres Werkzeug, das wir f\u00fcr solche Aufgaben nicht wirklich in Betracht gezogen haben. In PostgreSQL gibt es <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/12\/app-pgrewind.html\">pg_rewind<\/a><\/noindex>, das wie ein \u201eintelligentes\u201c rsync funktioniert und vieles \u00fcberspringt, was man nicht beachten muss, weil sich dort sicher nichts ge\u00e4ndert hat. Wir k\u00f6nnen zwischen zwei Servern eine schnelle Synchronisation durchf\u00fchren und genauso zur\u00fcckspulen.<\/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>: Nein, wir machen das alles auf einer Maschine.<\/i><\/p>\n<p><b>DS<\/b>: Aber wie m\u00f6chten Sie 50 Mal bereitstellen, wenn diese eine Datenbank, sagen wir, ein Terabyte gro\u00df ist? H\u00f6chstwahrscheinlich ben\u00f6tigt sie bedingt 256 GB RAM?<\/p>\n<p><i><b>NS<\/b>: Ja, manchmal ben\u00f6tigt man viel Speicher \u2013 das ist normal. Aber so ein Beispiel aus dem Leben: Auf der Produktionsmaschine gibt es 96 Kerne und 600 GB. Dabei werden f\u00fcr die Datenbank 32 Kerne (sogar 16 Kerne manchmal) und 100-120 GB Speicher verwendet.<\/i><\/p>\n<p><b>DS<\/b>: Und da passen 50 Kopien rein?<\/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>For us, for example, the database is 10 TB. We created a disk for it, and ZFS compressed its size by about 30-40%. Since we don\u2019t perform load testing, exact response time is not critical for us: it can be up to twice as slow \u2014 that\u2019s fine.<\/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> will also kick in, then the second core will become active. We have 16-32 cores allocated, so 10 people can work simultaneously without issues.<\/i><\/p>\n<p><i>Since physically <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>, for instance, at 25%. Accordingly, that is 200 GB. You can\u2019t start more than three of those, otherwise, memory will run out.<\/i><\/p>\n<p><i>But at some point, we realized that this is unnecessary: we set shared_buffers to 2 GB. PostgreSQL has <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/docs\/current\/runtime-config-query.html#GUC-EFFECTIVE-CACHE-SIZE\">effective_cache_size<\/a><\/noindex>, and in reality, only it influences the <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Query_plan\">plans<\/a><\/noindex>Wir setzen ihn auf 0,5 TB. Und es spielt keine Rolle, dass es sie eigentlich nicht gibt: Er plant, als ob sie vorhanden w\u00e4ren.<\/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>: Denkst du nicht, dass es hier mehrere Probleme gibt? Erstens \u2013 das ist eine L\u00f6sung, die nur mit PostgreSQL funktioniert. Dieser Ansatz ist sehr spezifisch, nicht generisch. Zweitens \u2013 Kubernetes (und alles, wohin die Cloud-Technologien jetzt gehen) setzt auf viele Knoten, und diese Knoten sind fl\u00fcchtig. In deinem Fall handelt es sich jedoch um einen zustandsbehafteten, persistenten Knoten. Diese Dinge verursachen bei mir Widerspr\u00fcche.<\/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>\u00dcber Kubernetes. Du erz\u00e4hlst \u00fcberall, dass wir eine persistente Datenbank haben. Wenn eine Instanz ausf\u00e4llt, ist das Wichtigste, die Festplatte zu sichern. Unsere gesamte Plattform basiert ebenfalls auf Kubernetes, und die Komponente mit Postgres ist separat (obwohl sie auch irgendwann dort sein wird). Daher ist es so: Die Instanz f\u00e4llt aus, aber wir haben ihr PV gespeichert und einfach an eine andere (neue) Instanz angeschlossen, als w\u00e4re nichts passiert.<\/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>, in <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/476998\/\">1.17<\/a><\/noindex> (diese Version kam heraus <i>Wochen<\/i> her) werden diese Funktionen nur zur 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>: Es muss auch sichergestellt werden, dass alle Engines (Amazon, Google\u2026) diese Version unterst\u00fctzen \u2013 das ben\u00f6tigt schlie\u00dflich auch seine Zeit.<\/i><\/p>\n<p><b>DS<\/b>: Solange verwenden wir sie nicht. Wir nutzen eigene L\u00f6sungen.<\/p>\n<h2>Lokale Entwicklung mit 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>: Ich denke, dieser Anwendungsfall \u2013 alles auf einem Knoten bereitzustellen \u2013 bezieht sich ausschlie\u00dflich auf lokale Entwicklung oder zeigt solche Muster. Es gibt <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/333470\/\">Minikube<\/a><\/noindex>, und es gibt <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>. Wir bewegen uns in Richtung Nutzung von Kubernetes IN Docker. Wir haben begonnen, damit f\u00fcr Tests zu arbeiten.<\/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. Und dort gibt es eine ziemlich am\u00fcsante Nachbildung, aber die Idee ist\u2026 Wir haben ein Tool f\u00fcr das Deployment \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/werf.io\/\">werf<\/a><\/noindex>. Wir m\u00f6chten darin einen Modus einrichten \u2013 hypothetisch <code>werf up<\/code>: \u201eStarte mir ein lokales Kubernetes\u201c. Und dann dort eine hypothetische Instanz von <code>werf follow<\/code>. Dann kann der Entwickler in der IDE bearbeiten, w\u00e4hrend im System ein Prozess l\u00e4uft, der \u00c4nderungen erkennt und Images neu erstellt und sie ins lokale K8s neu bereitstellt. So wollen wir versuchen, das Problem der lokalen Entwicklung zu l\u00f6sen.<\/p>\n<h2>Snapshots und Datenbankklonierung in K8s Realit\u00e4ten<\/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\u00f6glicherweise sogar Stunden).<\/i><\/p>\n<p><i>Stattdessen k\u00f6nnen diese Daten in ein oder zwei Sekunden abgerufen, ein Test durchgef\u00fchrt und dann verworfen werden. Diese Snapshots erf\u00fcllen verschiedene Aufgaben. Im ersten Fall geht es darum, zu skalieren und neue Replikate zu erhalten, im zweiten Fall f\u00fcr Tests.<\/i><\/p>\n<p><b>DS<\/b>: Da stimme ich nicht zu. Eine ordnungsgem\u00e4\u00dfe Klonierung von Volumina ist eine Aufgabe f\u00fcr die Cloud. Ich habe ihre Implementierung nicht gesehen, wei\u00df aber, wie wir das auf unserer Hardware umsetzen. Wir haben Ceph, wo man jedem physischen Volume (<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ceph.com\/docs\/master\/rbd\/\">RBD<\/a><\/noindex>) sagen kann, <i>clone<\/i> und innerhalb von vielen Millisekunden ein zweites Volume mit den gleichen Eigenschaften, <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>: Aber sie werden trotzdem Sekunden, Dutzende von Sekunden ben\u00f6tigen, um eine Instanz hochzufahren, Docker dorthin zu bringen usw.<\/i><\/p>\n<p><b>DS<\/b>: Warum muss unbedingt eine gesamte Instanz hochgefahren werden? Wir haben doch eine Instanz mit 32 Kernen, mit 16\u2026 und da passen eine bestimmte Anzahl rein \u2013 zum Beispiel vier. Wenn wir die f\u00fcnfte bestellen, wird bereits eine Instanz hochgefahren und danach wieder gel\u00f6scht.<\/p>\n<p><i><b>NS<\/b>: Ja, interessant, in Kubernetes ergibt sich eine andere Geschichte. Unsere DB l\u00e4uft nicht in K8s und ist eine einzige Instanz. Aber f\u00fcr das Klonen einer mehrere Terabyte umfassenden Datenbank ben\u00f6tigt man nicht mehr als zwei Sekunden.<\/i><\/p>\n<p><b>DS<\/b>: Das ist gro\u00dfartig. Aber mein urspr\u00fcnglicher Punkt ist, dass es keine generische L\u00f6sung ist. Ja, es ist klasse, aber es funktioniert nur mit Postgres und nur auf einem Knoten.<\/p>\n<p><i><b>NS<\/b>: Es ist nicht nur f\u00fcr Postgres geeignet: Diese Pl\u00e4ne, wie ich beschrieben habe, werden nur in diesem funktionieren. Aber wenn wir uns nicht um die Pl\u00e4ne k\u00fcmmern, sondern einfach alle Daten f\u00fcr funktionale Tests ben\u00f6tigen, dann ist es f\u00fcr jede DBMS geeignet.<\/i><\/p>\n<p><b>DS<\/b>: Vor vielen Jahren haben wir etwas \u00c4hnliches mit LVM-Snapshots gemacht. Das ist klassisch. Dieser Ansatz wurde sehr h\u00e4ufig verwendet. Stateful-Knoten sind jedoch eine Herausforderung. Weil man sie nicht ignorieren darf, immer pr\u00e4sent sein muss\u2026<\/p>\n<p><i><b>NS<\/b>: Siehst du hier nicht eine M\u00f6glichkeit f\u00fcr ein Hybridsystem? Angenommen, der Stateful-Knoten ist ein Pod, der von mehreren Mitarbeitern (viele Tester) genutzt wird. Wir haben nur einen Speicher, aber dank des Dateisystems sind die Klone lokal. Wenn der Pod ausf\u00e4llt, bleibt die Festplatte \u2014 der Pod wird neu gestartet, erkennt alle Klone und gibt an: \u201eHier sind eure Klone, die auf diesen Ports laufen, arbeitet weiter damit.\u201c<\/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. Es gibt ein Limit: Angenommen, nicht mehr als 10 Personen arbeiten gleichzeitig daran. Wenn 20 ben\u00f6tigt werden, starten wir einen zweiten solchen Pod. Es ist v\u00f6llig realistisch, ihn zu klonen und einen zweiten vollst\u00e4ndigen Volume zu erhalten, auf dem ebenfalls 10 \u201ed\u00fcnne\u201c Klone laufen. Siehst du diese M\u00f6glichkeit nicht?<\/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>: Ich glaube nicht an anderthalb Sekunden f\u00fcr mehrere Terabyte. Bei Ceph machst du das selbst, w\u00e4hrend du von Clouds sprichst. Geh in die Cloud, mach auf EC2 einen Klon eines EBS-Volumes mit vielen Terabytes und schau dir die Leistung an. Das wird keine paar Sekunden dauern. Ich bin sehr gespannt, wann sie dieses Leistungsniveau erreichen. Ich verstehe, wor\u00fcber du sprichst, aber ich erlaube mir, nicht einverstanden zu sein.<\/i><\/p>\n<p><b>DS<\/b>: In Ordnung, aber ich habe gesagt, dass ich mittel- bis langfristig spreche, nicht kurzfristig. Innerhalb von ein paar Jahren.<\/p>\n<h2>\u00dcber den Operator f\u00fcr PostgreSQL von Zalando<\/h2>\n<p>\nMitte dieses Treffens kam auch Alexey Klyukin, ein ehemaliger Entwickler von Zalando, zu Wort, der die Geschichte des PostgreSQL-Operators erz\u00e4hlte:<\/p>\n<blockquote><p>Es ist gro\u00dfartig, dass dieses Thema \u00fcberhaupt angesprochen wurde: Postgres und Kubernetes. Als wir 2017 bei Zalando damit anfingen, war es ein Thema, das alle interessierte, aber niemand k\u00fcmmerte sich darum. Alle hatten bereits Kubernetes, aber wenn man fragte, wie man es mit Datenbanken macht, sagten sogar solche Leute wie <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kelseyhightower\">Kelsey Hightower<\/a><\/noindex>, die f\u00fcr K8s pl\u00e4dierten, etwa folgendes:<\/p>\n<p><i>\u201eGeht zu Managed-Services und nutzt diese, startet keine DB in Kubernetes. Andernfalls wird euer K8s zum Beispiel ein Upgrade machen, alle Knoten herunterfahren und eure Daten werden weit weg sein.\u201c<\/i><\/p>\n<p>Wir haben entschieden, einen Operator zu entwickeln, der entgegen diesem Rat Postgres-Datenbanken in Kubernetes starten wird. Und wir hatten eine gute Grundlage \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\">ein Docker-Image<\/a><\/noindex> daf\u00fcr.<\/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>Wir hatten bereits einen Docker-Container. Es gab eine PaaS, die Docker verwendet hat. Warum nicht K8s ausprobieren? Warum nicht einen eigenen Operator schreiben? Murat Kabilov, der zu uns von Avito kam, hat dies als Projekt aus eigener Initiative begonnen \u2013 um ein bisschen zu experimentieren \u2013 und das Projekt hat Erfolg gehabt.<\/p>\n<p>Ich wollte jedoch eigentlich \u00fcber AWS sprechen. Warum gab es dort historisch gesehen Code, der mit AWS verkn\u00fcpft ist...<\/p>\n<p>Wenn Sie etwas in Kubernetes starten, sollten Sie verstehen, dass K8s ein kontinuierlicher Entwicklungsprozess ist. Es entwickelt sich st\u00e4ndig weiter, wird verbessert und geht gelegentlich auch mal kaputt. Man muss die \u00c4nderungen in Kubernetes genau im Auge behalten und bereit sein, sich tief damit auseinanderzusetzen und zu verstehen, wie es im Detail funktioniert \u2013 vielleicht mehr, als einem lieb ist. Das gilt im Grunde f\u00fcr jede Plattform, auf der Sie Ihre Datenbanken betreiben...<\/p>\n<p>Als wir den Operator entwickelten, hatten wir Postgres, das mit einem externen Volume (in diesem Fall EBS, da wir in AWS arbeiteten) verbunden war. Die Datenbank wuchs, und irgendwann war es notwendig, eine Gr\u00f6\u00dfen\u00e4nderung durchzuf\u00fchren: Zum Beispiel war die urspr\u00fcngliche EBS-Gr\u00f6\u00dfe 100 TB und die Datenbank hat diesen Betrag erreicht, nun m\u00f6chten wir EBS auf 200 TB erweitern. Wie geht das? Man k\u00f6nnte einen Dump\/Restore auf eine neue Instanz machen, aber das w\u00e4re zeitaufwendig und w\u00fcrde zu Ausfallzeiten f\u00fchren.<\/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>Es steht niemandem im Weg, das Gleiche f\u00fcr andere Plattformen zu tun. Der Operator ist nicht an AWS gebunden, er funktioniert auch auf anderen Plattformen. Letztlich ist es ein Open-Source-Projekt: Wenn jemand die Einf\u00fchrung eines neuen APIs beschleunigen m\u00f6chte \u2013 herzlich willkommen. Es gibt <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/postgres-operator\">GitHub<\/a><\/noindex>, Pull-Requests \u2013 das Zalando-Team bem\u00fcht sich, darauf recht z\u00fcgig zu reagieren und den Operator voranzubringen. Soweit ich wei\u00df, hat das Projekt <noindex><a rel=\"nofollow\" href=\"https:\/\/summerofcode.withgoogle.com\/archive\/2019\/organizations\/6187982082539520\/\">teilgenommen<\/a><\/noindex> im Google Summer of Code und \u00e4hnlichen Initiativen. Zalando arbeitet sehr aktiv daran.\n<\/p><\/blockquote>\n<p><\/p>\n<h2>P.S. Bonus!<\/h2>\n<p>\nWenn Sie sich f\u00fcr das Thema PostgreSQL und Kubernetes interessieren, m\u00f6chten wir auch darauf hinweisen, dass in der letzten Woche der n\u00e4chste Postgres-Dienstag stattfand, bei dem Nikolai sich mit <b>Alexander Kukushkin von Zalando unterhielt.<\/b>. Das Video davon ist verf\u00fcgbar. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=FE0xi7SBqsg\">hier<\/a><\/noindex>.<\/p>\n<h2>P.P.S.<\/h2>\n<p>\nLesen Sie auch in unserem Blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/431500\/\">Datenbanken und Kubernetes (\u00dcberblick und Video des Vortrags)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/475036\/\">Migration von Cassandra nach Kubernetes: Besonderheiten und L\u00f6sungen<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/461149\/\">Erschwerte Migration von MongoDB nach Kubernetes<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/450662\/\">Herausfordernde Migration von RabbitMQ in Kubernetes<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Quelle: <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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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\" \/>\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\/de\/blog\/administrirovanie\/postgres-vtornik-5-postgresql-i-kubernetes-ci-cd-avtomatizatsiya-testirovaniya\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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:description\" content=\"\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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/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-Dienstag Nr. 5: \u201ePostgreSQL und Kubernetes. CI\/CD. Automatisierung der Tests\u201c | ProHoster","description":"Am Ende des vergangenen Jahres fand ein weiterer Live-Stream der russischen PostgreSQL-Community #RuPostgres statt, in dessen Rahmen sein Mitbegr\u00fcnder Nikolai Samokhvalov mit dem technischen Direktor von \"Flant\", Dmitrij Stoljarow, \u00fcber diese Datenbank im Kontext von Kubernetes sprach. Wir ver\u00f6ffentlichen das Transkript des Hauptteils dieser Diskussion, und auf dem YouTube-Kanal der Community ist die vollst\u00e4ndige Videoaufzeichnung verf\u00fcgbar: Datenbanken und Kubernetes NS: Heute werden wir nicht \u00fcber","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/postgres-vtornik-5-postgresql-i-kubernetes-ci-cd-avtomatizatsiya-testirovaniya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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:description":"\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","og:url":"https:\/\/prohoster.info\/de\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/55467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=55467"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/55467\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/55468"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=55467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=55467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=55467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}