{"id":33075,"date":"2019-10-31T21:50:35","date_gmt":"2019-10-31T18:50:35","guid":{"rendered":"https:\/\/prohoster.info\/blog\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes\/"},"modified":"2019-10-31T21:50:35","modified_gmt":"2019-10-31T18:50:35","slug":"besprostojnaya-migratsiya-rabbitmq-v-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes","title":{"rendered":"Udenproblematisk migration af RabbitMQ til Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Udenproblematisk migration af RabbitMQ til Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/32c491c8605e2488550efadbcb052320.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRabbitMQ \u2013 en meddelelsesbroker skrevet i Erlang, der muligg\u00f8r oprettelse af en fejltolerant klynge med fuld datareplication p\u00e5 flere noder, hvor hver node kan h\u00e5ndtere foresp\u00f8rgsler om l\u00e6sning og skrivning. Med mange Kubernetes-klynger i produktion underst\u00f8tter vi et stort antal RabbitMQ-installationer og har m\u00f8dt behovet for at migrere data fra en klynge til en anden uden nedetid.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Denne operation var n\u00f8dvendig for os i mindst to tilf\u00e6lde:<\/p>\n<ol>\n<li> Overf\u00f8rsel af data fra en RabbitMQ-klynge, der ikke er i Kubernetes, til en ny \u2013 allerede \"kubernetes-eret\" (dvs. fungerende i K8s-pods) \u2013 klynge.<\/li>\n<li> Migration af RabbitMQ inden for Kubernetes fra et namespace til et andet (for eksempel, hvis konturerne er afgr\u00e6nset af namespaces, s\u00e5 for at flytte infrastrukturen fra \u00e9n kontur til en anden).<\/li>\n<\/ol>\n<p>\nDen opskrift, der foresl\u00e5s i artiklen, er rettet mod situationer (men begr\u00e6nses ikke til dem), hvor der er en gammel RabbitMQ-klynge (f.eks. best\u00e5ende af 3 noder), der enten allerede er i K8s eller p\u00e5 nogle gamle servere. Den fungerer med en applikation, der er placeret i Kubernetes (allerede der eller i perspektiv):<\/p>\n<p><img decoding=\"async\" alt=\"Udenproblematisk migration af RabbitMQ til Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/5fba162c90bc441978429288c59300ef.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026 og vi st\u00e5r over for opgaven med at migrere den til en ny produktion i Kubernetes.<\/p>\n<p>F\u00f8rst vil den generelle tilgang til selve migrationen blive beskrevet, derefter de tekniske detaljer om dens implementering.<\/p>\n<h2>Migrationsalgoritmen<\/h2>\n<p>\nDet f\u00f8rste, indledende skridt f\u00f8r nogen handlinger \u2013 er at kontrollere, at den gamle RabbitMQ-installation har h\u00f8j tilg\u00e6ngelighed aktiveret (<noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/ha.html\">HA<\/a><\/noindex>). \u00c5rsagen er \u00e5benbar \u2013 vi \u00f8nsker jo ikke at miste nogen data. For at foretage denne kontrol kan du g\u00e5 ind i RabbitMQ-administrationspanelet og under fanen Admin \u2192 Policies sikre dig, at v\u00e6rdien er sat til <code>ha-mode: all<\/code>:<\/p>\n<p><img decoding=\"async\" alt=\"Udenproblematisk migration af RabbitMQ til Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/2e37be2cd3685eb8cedfbc5949e5036f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e6ste skridt er at oprette en ny RabbitMQ-klynge i Kubernetes-pods (i vores tilf\u00e6lde f.eks. best\u00e5ende af 3 noder, men antallet kan v\u00e6re et andet).<\/p>\n<p>Derefter sammenkobler vi den gamle og den nye RabbitMQ-klynge og f\u00e5r en enkelt klynge (best\u00e5ende af 6 noder):<\/p>\n<p><img decoding=\"async\" alt=\"Udenproblematisk migration af RabbitMQ til Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/52204b814f0ba73a20c4854e990c4059.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nProcessen til synkronisering af data mellem de gamle og de nye RabbitMQ-klynger initieres. N\u00e5r alle data er synkroniseret mellem alle noder i klyngen, kan vi skifte applikationen til at bruge den nye klynge:<\/p>\n<p><img decoding=\"async\" alt=\"Udenproblematisk migration af RabbitMQ til Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/8bf19d4176e38b4679e96e0f1b8b57c1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEfter disse operationer er det tilstr\u00e6kkeligt at fjerne de gamle noder fra RabbitMQ-klyngen, og flytningen kan betragtes som afsluttet:<\/p>\n<p><img decoding=\"async\" alt=\"Udenproblematisk migration af RabbitMQ til Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/bccc9b9fc8d6691d24195e9a97a0f88b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDenne ops\u00e6tning har vi gentagne gange anvendt i vores produktion. Men for vores egen bekvemmelighed har vi realiseret den som en specialiseret system, der distribuerer standardkonfigurationer af RMQ p\u00e5 flere Kubernetes-klynger. <i>(til dem, der er nysgerrige: det handler om <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/addon-operator\">addon-operator<\/a><\/noindex>, which we <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">for nylig fortalte vi<\/a><\/noindex>)<\/i>. Nedenfor vil der blive pr\u00e6senteret specielle instruktioner, som enhver kan anvende p\u00e5 deres egne installationer for at pr\u00f8ve den foresl\u00e5ede l\u00f8sning i praksis.<\/p>\n<h2>Pr\u00f8ver i praksis<\/h2>\n<p><\/p>\n<h3>Krav<\/h3>\n<p>\nKravene er meget enkle:<\/p>\n<ol>\n<li> Kubernetes klynge (minikube virker ogs\u00e5);<\/li>\n<li> RabbitMQ-klyngen (kan b\u00e5de v\u00e6re implementeret p\u00e5 bare metal og oprettet som en almindelig klynge i Kubernetes fra det officielle Helm-diagram).<\/li>\n<\/ol>\n<p>\nTil det beskrevne eksempel har jeg implementeret RMQ i Kubernetes og navngivet den <code>rmq-old<\/code>.<\/p>\n<h3>Forberedelse af testmilj\u00f8et<\/h3>\n<p>\n1. Hent Helm-diagrammet og rediger det lidt:<\/p>\n<pre><code class=\"bash\">helm fetch --untar stable\/rabbitmq-ha<\/code><\/pre>\n<p>\nFor nemheds skyld s\u00e6tter vi en adgangskode, <code>ErlangCookie<\/code> og laver en politik <code>ha-all<\/code>, s\u00e5 k\u00f8erne som standard synkroniseres mellem alle noderne i RMQ-klyngen:<\/p>\n<pre><code class=\"plaintext\">rabbitmqPassword: guest\nrabbitmqErlangCookie: mae9joopaol7aiVu3eechei2waiGa2we\ndefinitions:\npolicies: |-\n  {\n    \"name\": \"ha-all\",\n    \"pattern\": \".*\",\n    \"vhost\": \"\\\/\",\n    \"definition\": {\n      \"ha-mode\": \"all\",\n      \"ha-sync-mode\": \"automatic\",\n      \"ha-sync-batch-size\": 81920\n    }\n  }<\/code><\/pre>\n<p>\n2. Installerer diagrammet:<\/p>\n<pre><code class=\"bash\">helm install . --name rmq-old --namespace rmq-old<\/code><\/pre>\n<p>\n3. G\u00e5 ind i RabbitMQ adminpanelet, opret en ny k\u00f8 og tilf\u00f8j nogle beskeder. De vil v\u00e6re n\u00f8dvendige for at sikre, at alle data er bevaret og intet er g\u00e5et tabt efter migrationen:<\/p>\n<p><img decoding=\"async\" alt=\"Udenproblematisk migration af RabbitMQ til Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/b4b78ce622903dada396ced196c2ecce.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTestmilj\u00f8et er klar: vi har den 'gamle' RabbitMQ med de data, der skal overf\u00f8res.<\/p>\n<h3>Migration af RabbitMQ-klynge<\/h3>\n<p>\n1. For det f\u00f8rste skal vi implementere en ny RabbitMQ i <b>en anden<\/b> navnerummet med <b>de samme<\/b> <code>ErlangCookie<\/code> og adgangskode for brugeren. For at g\u00f8re dette udf\u00f8rer vi de tidligere n\u00e6vnte operationer og \u00e6ndrer den endelige installationskommando for RMQ til f\u00f8lgende:<\/p>\n<pre><code class=\"bash\">helm install . --name rmq-new --namespace rmq-new<\/code><\/pre>\n<p>\n2. Nu skal den nye klynge sammenf\u00f8jes med den gamle. For at g\u00f8re dette g\u00e5r vi ind i hver af pod'erne <b>ny<\/b> RabbitMQ og udf\u00f8rer kommandoerne:<\/p>\n<pre><code class=\"bash\">export OLD_RMQ=rabbit@rmq-old-rabbitmq-ha-0.rmq-old-rabbitmq-ha-discovery.rmq-old.svc.cluster.local &amp;&amp; \n  rabbitmqctl stop_app &amp;&amp; \n  rabbitmqctl join_cluster $OLD_RMQ &amp;&amp; \n  rabbitmqctl start_app<\/code><\/pre>\n<p>\nI variablen <code>OLD_RMQ<\/code> er adressen p\u00e5 en af noderne <b>i den gamle<\/b> RMQ-klynge.<\/p>\n<p>Disse kommandoer stopper den nuv\u00e6rende node <b>ny<\/b> fra RMQ-klyngen, forbinder den til den gamle klynge og starter den igen.<\/p>\n<p>3. RMQ-klyngen med 6 noder er klar:<\/p>\n<p><img decoding=\"async\" alt=\"Udenproblematisk migration af RabbitMQ til Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/88f4655556c1146f7a6e54fd2fd798f4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDu skal vente, indtil beskederne synkroniseres mellem alle noder. Det er ikke sv\u00e6rt at g\u00e6tte, at synkroniseringstiden for beskeder afh\u00e6nger af hardwarekapaciteten, som klyngen er implementeret p\u00e5, og af antallet af beskeder. I det beskrevne scenarie er der kun 10 beskeder, s\u00e5 dataene blev synkroniseret \u00f8jeblikkeligt, men ved et tilstr\u00e6kkeligt stort antal beskeder kan synkroniseringen tage timer.<\/p>\n<p>S\u00e5, synkroniseringsstatus:<\/p>\n<p><img decoding=\"async\" alt=\"Udenproblematisk migration af RabbitMQ til Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/1185591d8d5478634f35b7433ca75bbc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHer <code>+5<\/code> betyder, at beskederne allerede er <b>endnu<\/b> p\u00e5 5 noder (udover den, der er angivet i feltet <code>Node<\/code>). S\u00e5ledes er synkroniseringen succesfuld.<\/p>\n<p>4. Det er kun tilbage at skifte applikationens RMQ-adresse til den nye klynge (de specifikke handlinger her afh\u00e6nger af den teknologi, du bruger, og anden specifik applikationsinformation), hvorefter du kan sige farvel til den gamle.<\/p>\n<p>Til den sidste operation (dvs. allerede <b>efter<\/b> skift af applikationen til den nye klynge) g\u00e5r vi ind p\u00e5 hver node <b>i den gamle<\/b> i klyngen og udf\u00f8rer kommandoerne:<\/p>\n<pre><code class=\"bash\">rabbitmqctl stop_app\nrabbitmqctl reset<\/code><\/pre>\n<p>\nKlyngen har \"glemt\" de gamle noder: den gamle RMQ kan slettes, hvormed flytningen er f\u00e6rdig.<\/p>\n<p><i><b>Bem\u00e6rk<\/b>: Hvis du bruger RMQ med certifikater, \u00e6ndrer det principielt ikke noget - migrationsprocessen vil finde sted p\u00e5 n\u00f8jagtig samme m\u00e5de.<\/i><\/p>\n<h2>Konklusioner<\/h2>\n<p>\nDen beskrevne metode passer stort set til alle tilf\u00e6lde, hvor vi skal overf\u00f8re RabbitMQ eller blot flytte til en ny klynge.<\/p>\n<p>I vores tilf\u00e6lde opstod der kun problemer \u00e9n gang, da RMQ blev tilg\u00e5et fra mange steder, og vi ikke havde mulighed for at \u00e6ndre RMQ-adressen overalt til den nye. S\u00e5 lancerede vi den nye RMQ i det samme navnerum med de samme labels for at den kunne falde ind under de eksisterende tjenester og Ingress'er, og ved at starte pod'en manuelt manipulerede vi labels ved at fjerne dem i starten, s\u00e5 der ikke blev sendt foresp\u00f8rgsler til den tomme RMQ, og tilf\u00f8jede dem igen efter synkroniseringen af beskeder.<\/p>\n<p>Vi anvendte samme strategi ved opgradering af RabbitMQ til en ny version med \u00e6ndret konfiguration - alt k\u00f8rte som smurt.<\/p>\n<h2>P.S.<\/h2>\n<p>\nSom en logisk forts\u00e6ttelse af dette materiale forbereder vi artikler om MongoDB (migration fra fysisk server til Kubernetes) og MySQL (hvordan vi forbereder denne DBMS inden for Kubernetes). De vil blive offentliggjort i de kommende m\u00e5neder.<\/p>\n<h2>P.P.S.<\/h2>\n<p>\nL\u00e6s ogs\u00e5 p\u00e5 vores blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/431500\/\">Databaser og Kubernetes (overblik og video af pr\u00e6sentationen)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/417509\/\">K8s tips &amp; tricks: Afspejler bootstrap af store databaser<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/450662\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>RabbitMQ \u2013 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Erlang \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0441 \u043f\u043e\u043b\u043d\u043e\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0437\u043b\u043e\u0432, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c. \u0418\u043c\u0435\u044f \u0432 production-\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 Kubernetes, \u043c\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0439 RabbitMQ \u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0431\u0435\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u044f. \u0414\u0430\u043d\u043d\u0430\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24827,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-33075","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.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"RabbitMQ \u2013 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Erlang \u0431\u0440\u043e\u043a\u0435\u0440.\" \/>\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\/da\/blog\/administrirovanie\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0411\u0435\u0441\u043f\u0440\u043e\u0441\u0442\u043e\u0439\u043d\u0430\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f RabbitMQ \u0432 Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"RabbitMQ \u2013 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Erlang \u0431\u0440\u043e\u043a\u0435\u0440.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes\" \/>\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=\"2019-10-31T18:50:35+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:50: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\udd47Ubesv\u00e6ret migration af RabbitMQ til Kubernetes | ProHoster","description":"RabbitMQ - en broker skrevet i Erlang.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0411\u0435\u0441\u043f\u0440\u043e\u0441\u0442\u043e\u0439\u043d\u0430\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f RabbitMQ \u0432 Kubernetes | ProHoster","og:description":"RabbitMQ \u2013 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Erlang \u0431\u0440\u043e\u043a\u0435\u0440.","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes","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":"2019-10-31T18:50:35+00:00","article:modified_time":"2019-10-31T18:50:35+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"33075","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":"2026-01-21 13:51:33","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:47:28","updated":"2026-01-21 13:51:33","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/33075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=33075"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/33075\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/24827"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=33075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=33075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=33075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}