{"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\/nl\/blog\/administrirovanie\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes","title":{"rendered":"Moeizame migratie van RabbitMQ naar Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Moeizame migratie van RabbitMQ naar Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/32c491c8605e2488550efadbcb052320.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRabbitMQ \u2013 een op Erlang gebaseerde berichtenbroker die het mogelijk maakt om een fouttolerante clustering te organiseren met volledige datareplicatie over meerdere knooppunten, waarbij elk knooppunt verzoeken voor lezen en schrijven kan afhandelen. Met een breed scala aan Kubernetes-clusters in productie ondersteunen we talloze RabbitMQ-installaties en hebben we te maken gekregen met de noodzaak om gegevens van het ene cluster naar het andere te migreren zonder downtime.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Deze operatie was voor ons noodzakelijk in minimaal twee gevallen:<\/p>\n<ol>\n<li> Gegevensoverdracht van een RabbitMQ-cluster dat niet op Kubernetes draait, naar een nieuwe \u2013 al 'gekubernetiseerde' (d.w.z. functionerend in K8s-pods) \u2013 cluster.<\/li>\n<li> Migratie van RabbitMQ binnen Kubernetes van de ene namespace naar de andere (bijvoorbeeld als de omgevingen zijn gescheiden door namespaces, voor het verplaatsen van infrastructuur van de ene omgeving naar de andere).<\/li>\n<\/ol>\n<p>\nHet recept dat in dit artikel wordt voorgesteld, is gericht op situaties (maar zeker niet beperkt tot) waarin een oud RabbitMQ-cluster (bijvoorbeeld met 3 knooppunten) zich al dan niet in K8s bevindt, of op enkele oudere servers. Een applicatie die draait binnen Kubernetes (of daar binnenkomt) werkt ermee:<\/p>\n<p><img decoding=\"async\" alt=\"Moeizame migratie van RabbitMQ naar Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/5fba162c90bc441978429288c59300ef.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026 en we hebben de taak om het naar een nieuwe productie in Kubernetes te migreren.<\/p>\n<p>Eerst wordt de algemene benadering van de migratie beschreven, gevolgd door de technische details van de uitvoering.<\/p>\n<h2>Migratie-algoritme<\/h2>\n<p>\nDe eerste, voorbereidende stap voordat er enige acties worden ondernomen, is te controleren dat de oude RabbitMQ-installatie het hoogbeschikbaarheidsmodus heeft ingeschakeld (<noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/ha.html\">HA<\/a><\/noindex>). De reden is duidelijk \u2013 we willen namelijk geen gegevens verliezen. Om deze controle uit te voeren, kan men in de RabbitMQ-admininterface gaan en op het tabblad Admin \u2192 Policies controleren of de waarde is ingesteld op <code>ha-mode: all<\/code>:<\/p>\n<p><img decoding=\"async\" alt=\"Moeizame migratie van RabbitMQ naar Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/2e37be2cd3685eb8cedfbc5949e5036f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe volgende stap is het opzetten van een nieuwe RabbitMQ-cluster in K8s-pods (in ons geval bijvoorbeeld bestaande uit 3 knooppunten, maar hun aantal kan ook anders zijn).<\/p>\n<p>Daarna combineren we de oude en nieuwe RabbitMQ-clusters, waardoor we \u00e9\u00e9n cluster (van 6 knooppunten) krijgen:<\/p>\n<p><img decoding=\"async\" alt=\"Moeizame migratie van RabbitMQ naar Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/52204b814f0ba73a20c4854e990c4059.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHet proces van gegevenssynchronisatie tussen de oude en nieuwe RabbitMQ-clusters wordt geinitieerd. Zodra alle gegevens tussen alle knooppunten in het cluster zijn gesynchroniseerd, kunnen we de applicatie overschakelen op het gebruik van het nieuwe cluster:<\/p>\n<p><img decoding=\"async\" alt=\"Moeizame migratie van RabbitMQ naar Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/8bf19d4176e38b4679e96e0f1b8b57c1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa deze handelingen is het voldoende om de oude knooppunten uit de RabbitMQ-cluster te halen, en kan de verhuizing als voltooid worden beschouwd:<\/p>\n<p><img decoding=\"async\" alt=\"Moeizame migratie van RabbitMQ naar Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/bccc9b9fc8d6691d24195e9a97a0f88b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDeze opstelling hebben we herhaaldelijk in onze productie gebruikt. Voor ons gemak hebben we het echter ge\u00efmplementeerd binnen een gespecialiseerd systeem dat standaardconfiguraties van RMQ verspreidt over meerdere Kubernetes-clusters. <i>(voor degenen die nieuwsgierig zijn: het gaat om <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/addon-operator\">addon-operator<\/a><\/noindex>, waar we <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">recentelijk hebben we verteld<\/a><\/noindex>)<\/i>. Hieronder zullen afzonderlijke instructies worden weergegeven die iedereen op zijn eigen installaties kan toepassen om de voorgestelde oplossing in de praktijk uit te proberen.<\/p>\n<h2>Laten we het in de praktijk proberen<\/h2>\n<p><\/p>\n<h3>Vereisten<\/h3>\n<p>\nDe gegevens zijn heel eenvoudig:<\/p>\n<ol>\n<li> Kubernetes-cluster (minikube is ook geschikt);<\/li>\n<li> Een RabbitMQ-cluster (dat kan worden uitgerold op bare metal, of zoals een gewoon cluster in Kubernetes uit de offici\u00eble Helm-chart).<\/li>\n<\/ol>\n<p>\nVoor het onderstaande voorbeeld heb ik RMQ in Kubernetes uitgerold en het genoemd <code>rmq-old<\/code>.<\/p>\n<h3>Voorbereiding van de testomgeving<\/h3>\n<p>\n1. Download de Helm-chart en bewerk deze een beetje:<\/p>\n<pre><code class=\"bash\">helm fetch --untar stable\/rabbitmq-ha<\/code><\/pre>\n<p>\nVoor het gemak stellen we een wachtwoord in, <code>ErlangCookie<\/code> en stellen we het beleid in op <code>ha-all<\/code>, zodat de wachtrijen standaard synchroniseren tussen alle knooppunten van het RMQ-cluster:<\/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. Installeer de chart:<\/p>\n<pre><code class=\"bash\">helm install . --name rmq-old --namespace rmq-old<\/code><\/pre>\n<p>\n3. Ga naar de RabbitMQ-admin, maak een nieuwe wachtrij aan en voeg een paar berichten toe. Deze hebben we nodig om na de migratie te kunnen bevestigen dat alle gegevens behouden zijn en we niets verloren zijn:<\/p>\n<p><img decoding=\"async\" alt=\"Moeizame migratie van RabbitMQ naar Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/b4b78ce622903dada396ced196c2ecce.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe testomgeving is klaar: we hebben een 'oude' RabbitMQ met gegevens die we moeten overzetten.<\/p>\n<h3>Migratie van het RabbitMQ-cluster<\/h3>\n<p>\n1. Laten we als eerste een nieuwe RabbitMQ uitrollen in <b>een vriend<\/b> de namespace met <b>dezelfde naam<\/b> <code>ErlangCookie<\/code> en wachtwoord voor de gebruiker. Hiervoor voeren we de bovengenoemde stappen uit, waarbij we de eindopdracht voor de installatie van RMQ aanpassen naar het volgende:<\/p>\n<pre><code class=\"bash\">helm install . --name rmq-new --namespace rmq-new<\/code><\/pre>\n<p>\n2. Nu is het nodig om het nieuwe cluster te combineren met het oude. Daarom gaan we naar elk van de pod\u2019s <b>nieuwe<\/b> RabbitMQ en voeren we de commando's uit:<\/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>\nIn de variabele <code>OLD_RMQ<\/code> verwijst naar het adres van een van de knooppunten <b>van het oude<\/b> RMQ-cluster.<\/p>\n<p>Deze commando's zullen de huidige knoop <b>nieuwe<\/b> van het RMQ-cluster stoppen, verbinden met het oude cluster en opnieuw opstarten.<\/p>\n<p>3. Het RMQ-cluster met 6 knooppunten is gereed:<\/p>\n<p><img decoding=\"async\" alt=\"Moeizame migratie van RabbitMQ naar Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/88f4655556c1146f7a6e54fd2fd798f4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWacht tot de berichten zijn gesynchroniseerd tussen alle knooppunten. Het is niet moeilijk te raden dat de tijd voor de synchronisatie van berichten afhangt van de kracht van de hardware waarop het cluster is ge\u00efmplementeerd en het aantal berichten. In het beschreven scenario zijn er slechts 10 berichten, dus de gegevens zijn onmiddellijk gesynchroniseerd, maar bij een groot aantal berichten kan de synchronisatie uren duren.<\/p>\n<p>Dus, de status van de synchronisatie:<\/p>\n<p><img decoding=\"async\" alt=\"Moeizame migratie van RabbitMQ naar Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/1185591d8d5478634f35b7433ca75bbc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHier <code>+5<\/code> betekent dat de berichten al zijn <b>nog<\/b> op 5 knooppunten (behalve die in het veld <code>Node<\/code>). Daarom is de synchronisatie succesvol verlopen.<\/p>\n<p>4. Het enige wat je nog hoeft te doen is het adres van RMQ in de applicatie om te schakelen naar het nieuwe cluster (specifieke stappen hiervoor zijn afhankelijk van de technologie-stack die je gebruikt en andere specificaties van de applicatie), waarna je afscheid kunt nemen van het oude.<\/p>\n<p>Voor de laatste operatie (d.w.z. het <b>worden toegevoegd na<\/b> overschakelen van de applicatie naar het nieuwe cluster) ga je naar elk knooppunt <b>van het oude<\/b> van het cluster en voer je de commando's uit:<\/p>\n<pre><code class=\"bash\">rabbitmqctl stop_app\nrabbitmqctl reset<\/code><\/pre>\n<p>\nHet cluster \"vergeet\" de oude knooppunten: je kunt de oude RMQ verwijderen, waarmee de verhuizing is voltooid.<\/p>\n<p><i><b>Opmerking<\/b>: Als je RMQ met certificaten gebruikt, verandert er principieel niets \u2014 het verhuisproces zal op dezelfde manier plaatsvinden.<\/i><\/p>\n<h2>Conclusies<\/h2>\n<p>\nHet beschreven schema is praktisch geschikt voor alle gevallen waarin we RabbitMQ moeten verplaatsen of simpelweg naar een nieuw cluster moeten verhuizen.<\/p>\n<p>In ons geval ontstonden er slechts moeilijkheden toen RMQ vanuit veel plekken werd aangesproken en we geen mogelijkheid hadden om overal het adres van RMQ naar het nieuwe te wijzigen. Toen hebben we een nieuwe RMQ opgezet in dezelfde namespace met dezelfde labels, zodat deze onder de reeds bestaande services en Ingress'en viel, en bij het starten van de pod hebben we de labels handmatig gemanipuleerd, ze in het begin verwijderd zodat er geen verzoeken naar de lege RMQ gingen, en ze weer toegevoegd na de synchronisatie van de berichten.<\/p>\n<p>We hebben dezelfde strategie toegepast bij de upgrade van RabbitMQ naar een nieuwe versie met gewijzigde configuratie \u2014 alles werkte als een zonnetje.<\/p>\n<h2>P.S.<\/h2>\n<p>\nAls logisch vervolg op dit materiaal bereiden we artikelen voor over MongoDB (migratie van een fysieke server naar Kubernetes) en MySQL (hoe we deze database binnen Kubernetes voorbereiden). Ze zullen binnen enkele maanden worden gepubliceerd.<\/p>\n<h2>P.P.S.<\/h2>\n<p>\nLees ook op onze blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/431500\/\">Databases en Kubernetes (overzicht en video van de presentatie)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/417509\/\">K8s tips &amp; tricks: Versnellen van de bootstrap van grote databases<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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\udd47 Probleemloze migratie van RabbitMQ naar Kubernetes | ProHoster","description":"RabbitMQ \u2013 een broker geschreven in de programmeertaal Erlang.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/33075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=33075"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/33075\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/24827"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=33075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=33075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=33075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}