{"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\/sv\/blog\/administrirovanie\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes","title":{"rendered":"En utmanande migrering av RabbitMQ till Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"En utmanande migrering av RabbitMQ till Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/32c491c8605e2488550efadbcb052320.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRabbitMQ \u2013 en med Erlang skrivna meddelandebroker som m\u00f6jligg\u00f6r att skapa en fel-tolerant kluster med full datareplication \u00f6ver flera noder, d\u00e4r varje nod kan hantera l\u00e4s- och skrivf\u00f6rfr\u00e5gningar. Med m\u00e5nga kluster Kubernetes i produktion st\u00f6der vi ett stort antal RabbitMQ-installationer och har st\u00f6tt p\u00e5 behovet av att migrera data fr\u00e5n ett kluster till ett annat utan driftstopp.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Denna operation var n\u00f6dv\u00e4ndig f\u00f6r oss i minst tv\u00e5 fall:<\/p>\n<ol>\n<li> \u00d6verf\u00f6ring av data fr\u00e5n ett RabbitMQ-kluster som inte \u00e4r i Kubernetes till ett nytt \u2013 redan \"kuberneteserat\" (d.v.s. som fungerar i K8s-poddar) \u2013 kluster.<\/li>\n<li> Migrering av RabbitMQ inom Kubernetes fr\u00e5n ett namespace till ett annat (t.ex. om konturerna \u00e4r avgr\u00e4nsade av namnrymder, f\u00f6r att \u00f6verf\u00f6ra infrastrukturen fr\u00e5n ett kontur till ett annat).<\/li>\n<\/ol>\n<p>\nReceptet som f\u00f6resl\u00e5s i artikeln \u00e4r inriktat p\u00e5 situationer (men begr\u00e4nsas inte till dem) d\u00e4r det finns ett gammalt RabbitMQ-kluster (t.ex. med 3 noder) som antingen redan \u00e4r i K8s eller p\u00e5 n\u00e5gra gamla servrar. Ett applikation arbetar med detta, som \u00e4r placerad i Kubernetes (redan d\u00e4r eller i framtiden):<\/p>\n<p><img decoding=\"async\" alt=\"En utmanande migrering av RabbitMQ till Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/5fba162c90bc441978429288c59300ef.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026 och vi st\u00e5r inf\u00f6r uppgiften att migrera den till en ny produktion i Kubernetes.<\/p>\n<p>F\u00f6rst kommer den allm\u00e4nna metoden f\u00f6r sj\u00e4lva migreringen att beskrivas, och f\u00f6rst d\u00e4refter tekniska detaljer f\u00f6r dess genomf\u00f6rande.<\/p>\n<h2>Migreringsalgoritm<\/h2>\n<p>\nDet f\u00f6rsta, prelimin\u00e4ra steget innan n\u00e5gra \u00e5tg\u00e4rder \u2013 kontrollera att den gamla RabbitMQ-installationen har h\u00f6g tillg\u00e4nglighet aktiverad (<noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/ha.html\">HA<\/a><\/noindex>). Anledningen \u00e4r uppenbar \u2013 vi vill ju inte f\u00f6rlora n\u00e5gra data. F\u00f6r att genomf\u00f6ra denna kontroll kan du g\u00e5 in i RabbitMQ:s adminpanel och under fliken Admin \u2192 Policies kontrollera att v\u00e4rdet \u00e4r inst\u00e4llt p\u00e5 <code>ha-mode: all<\/code>:<\/p>\n<p><img decoding=\"async\" alt=\"En utmanande migrering av RabbitMQ till Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/2e37be2cd3685eb8cedfbc5949e5036f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00e4sta steg \u2013 vi uppr\u00e4ttar ett nytt RabbitMQ-kluster i K8s-poddar (i v\u00e5rt fall till exempel med 3 noder, men antalet kan vara annat).<\/p>\n<p>D\u00e4refter sl\u00e5r vi samman det gamla och det nya RabbitMQ-klustret, vilket ger oss ett enda kluster (med 6 noder):<\/p>\n<p><img decoding=\"async\" alt=\"En utmanande migrering av RabbitMQ till Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/52204b814f0ba73a20c4854e990c4059.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nProcessen f\u00f6r datasykronisering mellan det gamla och det nya RabbitMQ-klustret initieras. N\u00e4r alla data har synkroniserats mellan alla noder i klustret kan vi byta applikationen till att anv\u00e4nda det nya klustret:<\/p>\n<p><img decoding=\"async\" alt=\"En utmanande migrering av RabbitMQ till Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/8bf19d4176e38b4679e96e0f1b8b57c1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEfter dessa operationer r\u00e4cker det att ta bort de gamla noderna fr\u00e5n RabbitMQ-klustret, och flytten kan anses vara avslutad:<\/p>\n<p><img decoding=\"async\" alt=\"En utmanande migrering av RabbitMQ till Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/bccc9b9fc8d6691d24195e9a97a0f88b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDenna l\u00f6sning har vi anv\u00e4nt flera g\u00e5nger i v\u00e5r produktion. Men f\u00f6r v\u00e5r egen bekv\u00e4mlighet har vi implementerat den inom en specialiserad system, som sprider standardkonfigurationer av RMQ p\u00e5 flera Kubernetes-kluster. <i>(f\u00f6r dem som \u00e4r nyfikna: det handlar om <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/addon-operator\">addon-operator<\/a><\/noindex>, om vilken vi <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">nyligen ber\u00e4ttade vi<\/a><\/noindex>)<\/i>. Nedan kommer separata instruktioner att presenteras som var och en kan till\u00e4mpa p\u00e5 sina installationer f\u00f6r att prova den f\u00f6reslagna l\u00f6sningen i praktiken.<\/p>\n<h2>Testar i praktiken<\/h2>\n<p><\/p>\n<h3>Krav<\/h3>\n<p>\nSpecifikationerna \u00e4r mycket enkla:<\/p>\n<ol>\n<li> Kubernetes-kluster (minikube fungerar ocks\u00e5);<\/li>\n<li> RabbitMQ-kluster (kan \u00e4ven distribueras p\u00e5 bare metal och skapas som ett vanligt kluster i Kubernetes fr\u00e5n den officiella Helm-diagrammet).<\/li>\n<\/ol>\n<p>\nF\u00f6r exemplet nedan har jag distribuerat RMQ i Kubernetes och kallat den <code>rmq-old<\/code>.<\/p>\n<h3>F\u00f6rberedelse av stand<\/h3>\n<p>\n1. Ladda ner Helm-diagrammet och redigera det lite:<\/p>\n<pre><code class=\"bash\">helm fetch --untar stable\/rabbitmq-ha<\/code><\/pre>\n<p>\nF\u00f6r bekv\u00e4mlighetens skull anger vi l\u00f6senordet, <code>ErlangCookie<\/code> och g\u00f6r en policy <code>ha-all<\/code>, s\u00e5 att k\u00f6erna som standard synkroniseras mellan alla noder i RMQ-klustret:<\/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. Installera diagrammet:<\/p>\n<pre><code class=\"bash\">helm install . --name rmq-old --namespace rmq-old<\/code><\/pre>\n<p>\n3. G\u00e5 in i RabbitMQ-administrationsgr\u00e4nssnittet, skapa en ny k\u00f6 och l\u00e4gg till n\u00e5gra meddelanden. De kommer att beh\u00f6vas f\u00f6r att vi efter migrationen ska kunna s\u00e4kerst\u00e4lla att alla data har bevarats och att vi inte har f\u00f6rlorat n\u00e5got:<\/p>\n<p><img decoding=\"async\" alt=\"En utmanande migrering av RabbitMQ till Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/b4b78ce622903dada396ced196c2ecce.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTeststandet \u00e4r klart: vi har en 'gammal' RabbitMQ med data som beh\u00f6ver flyttas.<\/p>\n<h3>Migration av RabbitMQ-kluster<\/h3>\n<p>\n1. F\u00f6rst ska vi distribuera en ny RabbitMQ i <b>annan<\/b> namnrymden med <b>samma<\/b> <code>ErlangCookie<\/code> och l\u00f6senord f\u00f6r anv\u00e4ndaren. F\u00f6r detta g\u00f6r vi de ovan beskrivna operationerna, \u00e4ndrar den slutliga installationskommandot f\u00f6r RMQ till f\u00f6ljande:<\/p>\n<pre><code class=\"bash\">helm install . --name rmq-new --namespace rmq-new<\/code><\/pre>\n<p>\n2. Nu beh\u00f6ver den nya klustern sammanfogas med den gamla. F\u00f6r detta g\u00e5r vi in i varje av pod'arna <b>ny<\/b> RabbitMQ och k\u00f6r kommandona:<\/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 variabeln <code>OLD_RMQ<\/code> \u00e4r adressen till en av noderna <b>i den gamla<\/b> RMQ-klustret.<\/p>\n<p>Dessa kommandon kommer att stoppa den aktuella noden <b>ny<\/b> i RMQ-klustret, koppla den till det gamla klustret och starta den igen.<\/p>\n<p>3. RMQ-klustret med 6 noder \u00e4r klart:<\/p>\n<p><img decoding=\"async\" alt=\"En utmanande migrering av RabbitMQ till Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/88f4655556c1146f7a6e54fd2fd798f4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDu m\u00e5ste v\u00e4nta tills meddelandena synkroniseras mellan alla noder. Det \u00e4r inte sv\u00e5rt att gissa att tiden f\u00f6r meddelandesynkronisering beror p\u00e5 kapaciteten hos den h\u00e5rdvara d\u00e4r klustret \u00e4r implementerat och antalet meddelanden. I det beskrivna scenariot finns det totalt 10 meddelanden, s\u00e5 datan synkroniserades omedelbart, men med ett tillr\u00e4ckligt stort antal meddelanden kan synkroniseringen ta timmar.<\/p>\n<p>S\u00e5, status f\u00f6r synkronisering:<\/p>\n<p><img decoding=\"async\" alt=\"En utmanande migrering av RabbitMQ till Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/1185591d8d5478634f35b7433ca75bbc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nH\u00e4r <code>+5<\/code> betyder att meddelandena redan finns <b>om<\/b> p\u00e5 5 noder (f\u00f6rutom den som anges i f\u00e4ltet <code>Node<\/code>). D\u00e4rmed har synkroniseringen genomf\u00f6rts framg\u00e5ngsrikt.<\/p>\n<p>4. Det \u00e5terst\u00e5r bara att v\u00e4xla applikationens RMQ-adress till det nya klustret (specifika \u00e5tg\u00e4rder h\u00e4r beror p\u00e5 vilken teknikstack du anv\u00e4nder och andra specifika egenskaper hos applikationen), efter vilket du kan s\u00e4ga adj\u00f6 till det gamla.<\/p>\n<p>F\u00f6r den sista operationen (dvs. <b>efter<\/b> v\u00e4xling av applikationen till det nya klustret), g\u00e5r vi in p\u00e5 varje nod <b>i den gamla<\/b> i klustret och utf\u00f6r kommandona:<\/p>\n<pre><code class=\"bash\">rabbitmqctl stop_app\nrabbitmqctl reset<\/code><\/pre>\n<p>\nKlustret har \"gl\u00f6mt\" de gamla noderna: du kan ta bort den gamla RMQ, och flytten kommer att vara avslutad.<\/p>\n<p><i><b>Anm\u00e4rkning<\/b>: Om du anv\u00e4nder RMQ med certifikat f\u00f6r\u00e4ndras ingenting principiellt \u2014 flyttprocessen kommer att genomf\u00f6ras p\u00e5 precis samma s\u00e4tt.<\/i><\/p>\n<h2>Slutsatser<\/h2>\n<p>\nDet beskrivna schemat passar praktiskt taget f\u00f6r alla situationer n\u00e4r vi beh\u00f6ver flytta RabbitMQ eller helt enkelt flytta till ett nytt kluster.<\/p>\n<p>I v\u00e5rt fall uppstod sv\u00e5righeter bara en g\u00e5ng, n\u00e4r RMQ anropades fr\u00e5n m\u00e5nga st\u00e4llen och vi inte hade m\u00f6jlighet att \u00e4ndra RMQ-adressen \u00f6verallt. D\u00e5 startade vi en ny RMQ i samma namespaces med samma etiketter, s\u00e5 att den skulle matcha de redan existerande tj\u00e4nsterna och Ingressarna, och n\u00e4r vi startade podden manipulerade vi etiketter manuellt, tog bort dem i b\u00f6rjan s\u00e5 att ingen f\u00f6rfr\u00e5gan hamnade p\u00e5 den tomma RMQ, och lade tillbaka dem efter synkronisering av meddelanden.<\/p>\n<p>Samma strategi till\u00e4mpade vi vid uppgradering av RabbitMQ till en ny version med \u00e4ndrad konfiguration \u2014 allt fungerade som en klocka.<\/p>\n<h2>P.S.<\/h2>\n<p>\nSom en logisk forts\u00e4ttning p\u00e5 detta material f\u00f6rbereder vi artiklar om MongoDB (migration fr\u00e5n en fysisk server till Kubernetes) och MySQL (hur vi f\u00f6rbereder denna DBMS inom Kubernetes). De kommer att publiceras inom de kommande m\u00e5naderna.<\/p>\n<h2>P.P.S.<\/h2>\n<p>\nL\u00e4s \u00e4ven i v\u00e5r blogg:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/431500\/\">Databaser och Kubernetes (\u00f6versikt och videof\u00f6rel\u00e4sning)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/417509\/\">K8s tips &amp; tricks: Snabbare bootstrap av stora databaser<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\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\/sv\/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\udd47Enklare migration av RabbitMQ till Kubernetes | ProHoster","description":"RabbitMQ \u2013 en broker skriven i Erlang.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/33075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=33075"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/33075\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/24827"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=33075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=33075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=33075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}