{"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\/fr\/blog\/administrirovanie\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes","title":{"rendered":"Migration sans tracas de RabbitMQ vers Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Migration sans tracas de RabbitMQ vers Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/32c491c8605e2488550efadbcb052320.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRabbitMQ est un broker de messages \u00e9crit en Erlang, qui permet d'organiser un cluster tol\u00e9rant aux pannes avec r\u00e9plication compl\u00e8te des donn\u00e9es sur plusieurs n\u0153uds, o\u00f9 chaque n\u0153ud peut traiter des requ\u00eates de lecture et d'\u00e9criture. Avec de nombreux clusters Kubernetes en production, nous g\u00e9rons un grand nombre d'installations de RabbitMQ et avons rencontr\u00e9 le besoin de migrer des donn\u00e9es d'un cluster \u00e0 un autre sans temps d'arr\u00eat.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Cette op\u00e9ration \u00e9tait n\u00e9cessaire dans au moins deux cas :<\/p>\n<ol>\n<li> Transf\u00e9rer des donn\u00e9es d'un cluster RabbitMQ ne fonctionnant pas sous Kubernetes vers un nouveau cluster d\u00e9j\u00e0 'kubernetis\u00e9' (c'est-\u00e0-dire fonctionnant dans des pods K8s).<\/li>\n<li> Migrer RabbitMQ au sein de Kubernetes d'un namespace \u00e0 un autre (par exemple, si les contours sont d\u00e9limit\u00e9s par des espaces de noms, pour transf\u00e9rer l'infrastructure d'un contour \u00e0 un autre).<\/li>\n<\/ol>\n<p>\nLa recette propos\u00e9e dans cet article est ax\u00e9e sur des situations (mais ne s'y limite pas) o\u00f9 il existe un ancien cluster RabbitMQ (par exemple, avec 3 n\u0153uds), qui est soit d\u00e9j\u00e0 dans K8s, soit sur d'anciens serveurs. Il est utilis\u00e9 par une application h\u00e9berg\u00e9e dans Kubernetes (d\u00e9j\u00e0 l\u00e0 ou en perspective) :<\/p>\n<p><img decoding=\"async\" alt=\"Migration sans tracas de RabbitMQ vers Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/5fba162c90bc441978429288c59300ef.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026 et nous devons le migrer vers un nouvel environnement de production dans Kubernetes.<\/p>\n<p>Nous allons d'abord d\u00e9crire l'approche g\u00e9n\u00e9rale pour la migration, suivie des d\u00e9tails techniques pour sa mise en \u0153uvre.<\/p>\n<h2>L'algorithme de migration<\/h2>\n<p>\nLa premi\u00e8re \u00e9tape, pr\u00e9liminaire, avant toute action, consiste \u00e0 v\u00e9rifier que l'ancien d\u00e9ploiement de RabbitMQ a le mode haute disponibilit\u00e9 activ\u00e9 (<noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/ha.html\">HA<\/a><\/noindex>). La raison est \u00e9vidente : nous ne voulons pas perdre de donn\u00e9es. Pour effectuer cette v\u00e9rification, vous pouvez acc\u00e9der \u00e0 l'interface d'administration de RabbitMQ et, sous l'onglet Admin \u2192 Policies, vous assurer que la valeur est d\u00e9finie sur <code>ha-mode: all<\/code>:<\/p>\n<p><img decoding=\"async\" alt=\"Migration sans tracas de RabbitMQ vers Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/2e37be2cd3685eb8cedfbc5949e5036f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nL'\u00e9tape suivante consiste \u00e0 d\u00e9ployer un nouveau cluster RabbitMQ dans des pods Kubernetes (dans notre cas, par exemple, compos\u00e9 de 3 n\u0153uds, mais leur nombre peut \u00eatre diff\u00e9rent).<\/p>\n<p>Apr\u00e8s cela, nous fusionnons l'ancien et le nouveau cluster RabbitMQ, formant un seul cluster (compos\u00e9 de 6 n\u0153uds) :<\/p>\n<p><img decoding=\"async\" alt=\"Migration sans tracas de RabbitMQ vers Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/52204b814f0ba73a20c4854e990c4059.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLe processus de synchronisation des donn\u00e9es entre l'ancien et le nouveau cluster RabbitMQ est lanc\u00e9. Une fois que toutes les donn\u00e9es sont synchronis\u00e9es entre tous les n\u0153uds du cluster, nous pouvons rediriger l'application vers le nouveau cluster :<\/p>\n<p><img decoding=\"async\" alt=\"Migration sans tracas de RabbitMQ vers Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/8bf19d4176e38b4679e96e0f1b8b57c1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nApr\u00e8s ces op\u00e9rations, il suffit de sortir les anciens n\u0153uds du cluster RabbitMQ, et le d\u00e9m\u00e9nagement peut \u00eatre consid\u00e9r\u00e9 comme termin\u00e9 :<\/p>\n<p><img decoding=\"async\" alt=\"Migration sans tracas de RabbitMQ vers Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/bccc9b9fc8d6691d24195e9a97a0f88b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNous avons plusieurs fois appliqu\u00e9 ce sch\u00e9ma dans notre production. Cependant, pour notre propre commodit\u00e9, nous l'avons r\u00e9alis\u00e9 au sein d'un syst\u00e8me sp\u00e9cialis\u00e9 qui distribue des configurations types de RMQ sur de nombreux clusters Kubernetes. <i>(pour ceux qui sont curieux : il s'agit de <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/addon-operator\">addon-operator<\/a><\/noindex>, dont nous <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">r\u00e9cemment, nous avons parl\u00e9<\/a><\/noindex>)<\/i>. Ci-dessous, des instructions sp\u00e9cifiques seront pr\u00e9sent\u00e9es que chacun peut appliquer sur ses installations pour essayer la solution propos\u00e9e en action.<\/p>\n<h2>Essayons en pratique<\/h2>\n<p><\/p>\n<h3>Exigences<\/h3>\n<p>\nLes pr\u00e9requis sont tr\u00e8s simples :<\/p>\n<ol>\n<li> Un cluster Kubernetes (minikube conviendra aussi);<\/li>\n<li> Un cluster RabbitMQ (il peut \u00eatre d\u00e9ploy\u00e9 sur du mat\u00e9riel nu ou cr\u00e9\u00e9 comme un cluster normal dans Kubernetes \u00e0 partir du Helm chart officiel).<\/li>\n<\/ol>\n<p>\nPour l'exemple d\u00e9crit ci-dessous, j'ai d\u00e9ploy\u00e9 RMQ dans Kubernetes et l'ai nomm\u00e9 <code>rmq-old<\/code>.<\/p>\n<h3>Pr\u00e9paration de l'environnement<\/h3>\n<p>\n1. T\u00e9l\u00e9chargeons le Helm chart et modifions-le l\u00e9g\u00e8rement :<\/p>\n<pre><code class=\"bash\">helm fetch --untar stable\/rabbitmq-ha<\/code><\/pre>\n<p>\nPour notre commodit\u00e9, d\u00e9finissons un mot de passe, <code>ErlangCookie<\/code> et \u00e9tablissons la politique <code>ha-all<\/code>, afin que par d\u00e9faut, les files d'attente soient synchronis\u00e9es entre tous les n\u0153uds du cluster RMQ :<\/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. Installons le chart :<\/p>\n<pre><code class=\"bash\">helm install . --name rmq-old --namespace rmq-old<\/code><\/pre>\n<p>\n3. Connectons-nous \u00e0 l'interface d'administration de RabbitMQ, cr\u00e9ons une nouvelle file d'attente et ajoutons quelques messages. Ils seront n\u00e9cessaires pour nous assurer qu'apr\u00e8s la migration, toutes les donn\u00e9es sont conserv\u00e9es et que rien n'est perdu :<\/p>\n<p><img decoding=\"async\" alt=\"Migration sans tracas de RabbitMQ vers Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/b4b78ce622903dada396ced196c2ecce.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nL'environnement de test est pr\u00eat : nous avons un RabbitMQ \u00ab ancien \u00bb avec des donn\u00e9es \u00e0 transf\u00e9rer.<\/p>\n<h3>Migration du cluster RabbitMQ<\/h3>\n<p>\n1. Tout d'abord, d\u00e9ployons un nouveau RabbitMQ dans <b>un autre<\/b> un espace de noms avec <b>les m\u00eames<\/b> <code>ErlangCookie<\/code> et mot de passe pour l'utilisateur. Pour cela, ex\u00e9cutons les op\u00e9rations d\u00e9crites ci-dessus, en modifiant la commande finale d'installation de RMQ comme suit :<\/p>\n<pre><code class=\"bash\">helm install . --name rmq-new --namespace rmq-new<\/code><\/pre>\n<p>\n2. Maintenant, il faut joindre le nouveau cluster \u00e0 l'ancien. Pour cela, nous entrons dans chacun des pod\u2019 de <b>du nouveau<\/b> RabbitMQ et ex\u00e9cutons les commandes :<\/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>\nDans la variable <code>OLD_RMQ<\/code> indique l'adresse d'un des n\u0153uds <b>de l'ancien<\/b> cluster RMQ.<\/p>\n<p>Ces commandes arr\u00eateront le n\u0153ud actuel <b>du nouveau<\/b> du cluster RMQ, l'ajouteront \u00e0 l'ancien cluster et le red\u00e9marreront.<\/p>\n<p>3. Le cluster RMQ compos\u00e9 de 6 n\u0153uds est pr\u00eat :<\/p>\n<p><img decoding=\"async\" alt=\"Migration sans tracas de RabbitMQ vers Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/88f4655556c1146f7a6e54fd2fd798f4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVous devez attendre que les messages soient synchronis\u00e9s entre tous les n\u0153uds. Il est facile de deviner que le temps de synchronisation des messages d\u00e9pend de la puissance du mat\u00e9riel sur lequel le cluster est d\u00e9ploy\u00e9 et du nombre de messages. Dans le sc\u00e9nario d\u00e9crit, il n'y en a que 10, donc les donn\u00e9es se sont synchronis\u00e9es instantan\u00e9ment, mais avec un nombre de messages suffisamment \u00e9lev\u00e9, la synchronisation peut durer des heures.<\/p>\n<p>Alors, le statut de synchronisation :<\/p>\n<p><img decoding=\"async\" alt=\"Migration sans tracas de RabbitMQ vers Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/1185591d8d5478634f35b7433ca75bbc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIci <code>+5<\/code> signifie que les messages se trouvent d\u00e9j\u00e0 <b>encore<\/b> sur 5 n\u0153uds (en plus de celui indiqu\u00e9 dans le champ <code>N\u0153ud<\/code>). Ainsi, la synchronisation a r\u00e9ussi.<\/p>\n<p>4. Il ne reste plus qu'\u00e0 changer l'adresse RMQ dans l'application pour le nouveau cluster (les actions sp\u00e9cifiques ici d\u00e9pendent de la pile technologique que vous utilisez et d'autres sp\u00e9cificit\u00e9s de l'application), apr\u00e8s quoi vous pouvez faire vos adieux au pr\u00e9c\u00e9dent.<\/p>\n<p>Pour la derni\u00e8re op\u00e9ration (c'est-\u00e0-dire le <b>apr\u00e8s<\/b> changement d'application vers le nouveau cluster), connectez-vous \u00e0 chaque n\u0153ud <b>de l'ancien<\/b> du cluster et ex\u00e9cutez les commandes :<\/p>\n<pre><code class=\"bash\">rabbitmqctl stop_app\nrabbitmqctl reset<\/code><\/pre>\n<p>\nLe cluster a \u00ab oubli\u00e9 \u00bb les anciens n\u0153uds : vous pouvez supprimer l'ancien RMQ, ce qui conclura le d\u00e9m\u00e9nagement.<\/p>\n<p><i><b>Remarque<\/b>: Si vous utilisez RMQ avec des certificats, rien ne change fondamentalement \u2014 le processus de d\u00e9m\u00e9nagement se fera exactement de la m\u00eame mani\u00e8re.<\/i><\/p>\n<h2>Conclusions<\/h2>\n<p>\nLe sch\u00e9ma d\u00e9crit convient pratiquement \u00e0 tous les cas o\u00f9 nous devons transf\u00e9rer RabbitMQ ou simplement d\u00e9m\u00e9nager vers un nouveau cluster.<\/p>\n<p>Dans notre cas, des difficult\u00e9s n'ont surgi qu'une fois, lorsque RMQ \u00e9tait consult\u00e9 depuis de nombreux endroits, et nous n'avions pas la possibilit\u00e9 de changer l'adresse RMQ sur chacun d'eux. Alors, nous avons lanc\u00e9 un nouveau RMQ dans le m\u00eame espace de noms avec les m\u00eames \u00e9tiquettes, afin qu'il s'int\u00e8gre aux services et Ingress existants, et en lan\u00e7ant le pod manuellement, nous avons manipul\u00e9 les \u00e9tiquettes, en les supprimant d'abord pour que les requ\u00eates n'atteignent pas le RMQ vide, puis en les ajoutant \u00e0 nouveau apr\u00e8s la synchronisation des messages.<\/p>\n<p>Nous avons appliqu\u00e9 la m\u00eame strat\u00e9gie lors de la mise \u00e0 jour de RabbitMQ vers une nouvelle version avec une configuration modifi\u00e9e \u2014 tout a fonctionn\u00e9 comme sur des roulettes.<\/p>\n<h2>P.S.<\/h2>\n<p>\nComme suite logique \u00e0 ce mat\u00e9riau, nous pr\u00e9parons des articles sur MongoDB (migration d'un serveur physique vers Kubernetes) et MySQL (comment nous pr\u00e9parons ce SGBD dans Kubernetes). Ils seront publi\u00e9s dans les mois \u00e0 venir.<\/p>\n<h2>P.P.S.<\/h2>\n<p>\nLisez aussi dans notre blog :<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/431500\/\">Bases de donn\u00e9es et Kubernetes (aper\u00e7u et vid\u00e9o de la pr\u00e9sentation)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/417509\/\">Astuces et conseils K8s : Acc\u00e9l\u00e9rer le bootstrap de grandes bases de donn\u00e9es<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Source : <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.2 - 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\/fr\/blog\/administrirovanie\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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\udd47Migration sans tracas de RabbitMQ vers Kubernetes | ProHoster","description":"RabbitMQ \u2013 un courtier \u00e9crit en langage Erlang.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/33075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=33075"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/33075\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/24827"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=33075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=33075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=33075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}