<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>QEMU on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/qemu/</link><description>Recent content in QEMU on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Mon, 07 Nov 2022 06:30:00 +0200</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/qemu/index.xml" rel="self" type="application/rss+xml"/><item><title>Lancer des containers Docker avec Proxmox VE (et LXC)</title><link>https://blog.zwindler.fr/2022/11/07/containers-docker-dans-proxmox-avec-lxc/</link><pubDate>Mon, 07 Nov 2022 06:30:00 +0200</pubDate><guid>https://blog.zwindler.fr/2022/11/07/containers-docker-dans-proxmox-avec-lxc/</guid><description>&lt;img src="https://blog.zwindler.fr/2019/10/proxmox.webp" alt="Featured image of post Lancer des containers Docker avec Proxmox VE (et LXC)" /&gt;&lt;h2 id="introduction"&gt;Introduction
&lt;/h2&gt;&lt;p&gt;J&amp;rsquo;ai trouvé plusieurs tutos pour installer Docker (engine) &lt;strong&gt;à l&amp;rsquo;intérieur&lt;/strong&gt; d&amp;rsquo;un container LXC sous Proxmox VE pour ensuite lancer des containers Docker dedans. Le souci c&amp;rsquo;est que vous devez vous logger &lt;strong&gt;dans&lt;/strong&gt; le container LXC avant de pouvoir interagir avec vos containers Docker.&lt;/p&gt;
&lt;p&gt;On peut aussi installer Docker directement sur Proxmox VE mais ce n&amp;rsquo;est pas trop conseillé et on n&amp;rsquo;a pas la facilité d&amp;rsquo;usage de LXC avec la GUI de Proxmox.&lt;/p&gt;
&lt;p&gt;Et en fait, il se trouve qu&amp;rsquo;on peut lancer des images Docker &lt;strong&gt;comme l&amp;rsquo;OS&lt;/strong&gt; d&amp;rsquo;un container LXC et ainsi avoir des Docker pilotés par Proxmox. On aura donc pas un comportement 100% identique à si vous aviez fait un &lt;code&gt;docker run&lt;/code&gt; sur votre machine.&lt;/p&gt;
&lt;p&gt;Cependant, on gagnera un échange un container totalement identique à vos autres containers LXC de votre cluster (avec toutes les fonctions associées) mais lancé avec une image Docker.&lt;/p&gt;
&lt;p&gt;Mais d&amp;rsquo;abord je vous propose de revenir un peu en arrière avant de vous montrer comment&amp;hellip;&lt;/p&gt;
&lt;h2 id="contexte"&gt;Contexte
&lt;/h2&gt;&lt;p&gt;Vous le savez, je fais du Proxmox VE depuis un moment. Proxmox VE est une super distribution clé en main et production ready de virtualisation de serveurs (c&amp;rsquo;est même de l&amp;rsquo;hyperconvergé si on active la partie Ceph).&lt;/p&gt;
&lt;p&gt;Il y a plein de petites choses que j&amp;rsquo;aime avec Proxmox VE, et l&amp;rsquo;une d&amp;rsquo;elle est qu&amp;rsquo;on peut créer des containers Linux avec LXC plutôt que des machines virtuelles QEMU. &lt;a class="link" href="https://blog.zwindler.fr/2022/10/22/proxmox-tips-tricks/" &gt;J&amp;rsquo;avais fait un article pour en parler&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A l&amp;rsquo;usage (sauf paramétrage kernel spécifique) le container LXC se comporte de manière strictement identique à une VM dans Proxmox, mais pour une fraction des ressources ! On a un OS, on installe des applications dessus, comme une VM.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2022/11/nginx.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Un frontal nginx pour plusieurs applications. Le container LXC complet ne consomme que quelques Mo&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Certes c&amp;rsquo;est beaucoup moins bien isolé qu&amp;rsquo;une vraie VM (car c&amp;rsquo;est un container, on est isolé des autres processus, mais on tourne sur le kernel de l&amp;rsquo;hyperviseur directement).&lt;/p&gt;
&lt;p&gt;Mais avec si peu de besoins en ressources, je peux héberger de nombreuses petites applications dans des contextes différents avec de très petites machines physiques (des Atom 4Go de RAM à 6€ par mois chez OneProviders) ce qui serait impossible avec une vraie VM.&lt;/p&gt;
&lt;h2 id="cest-bien-mais-pas-suffisant"&gt;C&amp;rsquo;est bien, mais pas suffisant
&lt;/h2&gt;&lt;p&gt;Cependant, LXC n&amp;rsquo;est pas la techno de containerisation la plus connue/hype. Depuis des années sur le forum, à chaque fois que des gens demande le support de Docker dans Proxmox VE, on les envoie balader. Pas toujours très gentiment d&amp;rsquo;ailleurs&amp;hellip;&lt;/p&gt;
&lt;p&gt;Pourtant, il y a plusieurs raisons pour avoir envie de lancer des containers Docker sur son infra Proxmox :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;D&amp;rsquo;abord, Docker n&amp;rsquo;est pas autant des workloads stateless et/ou éphémères qu&amp;rsquo;on le croit. Beaucoup d&amp;rsquo;applications containerisées auraient toute leur place sur un cluster de virtualisation.&lt;/li&gt;
&lt;li&gt;Ensuite parce que beaucoup d&amp;rsquo;éditeurs de logiciels sont devenus faignants. Certains ne gèrent plus les processus d&amp;rsquo;installation (ou alors juste sur un OS) et fournissent juste une image Docker qu&amp;rsquo;ils maintiennent mise à jour.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On doit donc se contenter de VMs dans Proxmox pour lancer des containers Docker (cf mon point du début).&lt;/p&gt;
&lt;h2 id="lxc-supporte-les-images-oci"&gt;LXC supporte les images OCI
&lt;/h2&gt;&lt;p&gt;Coup de théâtre. Il y a quelques jours, j&amp;rsquo;ai découvert que LXC, le moteur de containerisation de Proxmox VE, était compatible avec le format OCI.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.buzzwrd.me/index.php/2021/03/10/creating-lxc-containers-from-docker-and-oci-images/" target="_blank" rel="noopener"
&gt;buzzwrd.me - Creating LXC containers from docker and OCI images&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour ceux qui ne connaissent pas OCI, il s&amp;rsquo;agit d&amp;rsquo;une organisation visant à créer un standard pour unifie la façon de stocker les containers.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The Open Container Initiative is an open governance structure for the express purpose of creating open industry standards around container formats and runtimes.
&lt;a class="link" href="https://opencontainers.org/" target="_blank" rel="noopener"
&gt;opencontainers.org/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Et Docker respecte ce format : on peut donc théoriquement lancer depuis LXC des containers dont l&amp;rsquo;image de base est une image Docker.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Je suis profondément choqué
(Réf &amp;ldquo;Jean François Coppé&amp;rdquo; pour ceux qui n&amp;rsquo;ont pas le mème)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="bon-quand-est-ce-quon-commence-"&gt;Bon, quand est-ce qu&amp;rsquo;on commence ?
&lt;/h2&gt;&lt;p&gt;Disclaimer: ce qui suit est de la bidouille. Rien n&amp;rsquo;est supporté et je ne le conseille pas en production. Il est probable qu&amp;rsquo;il y ait aussi des limitations (notamment pour ce qui est stockage).&lt;/p&gt;
&lt;p&gt;D&amp;rsquo;abord, il manque quelques dépendances pour que la fonction OCI de LXC soit utilisable sous Proxmox VE :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo apt install skopeo umoci jq
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ensuite, par défaut, les containers LXC s&amp;rsquo;attachent à un bridge linux qui s&amp;rsquo;appelle &lt;code&gt;lxcbr0&lt;/code&gt;. Cependant ce bridge n&amp;rsquo;existe probablement pas sur votre installation de Proxmox VE (pas installé par défaut).&lt;/p&gt;
&lt;p&gt;En &lt;em&gt;quick and dirty&lt;/em&gt;, on peut juste remplacer le nom par défaut, même si idéalement il faudrait trouver le flag dans la CLI pour changer le bridge. En fonction de comment vous avez configuré le réseau dans votre serveur Proxmox VE, vous allez probablement utiliser &lt;code&gt;vmbr0&lt;/code&gt; ou &lt;code&gt;vmbr1&lt;/code&gt; :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sed -i &amp;#39;s/lxcbr0/vmbr1/g&amp;#39; /etc/lxc/default.conf
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Maintenant qu&amp;rsquo;on a tout, on peut lancer nos containers LXC à partir d&amp;rsquo;images docker. Ici je lance l&amp;rsquo;image officielle &lt;code&gt;alpine:latest&lt;/code&gt;, mais j&amp;rsquo;aurais pu prendre n&amp;rsquo;importe quelle autre :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;lxc-create 500 -t oci -- --url docker://alpine:latest
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;J&amp;rsquo;ai créé un container appelé &amp;ldquo;500&amp;rdquo; (car les VMs et les containers LXC dans proxmox VE sont appelés avec des nombres). L&amp;rsquo;image est téléchargée puis le container créé :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2022/11/lxc_docker_pull.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On peut maintenant le démarrer (avec &lt;code&gt;lxc-execute&lt;/code&gt; on lance le container et ouvrir un prompt directement dedans, mais on a aussi &lt;code&gt;lxc-start&lt;/code&gt; et &lt;code&gt;lxc-attach&lt;/code&gt;)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;lxc-execute 500
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2022/11/alpine.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Tel quel, Proxmox VE ne sait pas que notre container existe et il n&amp;rsquo;apparaitra pas dans l&amp;rsquo;UI. Mais ça fonctionne ;-).&lt;/p&gt;
&lt;h2 id="bonus"&gt;Bonus
&lt;/h2&gt;&lt;p&gt;On peut même tricher et faire croire à Proxmox que c&amp;rsquo;est un container LXC qu&amp;rsquo;il a créé lui-même en créant un fichier &lt;code&gt;500.conf&lt;/code&gt;, dans le dossier &lt;code&gt;/etc/pve/lxc/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Les seules lignes obligatoires sont les suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;arch (amd64 sauf si vous êtes sur ARM)&lt;/li&gt;
&lt;li&gt;cores (la limite de CPUs à imposer au container)&lt;/li&gt;
&lt;li&gt;hostname&lt;/li&gt;
&lt;li&gt;memory (la limite de RAM à imposer au container)&lt;/li&gt;
&lt;li&gt;ostype&lt;/li&gt;
&lt;li&gt;rootfs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2022/11/lxc_config.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Une fois le fichier créé, automatiquement le container apparait dans la liste des VMs de l&amp;rsquo;hôte. On peut le démarrer et ça fonctionne :)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2022/11/docker_lxc_running.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Le container pourra être démarré, arrêté, etc. Le tout depuis la GUI de Proxmox VE :)&lt;/p&gt;
&lt;p&gt;Have fun!&lt;/p&gt;
&lt;h2 id="source"&gt;Source
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://pve.proxmox.com/wiki/Linux_Container" target="_blank" rel="noopener"
&gt;Proxmox VE - Linux Container&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://thehomelab.wiki/books/promox-ve/page/setup-and-install-docker-in-a-promox-7-lxc-conainer" target="_blank" rel="noopener"
&gt;Setup and Install Docker in a Promox 7 LXC Conainer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.buzzwrd.me/index.php/2021/03/10/creating-lxc-containers-from-docker-and-oci-images/" target="_blank" rel="noopener"
&gt;buzzwrd.me - Creating LXC containers from docker and OCI images&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Mieux migrer ses VM de Proxmox VE vers XCP NG (part 2)</title><link>https://blog.zwindler.fr/2022/08/08/migrer-une-vm-de-proxmoxve-vers-xcp-ng/</link><pubDate>Mon, 08 Aug 2022 06:00:00 +0200</pubDate><guid>https://blog.zwindler.fr/2022/08/08/migrer-une-vm-de-proxmoxve-vers-xcp-ng/</guid><description>&lt;img src="https://blog.zwindler.fr/2022/07/pve-to-xcpng.webp" alt="Featured image of post Mieux migrer ses VM de Proxmox VE vers XCP NG (part 2)" /&gt;&lt;h2 id="résumé-des-épisodes-précédents"&gt;Résumé des épisodes précédents
&lt;/h2&gt;&lt;p&gt;Dans l&amp;rsquo;article d&amp;rsquo;il y a 2 semaines (&lt;a class="link" href="https://blog.zwindler.fr/2022/07/24/migrer-une-vm-de-proxmoxve-vers-xcp-ng" &gt;Migrer une VM de Proxmox VE vers XCP NG&lt;/a&gt;), j&amp;rsquo;ai introduit très brièvement de XCP-NG (un OS clé en main pour faire de la virtualisation, sur une base de Xen / XenServer) et déroulé un tuto pour récupérer une VM sur Proxmox VE et l&amp;rsquo;importer dans XCP-NG.&lt;/p&gt;
&lt;p&gt;Pour faire court, les étapes étaient les suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Récupération du disque virtuel sur Proxmox VE&lt;/li&gt;
&lt;li&gt;Transformer le disque virtuel en VHD&lt;/li&gt;
&lt;li&gt;Le transférer sur le serveur XCP-NG&lt;/li&gt;
&lt;li&gt;Créer un disque dans XenOrchestra (l&amp;rsquo;UI de XCP-NG, pour faire simple)&lt;/li&gt;
&lt;li&gt;Importer le contenu du VHD dans le disque vide qu&amp;rsquo;on a créé dans l&amp;rsquo;UI&lt;/li&gt;
&lt;li&gt;Créer une VM dans l&amp;rsquo;UI et lui affecter le disque&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="faire-mieux"&gt;Faire mieux
&lt;/h2&gt;&lt;p&gt;Dans le cadre d&amp;rsquo;un PoC avec une poignée de VMs, ça me parait totalement acceptable comme méthodologie (même si c&amp;rsquo;est un peu fastidieux) mais dans le cadre d&amp;rsquo;une migration, c&amp;rsquo;est difficilement scalable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note :&lt;/strong&gt; Vates (l&amp;rsquo;entreprise qui édite XCP-NG) accompagne ses clients pro dans cette étape. A ma connaissance, ils travaillent également sur de l&amp;rsquo;outillage pour faciliter les transferts, mais Proxmox VE ne sera probablement pas la première &amp;ldquo;plateforme source&amp;rdquo; qui sera supportés par ce genre d&amp;rsquo;outils.&lt;/p&gt;
&lt;p&gt;Dans cet article, je vais donc vous parler d&amp;rsquo;une méthode alternative qui m&amp;rsquo;a été conseillée par les gens de chez Vates pour faciliter cette migration, et plus particulièrement les étapes suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le transférer sur le serveur XCP-NG&lt;/li&gt;
&lt;li&gt;Créer un disque dans XenOrchestra (l&amp;rsquo;UI de XCP-NG, pour faire simple)&lt;/li&gt;
&lt;li&gt;Importer le contenu du VHD dans le disque vide qu&amp;rsquo;on a créé dans l&amp;rsquo;UI&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="because-im-api-"&gt;Because I&amp;rsquo;m API 🎶
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;Clap along if you feel like that&amp;rsquo;s what you wanna do&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Vous l&amp;rsquo;avez deviné, on va passer par l&amp;rsquo;API de Xen Orchestra pour se faciliter la tâche. En effet, on va pouvoir rassembler les 3 actions ci dessus en seul appel via cURL !&lt;/p&gt;
&lt;p&gt;Même s&amp;rsquo;il y a un petit prérequis (à faire une fois), ça sera quand même beaucoup plus scalable pour bouger plusieurs VMs.&lt;/p&gt;
&lt;h2 id="you-token-to-me"&gt;You token to me?
&lt;/h2&gt;&lt;p&gt;[EDIT] Depuis la version 5.72 de Xen Orchestra, il est possible de récupérer un token directement dans la Web UI (cf &lt;a class="link" href="https://xen-orchestra.com/blog/xen-orchestra-5-72/#%F0%9F%93%A1-rest-api-token-generation" target="_blank" rel="noopener"
&gt;ce post&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;En lisant &lt;a class="link" href="https://xen-orchestra.com/docs/restapi.html#authentication" target="_blank" rel="noopener"
&gt;la documentation de la REST API (paragraphe authentication)&lt;/a&gt;, on apprend, sans surprise, que la première chose à faire est de récupérer un token permettant d&amp;rsquo;authentifier nos futures requêtes.&lt;/p&gt;
&lt;p&gt;On comprend ensuite que pour faire ça, on va avoir besoin d&amp;rsquo;un tool qui s&amp;rsquo;appelle &lt;a class="link" href="https://xen-orchestra.com/blog/xen-orchestra-from-the-cli/" target="_blank" rel="noopener"
&gt;xo-cli&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Si on suit la doc, il &amp;ldquo;suffit&amp;rdquo; d&amp;rsquo;installer ce module via &lt;code&gt;npm&lt;/code&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;npm install xo-cli
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Bon&amp;hellip; moi j&amp;rsquo;ai pas envie d&amp;rsquo;installer &lt;code&gt;npm&lt;/code&gt; sur mon poste donc j&amp;rsquo;ai fais une image Docker cracra pour ça ;-).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-Dockerfile" data-lang="Dockerfile"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;node&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;/app&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;RUN&lt;/span&gt; npm install --global xo-cli&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ENTRYPOINT&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;xo-cli&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le &lt;a class="link" href="https://github.com/zwindler/docker-xo-cli" target="_blank" rel="noopener"
&gt;Dockerfile est disponible ici&lt;/a&gt; et l&amp;rsquo;&lt;a class="link" href="https://hub.docker.com/repository/docker/zwindler/xo-cli" target="_blank" rel="noopener"
&gt;image docker buildée est disponible là&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Depuis son poste (en remplaçant évidemment @IP.Xen.Orchestra par l&amp;rsquo;IP de votre serveur XenOrchestra, &lt;a class="link" href="mailto:admin@admin.net" &gt;admin@admin.net&lt;/a&gt; par votre login)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;docker run -it xo-cli --createToken --allowUnauthorized @IP.Xen.Orchestra admin@admin.net Password: ************
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;Successfully logged with admin@admin.net
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;Authentication token created xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Si tout s&amp;rsquo;est bien passé, on récupère un token qu&amp;rsquo;on garde précieusement pour nos futures requêtes.&lt;/p&gt;
&lt;h2 id="champion-de-curling"&gt;champion de cURLing
&lt;/h2&gt;&lt;p&gt;De retour sur &lt;a class="link" href="https://xen-orchestra.com/docs/restapi.html#vdi-import" target="_blank" rel="noopener"
&gt;la documentation de l&amp;rsquo;API REST (paragraphe VDI import)&lt;/a&gt;, on trouve tout ce qu&amp;rsquo;il nous faut pour &amp;ldquo;crafter&amp;rdquo; notre requête cURL.&lt;/p&gt;
&lt;p&gt;A minima, on va avoir besoin de UUID de notre storage. Pour rappel, vous pouvez trouver ça dans l&amp;rsquo;UI.&lt;/p&gt;
&lt;p&gt;Si vous avez la flemme, vous pouvez aussi utilisez l&amp;rsquo;API REST pour récupérer les IDs des storages avec la requête suivante :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;curl \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt; -k -b authenticationToken=xxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxx \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt; https://@IP.Xen.Orchestra/rest/v0/srs\?fields=name_label
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;[
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt; &amp;#34;name_label&amp;#34;: &amp;#34;Local storage&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt; &amp;#34;href&amp;#34;: &amp;#34;/rest/v0/srs/bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Depuis votre machine Proxmox VE (ou tout autre machine ayant directement accès au disque à exporter/importer), vous pouvez donc maintenant directement lancer la commande suivante :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;~# curl -X POST -k -b authenticationToken=xxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -T toto.vhd &amp;#39;https://@IP.Xen.Orchestra/rest/v0/srs/bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb/vdis?name_label=testexport.vhd&amp;#39; | cat
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A l&amp;rsquo;issue de l&amp;rsquo;opération, vous allez récupérer l&amp;rsquo;UUID du disque sur XCP-NG, déjà disponible pour la construction de la VM côté Xen Orchestra.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;Avec cette méthode, une fois qu&amp;rsquo;on a un token, l&amp;rsquo;opération d&amp;rsquo;export/import Proxmox VE =&amp;gt; XCP-NG devient donc suivante :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Récupération du disque virtuel sur Proxmox VE (en gros retrouver le disque)&lt;/li&gt;
&lt;li&gt;Transformer le disque virtuel en VHD&lt;/li&gt;
&lt;li&gt;Importer et créer le disque dans XCP-NG via un cURL&lt;/li&gt;
&lt;li&gt;Créer une VM dans l&amp;rsquo;UI et lui affecter le disque&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;C&amp;rsquo;est déjà beaucoup plus sympa si vous avez plusieurs VMs à bouger. L&amp;rsquo;axe d&amp;rsquo;amélioration suivant est, à mon avis, de créer directement la VM avec le bon disque.&lt;/p&gt;
&lt;p&gt;A date, ce n&amp;rsquo;est pas possible avec l&amp;rsquo;API REST (vu avec Vates), mais ça serait possible avec l&amp;rsquo;API JSON-RPC (sur laquelle se base l&amp;rsquo;UI de XenOrchestra et xo-cli). Ca sera donc mes prochaines investigations ;).&lt;/p&gt;
&lt;p&gt;D&amp;rsquo;ici là, have fun :)&lt;/p&gt;
&lt;h2 id="bonus---importer-des-raw-directement"&gt;Bonus - Importer des RAW directement
&lt;/h2&gt;&lt;p&gt;Depuis la toute dernière version de Xen Orchestra, il est aussi possible d&amp;rsquo;importer directement des disques au format RAW (en rajouter le paramètre &amp;ldquo;raw&amp;rdquo; dans l&amp;rsquo;appel à l&amp;rsquo;API).&lt;/p&gt;
&lt;p&gt;Dans mon cas, c&amp;rsquo;est mon format de disques puisque tout est stocké en RAW sur mon storage ZFS Proxmox VE, donc en théorie on peut sauter une étape de plus, à savoir :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Transformer le disque virtuel en VHD&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Avec la requête suivante :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;curl -X POST -k -b authenticationToken=xxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -T toto.img &amp;#39;https://@IP.Xen.Orchestra/rest/v0/srs/bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb/vdis?raw&amp;amp;name_label=testexport.raw&amp;#39; | cat
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Attention aux limitations, cependant :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Après le soucis du raw c&amp;rsquo;est que tu vas pas pouvoir profiter du copy on write, donc exit les snapshots (en l&amp;rsquo;état actuelle de la stack de storage, smapiv1)&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Migrer une VM de Proxmox VE vers XCP NG</title><link>https://blog.zwindler.fr/2022/07/24/migrer-une-vm-de-proxmoxve-vers-xcp-ng/</link><pubDate>Sun, 24 Jul 2022 12:00:00 +0000</pubDate><guid>https://blog.zwindler.fr/2022/07/24/migrer-une-vm-de-proxmoxve-vers-xcp-ng/</guid><description>&lt;img src="https://blog.zwindler.fr/2022/07/pve-to-xcpng.webp" alt="Featured image of post Migrer une VM de Proxmox VE vers XCP NG" /&gt;&lt;h2 id="retour-de-la-virtualisation"&gt;Retour de la virtualisation
&lt;/h2&gt;&lt;p&gt;Ca fait quelques mois que je n&amp;rsquo;ai pas parlé de virtualisation donc forcément, ça me démange un peu ;).&lt;/p&gt;
&lt;p&gt;Si vous suivez ce blog depuis quelque temps, vous savez &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=proxmox" target="_blank" rel="noopener"
&gt;pourtant que j&amp;rsquo;ai pas mal roulé ma bosse avec Proxmox VE&lt;/a&gt;, un OS clé en main de virtualisation KVM (mais aussi de containerisation LXC, on en parle tellement peu). Sans aller jusqu&amp;rsquo;à dire que j&amp;rsquo;en ai fait le tour (a-t-on jamais fait le tour d&amp;rsquo;une techno ?), je commence à manquer de choses à tester avec mon lab perso.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;an dernier, j&amp;rsquo;ai discuté avec les équipes de &lt;a class="link" href="https://vates.fr/" target="_blank" rel="noopener"
&gt;Vates SAS&lt;/a&gt; à &lt;a class="link" href="https://blog.zwindler.fr/2021/11/10/open-source-experience-2021-recap/" &gt;OSXP 2021&lt;/a&gt;, une boite qui publie une autre distribution open source dédiée à la virtualisation : &lt;a class="link" href="https://xcp-ng.org/" target="_blank" rel="noopener"
&gt;XCP-NG&lt;/a&gt; (mais basée sur XenServer).&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;en avais déjà entendu parler sur Twitter (coucou Cécile) donc j&amp;rsquo;étais un peu curieux. Mais j&amp;rsquo;étais aussi un peu sceptique, &lt;a class="link" href="https://blog.zwindler.fr/2011/02/15/creation-dun-template-centos-5-5-pour-xenserver-5-6/" &gt;ma dernière expérience de XenServer datant de 2011&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2022/07/ataxya_xcp-ng.avif"
loading="lazy"
alt="Cécile (Ataxya Network) tweetant en 2021 qu’elle testait XCP NG"
&gt;&lt;/p&gt;
&lt;p&gt;Dans cet article, je ne vais pas rentrer dans une comparaison des fonctionnalités ni des avantages et inconvénients de XCP-NG par rapport à Proxmox VE. Je n&amp;rsquo;ai pas encore assez testé pour me faire une idée pertinente (ça viendra).&lt;/p&gt;
&lt;p&gt;En revanche, je peux vous donner un premier avant goût de la solution via un petit tuto pour vous aider à migrer des VMs de l&amp;rsquo;un à l&amp;rsquo;autre, si jamais l&amp;rsquo;envie vous prend de tester.&lt;/p&gt;
&lt;h2 id="prérequis"&gt;Prérequis
&lt;/h2&gt;&lt;p&gt;Dans ce tutoriel, je pars du principe que vous avez :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;d&amp;rsquo;un côté, une machine virtuelle QEMU, hébergée par un Proxmox VE, à copier/migrer&lt;/li&gt;
&lt;li&gt;de l&amp;rsquo;autre, un serveur sous XCP-NG, dans le même LAN, gérée par &lt;a class="link" href="https://xen-orchestra.com/?gclid=Cj0KCQjwuO6WBhDLARIsAIdeyDJ5Bd1q445B3W7jxWuy_culllyw-WqnU5yu7BhAD9KgOeXoykv_o4gaArRqEALw_wcB#!/xo-home" target="_blank" rel="noopener"
&gt;XenOrchestra&lt;/a&gt; (l&amp;rsquo;équivalent du &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=vcenter" target="_blank" rel="noopener"
&gt;vCenter&lt;/a&gt; de VMware, pour ceux à qui ça parle)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note: sauf erreur de ma part, on a pas de solution clé en main pour migrer un container LXC vers XCP-NG (même si XenServer gère les containers Xen, aussi appelé virtualisation PV). Trouver comment migrer ces workloads LXC sera peut-être l&amp;rsquo;objet d&amp;rsquo;un prochain article.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2022/07/lxc-to-xcpng.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Pour le reste du tutoriel, on va grosso modo suivre &lt;a class="link" href="https://xcp-ng.org/docs/migratetoxcpng.html#from-kvm-libvirt" target="_blank" rel="noopener"
&gt;la documentation officielle disponible ici&lt;/a&gt;, mais avec quelques modifs et surtout un peu plus de détails.&lt;/p&gt;
&lt;h2 id="option-zfs"&gt;Option ZFS
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; J&amp;rsquo;installe mes serveurs Proxmox VE avec ZFS comme stockage. Ca a plein d&amp;rsquo;avantages, notamment celui de me donner la possibilité de faire, à peu de frais, un PRA avec une réplication asynchrone des machines virtuelles de mon cluster. Cela induit par contre une petite difficulté complémentaire (vous allez voir c&amp;rsquo;est léger). &lt;strong&gt;Vous pouvez sauter cette étape si vous n&amp;rsquo;utilisez pas ZFS.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pour rappel (je ferai aussi un article dédié à ça), avec ZFS j&amp;rsquo;ai 2 types de disques.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;#&lt;/span&gt; zfs list
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;NAME USED AVAIL REFER MOUNTPOINT
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;rpool 213G 15.9G 112K /rpool
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;rpool/ROOT 6.32G 15.9G 96K /rpool/ROOT
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;rpool/ROOT/pve-1 6.32G 15.9G 6.32G /
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;rpool/data 2.84G 15.9G 2.84G /rpool/data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;rpool/subvol-201-disk-0 3.43G 4.57G 3.43G /rpool/subvol-201-disk-0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;rpool/subvol-301-disk-0 604M 15.9G 604M /rpool/subvol-301-disk-0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;rpool/vm-100-disk-0 3.79G 15.9G 3.79G -
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;rpool/vm-213-disk-0 184G 148G 38.2G -
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Des disques de type &amp;ldquo;Filesystem&amp;rdquo; qui sont directement montés à la racine de mon espace de stockage ZFS (chez moi /rpool, mais on a aussi &lt;code&gt;/tank&lt;/code&gt; comme convention chez les aficionados de ZFS) pour les containers LXC.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;#&lt;/span&gt; zfs get &lt;span class="nb"&gt;type&lt;/span&gt; rpool/subvol-301-disk-0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;NAME PROPERTY VALUE SOURCE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;rpool/subvol-301-disk-0 type filesystem -
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;#&lt;/span&gt; zfs get mountpoint rpool/subvol-301-disk-0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;NAME PROPERTY VALUE SOURCE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;rpool/subvol-301-disk-0 mountpoint /rpool/subvol-301-disk-0 default
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pour les VMs KVM/QEMU en revanche, je ne peux pas directement trouver un fichier toto.raw ou toto.qcow2 dans l&amp;rsquo;arborescence &lt;code&gt;/rpool&lt;/code&gt;. Côté ZFS, ces volumes sont des volumes de type &amp;ldquo;volume&amp;rdquo; (lol).&lt;/p&gt;
&lt;p&gt;Mais c&amp;rsquo;est un détail, car c&amp;rsquo;est presque encore plus facile puisqu&amp;rsquo;on peut aller directement dans &lt;code&gt;/dev/zvol/rpool&lt;/code&gt; et les retrouver en tant que &amp;ldquo;special file&amp;rdquo; dans /dev.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;ls -l /dev/zvol/rpool/vm-100*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;lrwxrwxrwx 1 root root 10 Jul 23 02:00 /dev/zvol/rpool/vm-100-disk-0 -&amp;gt; ../../zd16
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;lrwxrwxrwx 1 root root 12 Jul 23 02:00 /dev/zvol/rpool/vm-100-disk-0-part1 -&amp;gt; ../../zd16p1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;lrwxrwxrwx 1 root root 12 Jul 23 02:00 /dev/zvol/rpool/vm-100-disk-0-part2 -&amp;gt; ../../zd16p2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;lrwxrwxrwx 1 root root 12 Jul 23 02:00 /dev/zvol/rpool/vm-100-disk-0-part5 -&amp;gt; ../../zd16p5
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dans l&amp;rsquo;étape suivante, &lt;code&gt;/dev/zvol/rpool/vm-100-disk-0&lt;/code&gt; remplacera donc notre image disque &amp;ldquo;input&amp;rdquo; (&lt;em&gt;toto.img&lt;/em&gt;).&lt;/p&gt;
&lt;h2 id="générer-un-vhd"&gt;Générer un VHD
&lt;/h2&gt;&lt;p&gt;Souvent sous Proxmox, vous allez avoir des disques au format RAW ou au format QCOW2.&lt;/p&gt;
&lt;p&gt;Dans les deux cas, XCP-NG n&amp;rsquo;accepte pas ces formats. Heureusement, l&amp;rsquo;utilitaire &lt;code&gt;qemu-img&lt;/code&gt;, inclus dans notre distribution de Proxmox VE sait faire les conversions.&lt;/p&gt;
&lt;p&gt;Dans le cas d&amp;rsquo;un disque RAW :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;qemu-img convert -f raw toto.img -O vpc toto.vhd
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Dans le cas d&amp;rsquo;un disque QCOW2 :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;qemu-img convert -f qcow2 toto.qcow2 -O vpc toto.vhd
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="avant-dimporter-le-vhd-dans-xcp-ng"&gt;Avant d&amp;rsquo;importer le VHD dans XCP-NG
&lt;/h2&gt;&lt;p&gt;La partie un peu moins &amp;ldquo;fun&amp;rdquo; de la procédure est qu&amp;rsquo;on doit faire une partie des actions en GUI (si on suit la doc, mais je &lt;em&gt;teaserai&lt;/em&gt; qu&amp;rsquo;on peut faire mieux en fin d&amp;rsquo;article).&lt;/p&gt;
&lt;p&gt;La première chose qu&amp;rsquo;on va devoir faire, c&amp;rsquo;est aller dans la WebUI Xen Orchestra pour retrouver notre espace de stockage et créer manuellement un disque.&lt;/p&gt;
&lt;p&gt;Il faut aller retrouver la liste de nos espaces de stockages (le plus simple, c&amp;rsquo;est de passer par &amp;ldquo;home&amp;rdquo;), puis, dans cet espace, créer un nouveau disque. Prenez garde à le créer de la bonne taille, en faisant attention à la différence Go/Gio. La documentation officielle conseille d&amp;rsquo;ajouter 1 Go de marge pour éviter ce genre de problématiques, mais je n&amp;rsquo;en ai pas eu besoin lors de mes tests.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2022/07/xo_storage.avif"
loading="lazy"
&gt;
&lt;img src="https://blog.zwindler.fr/2022/07/xoa_create_disk.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Note: chaque disque et chaque &amp;ldquo;datastore&amp;rdquo; a son propre UUID. Ici, j&amp;rsquo;ai souligné en rouge celui du datastore &amp;ldquo;Local&amp;rdquo;, il nous servira plus tard (quand on passe la souris dessus, XOA nous propose de le copier dans le presse-papier).&lt;/p&gt;
&lt;p&gt;Une fois le disque créé à la bonne taille, on récupère son UUID aussi.&lt;/p&gt;
&lt;h2 id="vhd-vers-xcp-ng"&gt;VHD vers XCP-NG
&lt;/h2&gt;&lt;p&gt;Maintenant qu&amp;rsquo;on a d&amp;rsquo;un côté un VHD valide, et de l&amp;rsquo;autre un disque dur virtuel vide prêt à accueillir les données, on peut se lancer !&lt;/p&gt;
&lt;p&gt;On envoie le VHD sur le serveur XCP-NG (via &lt;code&gt;scp&lt;/code&gt; ou un montage NFS, par exemple) et on se connecte dessus en SSH.&lt;/p&gt;
&lt;p&gt;Si on est pas confiant, on peut tester que le VHD est valide sur XCP-NG grâce à l&amp;rsquo;utilitaire suivant :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;#&lt;/span&gt; vhd-util check -n /nfs/toto.vhd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt; /nfs/toto.vhd is valid
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ensuite, on utilise le binaire &lt;code&gt;xe&lt;/code&gt; qui permet d&amp;rsquo;interagir en CLI avec XCP-NG pour lancer l&amp;rsquo;import :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gp"&gt;#&lt;/span&gt; xe vdi-import &lt;span class="nv"&gt;filename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/nfs/toto.vhd &lt;span class="nv"&gt;format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;vhd --progress &lt;span class="nv"&gt;uuid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt; [|] ######################################################&amp;gt; (100% ETA 00:00:00)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On aura évidemment remplacé le paramètre &lt;em&gt;uuid=aaaa&lt;/em&gt; par l&amp;rsquo;UUID du disque virtuel, que je vous ai demandé de récupérer plus tôt !&lt;/p&gt;
&lt;h2 id="créer-la-vm"&gt;Créer la VM
&lt;/h2&gt;&lt;p&gt;Normalement, à l&amp;rsquo;issue de l&amp;rsquo;opération, on a un disque tout beau tout propre. La dernière étape est de créer une VM et à lui attacher ce disque.&lt;/p&gt;
&lt;p&gt;Là encore, on peut repartir de &amp;ldquo;Home&amp;rdquo; puis aller dans le menu VM.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2022/07/xoa_create_vm1.avif"
loading="lazy"
&gt;
&lt;img src="https://blog.zwindler.fr/2022/07/xoa_create_vm2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Note: pour passer le menu de création de VM, il faut impérativement choisir soit ISO/DVD ou PXE dans &lt;strong&gt;Install settings&lt;/strong&gt;, sinon CREATE est grisé. J&amp;rsquo;ai également supprimé le disque par défaut proposé par le wizard (puisqu&amp;rsquo;on va lui en attacher un) et dans &lt;strong&gt;Advanced&lt;/strong&gt;, j&amp;rsquo;ai décoché &lt;strong&gt;Boot VM after creation&lt;/strong&gt; puisque de toute façon je dois lui attacher le disque avant de booter.&lt;/p&gt;
&lt;p&gt;Une fois créé, on clique sur la VM pour lui attacher le disque qu&amp;rsquo;on a importé.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2022/07/xoa_attach_disk.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On peut maintenant booter la VM !&lt;/p&gt;
&lt;p&gt;Lors du redémarrage, la seule chose que j&amp;rsquo;ai eu à changer était la configuration réseau, un peu différente entre mon cluster Proxmox VE et mon lab XCP-NG, ainsi que le nom d&amp;rsquo;interface qui était différent suite au passage à Xen (ens18 =&amp;gt; eth0).&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai également ajouté le &amp;ldquo;Management agent&amp;rdquo; pour bénéficier d&amp;rsquo;infos dans l&amp;rsquo;UI (et probablement d&amp;rsquo;autres trucs chouettes que je n&amp;rsquo;ai pas encore exploré).&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;Voilà pour ces premiers pas avec XCP-NG. Comme vous avez pu le constater, l&amp;rsquo;opération nécessite plusieurs étapes, dont certaines peuvent être améliorées (notamment l&amp;rsquo;automatisation de certaines tâches côté XCP-NG grâce à l&amp;rsquo;API, on en reparlera, car j&amp;rsquo;ai déjà quelques résultats).&lt;/p&gt;
&lt;p&gt;Cependant, ça permet déjà de se faire une première impression et de se familiariser avec les menus.&lt;/p&gt;
&lt;p&gt;Dans les semaines qui viennent, je vais continuer de jouer avec, histoire de me faire une opinion un peu plus construite de XCP-NG (notamment par rapport à ce que je fais avec Proxmox). S&amp;rsquo;il y a des points que vous voulez que je creuse en particulier, n&amp;rsquo;hésitez pas à me &amp;ldquo;ping&amp;rdquo; sur les divers réseaux sociaux pour m&amp;rsquo;en parler.&lt;/p&gt;
&lt;p&gt;D&amp;rsquo;ici là, have fun :)&lt;/p&gt;</description></item><item><title>Un cluster Proxmox VE en 5 minutes avec Ansible</title><link>https://blog.zwindler.fr/2019/07/22/proxmox-en-5-min-ansible-tinc/</link><pubDate>Mon, 22 Jul 2019 11:45:34 +0000</pubDate><guid>https://blog.zwindler.fr/2019/07/22/proxmox-en-5-min-ansible-tinc/</guid><description>&lt;img src="https://blog.zwindler.fr/2017/08/cropped-proxmox_logo-1.webp" alt="Featured image of post Un cluster Proxmox VE en 5 minutes avec Ansible" /&gt;&lt;h2 id="cool-on-va-encore-déployer-du-proxmox-ve-"&gt;Cool on va (encore) déployer du Proxmox VE !!!
&lt;/h2&gt;&lt;p&gt;Petit tuto aujourd’hui, massivement facilité par l’usage d’Ansible : on va déployer un cluster de machines Proxmox VE via le cloud provider Scaleway.&lt;/p&gt;
&lt;p&gt;A noter : Si jamais vous ne voulez pas utiliser Scaleway, les playbooks ont été découpés de manière à ce que la partie d’installation de Proxmox ainsi que l’installation de tinc et la mise en cluster puissent être réalisés à part. Vous pouvez donc tout à faire partir de machines sous Debian 9 via ces playbooks.&lt;/p&gt;
&lt;p&gt;Pourquoi Scaleway me direz vous ? Tout simplement parce qu’ils ont, contrairement à d’autres, une très bonne API, qui a permis à un de leurs employés de faire de très bons modules Ansible, notamment un module permettant de gérer l’inventaire dynamique (pas besoin de renseigner un fichier hosts pour Ansible, c’est directement l’API qui nous liste les VMs).&lt;/p&gt;
&lt;p&gt;J’ai d’ailleurs utilisé ce provider à plusieurs reprises pour cette raison (voir mon article sur &lt;a class="link" href="https://blog.zwindler.fr/2019/03/21/deployer-en-5-minutes-un-cluster-kubernetes-sur-arm-avec-k3s-et-ansible/" &gt;k3s et Ansible&lt;/a&gt; ou mon talk à BDX I/O &lt;a class="link" href="https://www.youtube.com/watch?v=WPRE1_f0pyg" target="_blank" rel="noopener"
&gt;Ami développeur, deviens un ops sans effort avec Ansible&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id="proxmox-ve-54--pourquoi-pas-60-"&gt;Proxmox VE 5.4 ? Pourquoi pas 6.0 ?
&lt;/h2&gt;&lt;p&gt;La deuxième question, tout aussi légitime, repose donc sur &amp;ldquo;pourquoi diantre monter un cluster Proxmox VE 5.4 alors que tu viens de nous faire un article qui vante &lt;a class="link" href="https://blog.zwindler.fr/2019/07/16/sortie-de-proxmox-ve-6-0-les-nouveautes/" &gt;les bienfaits de la version 6.0&lt;/a&gt; qui vient de sortir ?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Et là j’ai deux raisons (une bonne et une mauvaise). La mauvaise, c’est simplement que l’article trainait dans mes brouillons et que je n’ai pas cliqué sur &amp;ldquo;Poster&amp;rdquo;&amp;hellip; La &amp;ldquo;bonne&amp;rdquo; raison, c’est que la version 10 de Debian, qui est la base de Proxmox VE 6, n’est pas encore disponible sur Scaleway, ce qui complique un peu l’installation.&lt;/p&gt;
&lt;p&gt;Lorsqu’elle le sera, je ne manquerais pas de faire un petit refresh de l’article ainsi que des playbooks Ansible ;)&lt;/p&gt;
&lt;h2 id="déployer-les-vms-avec-ansible"&gt;Déployer les VMs avec Ansible
&lt;/h2&gt;&lt;p&gt;Je l’ai dis juste avant, le gros avantage de Scaleway, c’est de pouvoir spawner des VMs à la volées avec Ansible et surtout d’avoir l’inventaire dynamique.&lt;/p&gt;
&lt;p&gt;Petite (grosse?) limitation : comme il s’agit de VMs, il ne sera évidemment pas possible de faire tourner des VMs de type KVM/qemu sur ces machines (sauf moyennant un hack de type nesting de VM dans une VM).&lt;/p&gt;
&lt;p&gt;Cependant, depuis quelques temps, je n’utilise plus du tout les VMs (je n’ai pas de workload Windows) et j’utilise plutôt des containers LXC.&lt;/p&gt;
&lt;p&gt;C’est vraiment plus léger en terme d&amp;rsquo;empreinte mémoire (je n’ai jamais été embêté côté CPU mais côté RAM, chaque Mo compte) et ça se gère (install, gestion, sauvegarde) de la même façon qu’une VM, contrairement à Docker qui nécessite une gymnastique mentale complémentaire.&lt;/p&gt;
&lt;h2 id="bon-on-fait-ça-comment-"&gt;Bon, on fait ça comment ?
&lt;/h2&gt;&lt;p&gt;Maintenant que j’ai posé le décor, on peut commencer le tuto. L’idée va être de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Créer des VMs&lt;/li&gt;
&lt;li&gt;Récupérer leurs informations (IP publique, surtout)&lt;/li&gt;
&lt;li&gt;Installer les prérequis de Proxmox VE (puis les rebooter pour passer sur le kernel PVE)&lt;/li&gt;
&lt;li&gt;Installer les prérequis et configurer tinc, le VPN qui va nous permettre d’initier le cluster et de laisser passer les trames multicast, nécessaires au clustering&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A l’issue de ces étapes, on arrêtera là l’automatisation et on passera sur quelques (rapides) étapes manuelles.&lt;/p&gt;
&lt;p&gt;Ok, j’avoue que c’est dommage que tout ne soit pas automatisé. Mais le gros du boulot, c’est vraiment les étapes précédentes. Pour s’en convaincre, vous pouvez lire l’article que j’avais écris &lt;a class="link" href="https://blog.zwindler.fr/2018/06/05/creation-dun-cluster-de-virtualisation-proxmox-ve-5-2-x/" &gt;pour la version 5.2 (mais avec OpenVPN)&lt;/a&gt; ou tout simplement lire le contenu des playbooks.&lt;/p&gt;
&lt;h2 id="prérequis"&gt;Prérequis
&lt;/h2&gt;&lt;p&gt;Et oui, il y a quand même quelques prérequis à ce tuto. Il faudra :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Avoir un compte sur Scaleway&lt;/li&gt;
&lt;li&gt;Avoir une clé SSH, avoir la clé publique à la racine du projet, et l’appeler admin.pub&lt;/li&gt;
&lt;li&gt;Installer les package pip&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;pip install jinja2 PyYAML paramiko cryptography packaging
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;Installer Ansible depuis les sources (&amp;gt;= 2.8)&lt;/li&gt;
&lt;li&gt;Installer &lt;code&gt;jq&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J’aurai pu faire aussi un playbook pour ça, mais comme c’est très dépendant de votre distribution Linux (ou Windows ahaha), &amp;hellip;&lt;/p&gt;
&lt;h2 id="you-token-to-me-"&gt;You token to me ?
&lt;/h2&gt;&lt;p&gt;Créez un token sur le site de Scaleway pour les accès distants et le stocker dans un fichier scaleway_token sur votre machine avec Ansible :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;export SCW_API_KEY=&amp;#39;aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Puis sourcez le fichier :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;source scaleway_token
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A partir de maintenant, vous avez le pouvoir tout puissant du cloud au bout de vos doigts (et de votre CB) !&lt;/p&gt;
&lt;h2 id="générer-les-machines"&gt;Générer les machines
&lt;/h2&gt;&lt;p&gt;Là, on tire totalement parti du travail de &lt;a class="link" href="https://github.com/scaleway/ansible" target="_blank" rel="noopener"
&gt;Rémy Léone sur https://github.com/scaleway/ansible et des modules Ansible pour Scaleway, intégrés au repo officiel&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On va donc utiliser le playbook create_proxmox_vms.yaml pour :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;récupérer l’ID d’organisation du compte Scaleway (votre identifiant unique)&lt;/li&gt;
&lt;li&gt;récupérer un ID d’une image disque compatible debian Stretch (de la bonne taille)&lt;/li&gt;
&lt;li&gt;ajouter si nécessaire la clé SSH de l’admin dans le portail Scaleway, qui sera injectée dans vos VMs à leur création&lt;/li&gt;
&lt;li&gt;créer autant de machines que nécessaire&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook create_proxmox_vms.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Bon, je vous ai pas menti, c’est quand même hyper simple non ?&lt;/p&gt;
&lt;p&gt;A noter, actuellement le script traite les demandes de création de machines séquentiellement. Pour 3 VMs, comptez environ 3 minutes.&lt;/p&gt;
&lt;p&gt;Cependant, si vous avez un gros besoin, sachez qu’il est possible de modifier le script pour les lancer en parallèle (déjà fait dans mon repo &lt;a class="link" href="https://github.com/zwindler/ansible-deploy-azure/issues/2" target="_blank" rel="noopener"
&gt;ansible-deploy-azure&lt;/a&gt; sur Github) via la fonction async d’Ansible.&lt;/p&gt;
&lt;h2 id="mise-en-place-de-linventaire-dynamique"&gt;Mise en place de l’inventaire dynamique
&lt;/h2&gt;&lt;p&gt;J’arrête pas de vous en parler depuis tout à l’heure, normalement dans Ansible, maintenant que nos VMs sont créées, pour pouvoir nous y connecter, on devrait créer un fichier texte &amp;ldquo;inventory&amp;rdquo; contenant la liste des hôtes et de leur IP (a minima). C’est fastidieux, surtout si vous avez beaucoup de VMs.&lt;/p&gt;
&lt;p&gt;Et là, on a juste un fichier inventory.yml, contenant le nom du plugin, la région utilisée (Paris dans mon script) et le tag des machines générées :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;plugin: scaleway
regions:
- par1
tags:
- proxmoxve
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A partir de là, on peut vérifier le retour de la commande ansible-inventory&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-inventory --list -i inventory.yml
{
&amp;#34;_meta&amp;#34;: {
&amp;#34;hostvars&amp;#34;: {
&amp;#34;x.x.x.x&amp;#34;: {
&amp;#34;arch&amp;#34;: &amp;#34;x86_64&amp;#34;,
&amp;#34;commercial_type&amp;#34;: &amp;#34;DEV1-S&amp;#34;,
&amp;#34;hostname&amp;#34;: &amp;#34;test3&amp;#34;,
[...]
&amp;#34;proxmoxve&amp;#34;: {
&amp;#34;hosts&amp;#34;: [
&amp;#34;x.x.x.x&amp;#34;,
&amp;#34;y.y.y.y&amp;#34;,
&amp;#34;z.z.z.z&amp;#34;
]
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Petite hack SSH : comme Ansible se connecte en SSH aux hôtes distants, à la première connexion on va bloquer sur l’acceptation de la fingerprint.&lt;/p&gt;
&lt;p&gt;Un moyen de bypasser ça en une ligne de commande est d’utiliser la commande ssh-keyscan et de coller tout ça dans votre known_hosts. On peut le faire avec ce petit oneliner :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-inventory --list -i inventory.yml | jq -r &amp;#39;.proxmoxve.hosts | .[]&amp;#39; | xargs ssh-keyscan &amp;gt;&amp;gt; ~/.ssh/known_hosts
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ce n’est évidemment pas recommandé en production !!! Mais dans le cadre d’un test temporaire, vous me pardonnerez cette liberté.&lt;/p&gt;
&lt;p&gt;Ajoutez votre clé SSH dans l’agent, puis vérifiez que vous pouvez vous connecter à tous les serveurs :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;eval `ssh-agent`
ssh-add myprivate.key
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;ansible proxmoxve -i inventory.yml -u root -m ping
x.x.x.x | SUCCESS =&amp;gt; {
&amp;#34;changed&amp;#34;: false,
&amp;#34;ping&amp;#34;: &amp;#34;pong&amp;#34;
}
y.y.y.y | SUCCESS =&amp;gt; {
&amp;#34;changed&amp;#34;: false,
&amp;#34;ping&amp;#34;: &amp;#34;pong&amp;#34;
}
z.z.z.z | SUCCESS =&amp;gt; {
&amp;#34;changed&amp;#34;: false,
&amp;#34;ping&amp;#34;: &amp;#34;pong&amp;#34;
}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="préparation-du-serveur"&gt;Préparation du serveur
&lt;/h2&gt;&lt;p&gt;Ok ! Maintenant, on a 3 (ou plus) VMs Debian 9. A partir de là, j’ai créé un playbook Ansible qui suit &lt;a class="link" href="https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_Stretch" target="_blank" rel="noopener"
&gt;la doc d’installation officielle de Proxmox sur un Debian Stretch&lt;/a&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook -i inventory.yml -u root proxmox_prerequisites.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A l’issue de l’installation, il est nécessaire de rebooter les serveurs (manuellement ou via ansible), pour passer sur le kernel de PVE.&lt;/p&gt;
&lt;h2 id="installation-et-configuration-de-tinc"&gt;Installation et configuration de tinc
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;C’est piou-piou.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Une fois que vos serveurs sont revenus à la vie, vous avez installé Proxmox. Pas mal hein ?&lt;/p&gt;
&lt;p&gt;Cependant, chez Scaleway (et tous les autres providers que je connais), le multicast est coupé entre vos VMs. Et ça c’est la loose car tout notre clustering va passer par des trames multicast.&lt;/p&gt;
&lt;p&gt;Pour bypasser ce souci de taille, le plus simple est de passer par un VPN, de créer un réseau privé virtuel entre toutes nos instances, qui lui ne filtrera rien.&lt;/p&gt;
&lt;p&gt;Dans les articles précédents, &lt;a class="link" href="https://blog.zwindler.fr/2018/06/05/creation-dun-cluster-de-virtualisation-proxmox-ve-5-2-x/" &gt;j’avais utilisé OpenVPN&lt;/a&gt; (parce que c’est ce que je connais le mieux). Le souci d’OpenVPN c’est qu’il fonctionne sur un base client-serveur. Or, dès qu’on dépasse les 3 serveurs, on se retrouve avec 1 serveur maitre et 2 (ou plus clients), et donc un SPOF&amp;hellip;&lt;/p&gt;
&lt;p&gt;L’avantage avec tinc, c’est qu’on a pas cette notion de client/serveur. Tous les tincs sont connectés à tous les tincs, dans un genre de gros maillage qui nous évite donc tout SPOF.&lt;/p&gt;
&lt;p&gt;L’installation de tinc n’est en soit pas follement complexe (cf le &lt;a class="link" href="https://github.com/zwindler/ansible-proxmoxve/blob/master/tinc_installation.yml" target="_blank" rel="noopener"
&gt;playbook&lt;/a&gt;), mais là encore, l’automatiser c’est toujours sympa.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook -i inventory.yml -u root tinc_installation.yml
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="etapes-additionnelles-manuelles"&gt;Etapes additionnelles manuelles
&lt;/h2&gt;&lt;p&gt;Une fois que vous en êtes là, on arrive dans les tâches non triviales à automatiser.&lt;/p&gt;
&lt;p&gt;Actuellement, il n’est pas possible de créer un cluster Proxmox VE sans avoir un mot de passe root. Or, lors de la création des VMs, Scaleway utilise notre clé SSH (ce qui est beaucoup mieux). Nous allons donc devoir nous connecter sur l’ensemble des machines et réinitialiser le mot de passe du compte root.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;root@test1:~# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="créer-un-cluster"&gt;Créer un cluster
&lt;/h2&gt;&lt;p&gt;Cette partie aurait pu être automatisée. Dans le tutoriel précédent, je le faisais en ligne de commandes, à cause d’une limitation dans le wizard de création de cluster. En effet, dans les précédentes versions de Proxmox, on ne pouvait pas sélectionner sur quelle interface réseau on souhaitait utiliser, et donc mon cluster ne passait pas par le VPN et les trames multicast ne passaient jamais.&lt;/p&gt;
&lt;p&gt;Pour autant, maintenant on peut profiter du beau wizard tout neuf et le faire via la GUI :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se connecter à l’UI de Proxmox avec un des noeuds (le premier, au hasard)&lt;/li&gt;
&lt;li&gt;Dans Datacenter (à gauche), sélectionner Cluster puis cliquer sur &amp;ldquo;Create Cluster&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Donner un nom au cluster, mais surtout, donner comme adresse ring0 l’adresse VPN (10.10.10.1 si on est sur le noeud 1)&lt;/li&gt;
&lt;li&gt;Une fois l’opération terminée, cliquer sur &amp;ldquo;Join Information&amp;rdquo;, dans le même menu, et copier les informations en cliquant sur &amp;ldquo;Copy Information&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/07/create.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="joindre-le-cluster"&gt;Joindre le cluster
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Se connecter sur l’UI de la 2ème machine&lt;/li&gt;
&lt;li&gt;Dans Datacenter, sélectionner Cluster puis cliquer sur &amp;ldquo;Join Cluster&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Dans le champ &amp;ldquo;Information&amp;rdquo;, coller les données récupérée lors de l’étape précédente. Les informations de connexion devraient automatiquement être remplies, &lt;strong&gt;SAUF le Corosync ring0, qu’il faut positionner à 10.10.10.2&amp;quot;&lt;/strong&gt;, et le mot de passe root du noeud 1. Cliquer sur &amp;ldquo;Join&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Si l’opération réussie, un message doit s’afficher pour dire de recharger la page&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Répéter l’opération pour les noeuds suivants (3, voire ++)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2019/07/clusterupandrunning.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Et en attendant la même chose avec la v6, amusez vous bien :)&lt;/p&gt;</description></item><item><title>Sortie de Proxmox VE 6.0, les nouveautés</title><link>https://blog.zwindler.fr/2019/07/16/sortie-de-proxmox-ve-6-0-les-nouveautes/</link><pubDate>Tue, 16 Jul 2019 16:00:23 +0000</pubDate><guid>https://blog.zwindler.fr/2019/07/16/sortie-de-proxmox-ve-6-0-les-nouveautes/</guid><description>&lt;img src="https://blog.zwindler.fr/2017/08/cropped-proxmox_logo.webp" alt="Featured image of post Sortie de Proxmox VE 6.0, les nouveautés" /&gt;&lt;h2 id="proxmox-ve-60"&gt;Proxmox VE 6.0
&lt;/h2&gt;&lt;p&gt;Ce n’est pas la première fois que j’écris un article sur les mises à jour de Proxmox VE, une distribution Linux pour faire de la virtualisation qui me tient pas mal à cœur car très simple et très efficace. Aujourd’hui, Proxmox VE 6.0 vient de sortir !&lt;/p&gt;
&lt;p&gt;Pour info, le blog ainsi que d’autres services fonctionnent depuis des années sur un hyperviseur Proxmox, ce qui pour moi est un exemple de stabilité et de simplicité, même dans des usecases très simples (sinon je serai passé à autre chose). &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=proxmox" &gt;M4vr0x et moi avons beaucoup écrit sur le sujet&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="mais-avant-ça-"&gt;Mais avant ça ?
&lt;/h2&gt;&lt;p&gt;La dernière fois que j’avais écris un article sur &lt;a class="link" href="https://blog.zwindler.fr/2018/05/22/sortie-de-proxmox-ve-5-2-1-les-nouveautes/" &gt;une release de Proxmox c’était la 5.2&lt;/a&gt; il y a un an, qui avait sorti pas mal de choses sympas.&lt;/p&gt;
&lt;p&gt;Depuis, je ne vous ai pas parlé de la 5.3 et de la 5.4, quelques modifs sympas (mais que je n’ai personnellement pas utilisé).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ceph Luminous LTS installable depuis la GUI (5.4)&lt;/li&gt;
&lt;li&gt;Ajout d’un QDevice pour gérer le quorum dans un cluster à 2 hyperviseurs (5.4)&lt;/li&gt;
&lt;li&gt;U2F dans l’interface web (5.4)&lt;/li&gt;
&lt;li&gt;Nesting (faire des containers dans des containers) de containers privilégiés ou pas (5.3)&lt;/li&gt;
&lt;li&gt;Emulation de VMs ARM sur hyperviseur x86_64 (5.3)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="et-proxmox-ve-60-"&gt;Et Proxmox VE 6.0 ???
&lt;/h2&gt;&lt;p&gt;Comme toute majeure, il faut s’attendre à pas mal de modifs.&lt;/p&gt;
&lt;p&gt;La liste des modifications est longue comme le bras, et les ajouts sont à la fois amenés par la mise à jours des composants principaux et par des améliorations sur les composants internes.&lt;/p&gt;
&lt;h2 id="les-composants-tiers"&gt;Les composants tiers
&lt;/h2&gt;&lt;p&gt;D’abord, Proxmox VE 6.0 se base sur la toute nouvelle Debian 10.0 (aka Buster). C’est logique pour l’équipe de Proxmox de partir sur le tout dernier OS, puisque la branche 6.x va durer quelques années.&lt;/p&gt;
&lt;p&gt;On tire donc un kernel Linux plus récent que celui PVE 5 (c’était le 4.15) et on passe sur un 5.0. De quoi tirer profit des dernières améliorations du Kernel, notamment pour le stockage (on y reviendra) et le réseau.&lt;/p&gt;
&lt;p&gt;Ensuite, les gros composants. Proxmox VE étant une plateforme de virtualisation VM + containers, on va évidemment s’intéresser aux 2 composants qui fournissent ça, à savoir qemu et lxc ont bien évidemment droit à une mise à jour (respectivement 4.0.0 et 3.1). Pour LXC (les containers) je n’ai pas su trouver les améliorations. Pour qemu 4.0.0, on a droit à une majeure mais qui ajoute surtout la compatibilité vers de nouveaux matériels et de nouveaux flags CPU (pour des usecases bien précis).&lt;/p&gt;
&lt;p&gt;Une plus grosse modif vient peut être de corosync, le composant qui permet de gérer une grosse partie du clustering, qui passe en version 3 avec &lt;em&gt;Kronosnet&lt;/em&gt;. Ça, c’est très impactant. J’ai écris plusieurs articles sur le clustering de serveurs Proxmox avec des machines dédiées chez des cloud providers et j’étais souvent gêné par le fait que corosync utilise du multicast, systématiquement bloqué par les providers. Kronosnet utilise de l’unicast ce qui devrait énormément simplifier les futurs setups de clusters (AKA, plus obligatoirement besoin d’un VPN) !!!&lt;/p&gt;
&lt;p&gt;Côté stockage, on passe de Ceph 12 vers Ceph 14 et de ZFS (on Linux) en 0.8.1 (encryption des pools + trim, support de ZFS dans l’UEFI)&lt;/p&gt;
&lt;h2 id="les-modifs-internes"&gt;Les modifs internes
&lt;/h2&gt;&lt;p&gt;Voilà pour les mises à jour de packages. Maintenant, les features que j’ai hâte de tester. La plupart sont des améliorations de la GUI :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Migration des VMs à chaud depuis l’interface, même si on est sur du local storage. On retrouve une promesse déjà présente en 5.x, qui marchait partiellement en ligne de commande, mais qui devrait être ENFIN disponible dans la GUI (&lt;a class="link" href="https://forum.proxmox.com/threads/pve-5-4-live-migration-issue.55382/" target="_blank" rel="noopener"
&gt;cf ce post sur le forum&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Améliorations au niveau du Wizard pour créer des clusters. On peut maintenant sélectionner plus facilement quelle(s) interface(s) doit être utilisée pour la communication Corosync. Une amélioration légère par rapport à ce qu’on pouvait faire en 5.4 avec tinc (article qui n’est jamais sorti car je ne l’avais pas terminé&amp;hellip; oups). Dans tous les cas, c’est beaucoup plus simple que ce que &lt;a class="link" href="https://blog.zwindler.fr/2018/06/05/creation-dun-cluster-de-virtualisation-proxmox-ve-5-2-x/" &gt;j’avais pu montrer en 5.2&lt;/a&gt; ou &lt;a class="link" href="https://blog.zwindler.fr/2017/08/29/faire-un-petit-cluster-proxmox-avec-2-machines-kimsufi/" &gt;en 5.0&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Encore des améliorations pour gérer Ceph dans la GUI. Je ne peux pas trop en parler car je n’avais pas de machines suffisamment proches et puissantes pour monter un cluster Ceph sur mes machines Proxmox VE. Cependant, je pense tester dans les jours qui viennent, profitant du fait que les clusters sont plus simple à créer (donc à tester sur des machines temporaires chez Kimsufi par exemple).&lt;/li&gt;
&lt;li&gt;Possibilité de configurer les backups non plus par VM/container mais par pool entier (nice to have)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="tu-nous-montres-"&gt;Tu nous montres ?
&lt;/h2&gt;&lt;p&gt;Une fois de plus, je suis assez enthousiaste quant à cette nouvelle version, qui apporte plein de bonnes choses. Je vais très probablement faire des articles dans les semaines qui viennent sur le sujet, en premier lieu la migration de la 5.4 (sur laquelle je suis actuellement) vers la 6.0.&lt;/p&gt;
&lt;p&gt;Wait and see !!&lt;/p&gt;
&lt;h2 id="sources"&gt;Sources
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://forum.proxmox.com/threads/proxmox-ve-6-0-released.56000/" target="_blank" rel="noopener"
&gt;La note d’annonce de la 6.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://pve.proxmox.com/wiki/Roadmap#Proxmox_VE_6.0" target="_blank" rel="noopener"
&gt;La release note de la 6.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://wiki.qemu.org/ChangeLog/4.0" target="_blank" rel="noopener"
&gt;Le changelog de qemu 4.0.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2018/05/22/sortie-de-proxmox-ve-5-2-1-les-nouveautes/" &gt;L’article sur la sortie de proxmox 5.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2019/10/11/un-cluster-proxmox-ve-avec-seulement-2-machines/" &gt;L’article sur la création d’un cluster sur PVE 5.2, 2 nodes seulement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2017/08/29/faire-un-petit-cluster-proxmox-avec-2-machines-kimsufi/" &gt;L’article sur la création d’un cluster sur PVE 5.0, 2 nodes seulement&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Migration CentOS + KVM vers Proxmox VE</title><link>https://blog.zwindler.fr/2015/11/21/migration-centos-kvm-vers-proxmox/</link><pubDate>Sat, 21 Nov 2015 11:30:53 +0000</pubDate><guid>https://blog.zwindler.fr/2015/11/21/migration-centos-kvm-vers-proxmox/</guid><description>&lt;img src="https://blog.zwindler.fr/2015/10/Logo-ProxmoxVE.webp" alt="Featured image of post Migration CentOS + KVM vers Proxmox VE" /&gt;&lt;p&gt;Juste après avoir sorti un article qui traite de la migration de KVM/Ubuntu vers KVM/RHEL, voilà que je migre ENCORE pour ProxMox !?! Mais c’est parce qu’en fait j’avais juste beaucoup de retard sur ces précédents articles ;-).&lt;/p&gt;
&lt;h2 id="présentation-de-la-solution"&gt;Présentation de la solution
&lt;/h2&gt;&lt;p&gt;Cette fois ci, il s’agit donc de vous donner les clés pour migrer sans stress votre serveur sous KVM (Ubuntu, Debian, RHEL, Whatever &amp;hellip;) vers Proxmox VE.&lt;/p&gt;
&lt;p&gt;Pour ceux qui ne connaissent pas Proxmox VE, il s’agit d’une distribution Debian adaptée pour faire de la virtualisation full (qemu/KVM) et par conteneur (anciennement via openVZ, maintenant via LXC). LE gros plus de la solution, c’est l’interface graphique et l’installation clé en main d’un hyperviseur disposant de fonctionnalités qu’on retrouve chez les grands du marché.&lt;/p&gt;
&lt;p&gt;Pour être honnête, j’étais très content de mon KVM pour ce qui est des performances et de la consommation de ressources (point faible d’un ESXi à la maison), mais pas du tout satisfait des manières que j’avais pour l’administrer. J’ai testé plusieurs interfaces graphiques (web ou pas) sans jamais en trouver une à ma convenance (même les usines à gaz comme oVirt, la base de RedHat Entreprise Virtualisation).&lt;/p&gt;
&lt;h2 id="installation"&gt;Installation
&lt;/h2&gt;&lt;p&gt;Comme beaucoup d’hyperviseur clés en main, l’étape d’installation est particulièrement soignée pour être simple et rapide. On récupère un ISO, &lt;a class="link" href="https://pve.proxmox.com/wiki/Install_from_USB_Stick" target="_blank" rel="noopener"
&gt;on le copie sur une clé USB&lt;/a&gt;, on boot dessus. Quelques écrans et moins de 5 minutes plus tard le serveur reboot et on nous invite à nous connecter à la console web.&lt;/p&gt;
&lt;p&gt;Ah ! Ça fait du bien !&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/10/02_proxmox_kvm.avif"
loading="lazy"
alt="L’interface Web, bien qu’un peu austère, est relativement intuitive. On ne trouve pas tous les menus du premiers coup, mais on s’habitue vite"
&gt;&lt;/p&gt;
&lt;p&gt;La première chose à faire est de créer des pools de stockages (un &lt;em&gt;local&lt;/em&gt; est créé par défaut). On peut choisir s’il s’agit d’un pool dédié aux VMs, à la sauvegarde, aux fichiers ISOs. C’est assez pratique.&lt;/p&gt;
&lt;h2 id="raid-logiciel-mdadm"&gt;RAID logiciel MDADM
&lt;/h2&gt;&lt;p&gt;Sous ProxMox, le RAID logiciel via MDADM Linux &lt;strong&gt;n’est pas supporté&lt;/strong&gt; (voir &lt;a class="link" href="https://pve.proxmox.com/wiki/Software_RAID" target="_blank" rel="noopener"
&gt;wiki officiel&lt;/a&gt;). Seuls les RAID Hardware sont supportés.&lt;/p&gt;
&lt;p&gt;Dans l’interface, vous ne pourrez donc pas le configurer (ni même pendant la phase d’installation). Depuis la version 3.4, vous pouvez cependant installer ProxMox sur un espace ZFS, avec notamment tous les niveaux de RAID/RAIDZ que vous souhaitez. Mais mon petit doigt me dit qu’il s’agit probablement de &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=zfsonlinux" &gt;ZFSonLinux&lt;/a&gt; et j’ai déjà donné ;-).&lt;/p&gt;
&lt;p&gt;Cette absence de RAID logiciel est une des raisons pour lesquels j’étais initialement réfractaire à ProxMox par rapport à un linux classique avec qemu. Cependant, ce n’est pas parce ce n’est pas supporté que vous ne pouvez pas le faire ! Après tout, il s’agit d’une Debian customisée donc il n’y a rien qui vous retient.&lt;/p&gt;
&lt;p&gt;Voici deux articles que j’ai sélectionnés qui vous guideront pas à pas pour le faire (à vos risques et périls, comme d’habitude).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="http://www.mbardot.com/installation-de-proxmox-ve-en-raid1-logiciel/" target="_blank" rel="noopener"
&gt;www.mbardot.com/installation-de-proxmox-ve-en-raid1-logiciel/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="http://kbdone.com/proxmox-ve-3-2-software-raid/" target="_blank" rel="noopener"
&gt;kbdone.com/proxmox-ve-3-2-software-raid/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[Edit]&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attention&lt;/strong&gt; : la partie amorçage ne fonctionnera pas si vous avez un boot EFI (Proxmox 4+). Il faudra trouver une autre technique. Vous pouvez lire cet article qui explique comment  faire en général sur Debian :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.debian-fr.org/t/raid-logiciel-linux-et-amorcage-en-uefi/64655" target="_blank" rel="noopener"
&gt;www.debian-fr.org/t/raid-logiciel-linux-et-amorcage-en-uefi/64655&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La partie du tutoriel traitant de lvm pour ProxMox (3ème partition) contenant le / et les données importantes peut par contre bien être suivie. C’est vraiment uniquement le boot EFI qui va nous enquiquiner.&lt;/p&gt;
&lt;p&gt;[/Edit]&lt;/p&gt;
&lt;h2 id="migrer-ses-vm-existantes"&gt;Migrer ses VM existantes
&lt;/h2&gt;&lt;p&gt;Nous voici maintenant dans le vif du sujet. Selon la &lt;a class="link" href="https://pve.proxmox.com/wiki/Migration_of_servers_to_Proxmox_VE#KVM_to_Proxmox_VE_.28KVM.29" target="_blank" rel="noopener"
&gt;documentation officielle&lt;/a&gt;, voici ce qu’on doit faire pour migrer une machine KVM dans ProxMox.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/10/01_proxmox_kvm.avif"
loading="lazy"
alt="Ouais, d’accord… mais un peu plus de détails ? Non ?"
&gt;&lt;/p&gt;
&lt;p&gt;D’abord, on nous dit de créer une nouvelle machine virtuelle. Jusque là tout va bien. On lui affecte les options par défaut et pas de CD-ROM dans le lecteur.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/10/03_proxmox_kvm.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/10/04_proxmox_kvm.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Ensuite ça se gâte. En effet, on veut supprimer le disque dur par défaut puis ajouter notre disque importé de l’ancien système KVM. On va donc dans les propriétés de la machine virtuelle nouvellement créée.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/10/06_proxmox_kvm.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/10/07_proxmox_kvm.avif"
loading="lazy"
alt="Mais… Mais… Il est où le bouton « Parcourir »?"
&gt;&lt;/p&gt;
&lt;p&gt;Et là, blague&amp;hellip; Pas de bouton « Parcourir » pour aller chercher notre disque virtuel à importer !&lt;/p&gt;
&lt;p&gt;On peut trouver la solution assez vite sur les forums, mais c’est quand même assez frustrant, surtout quand on voit la malheureuse ligne donnée dans le wiki en guise de procédure&amp;hellip;&lt;/p&gt;
&lt;p&gt;Dans &lt;a class="link" href="http://forum.proxmox.com/threads/4227-How-to-add-existing-disk" target="_blank" rel="noopener"
&gt;ce thread&lt;/a&gt; et &lt;a class="link" href="http://serverfault.com/questions/441310/proxmox-uploading-disk-image" target="_blank" rel="noopener"
&gt;ce thread&lt;/a&gt;, on apprend que pour chaque banque de données, chaque VM dispose d’un dossier dans lequel il faut déposer le disque. Dans &lt;strong&gt;le bon&lt;/strong&gt; dossier ! Par exemple :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pour le stockage local, la VM avec l’id &lt;em&gt;100&lt;/em&gt; a un dossier &lt;strong&gt;/var/lib/vz/images/100/&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;pour le stockage NFS nommé de manière originale &lt;strong&gt;NFS_VM&lt;/strong&gt;, il y a un dossier &lt;strong&gt;/mnt/pve/NFS_VM/images&lt;/strong&gt; avec des sous dossiers pour chaque VM qui dispose d’un disque sur ce partage NFS.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A partir de là, on copie donc nos fichiers dans les bons dossiers en fonction de ce qu’on veut faire. Dans le cas présent je copie les fichiers sur le stockage local, dans un premier temps.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cp MaVM.qcow2 /var/lib/vz/images/100/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Une fois que c’est fait, les disques apparaissent dans la page spécifique de la banque de données.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/10/08_proxmox_kvm.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Mais le disque virtuel n’apparaît toujours pas dans la machine virtuelle. Il faut aller éditer à la main le fichier de configuration de la VM, situé dans &lt;strong&gt;/etc/pve/nodes/xxx/qemu-server/[VMID].conf&lt;/strong&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vi /etc/pve/nodes/xxx/qemu-server/100.conf
bootdisk: ide0;
cores: 2
ide2: none,media=cdrom
memory: 1024
name: bck-xxx-xxx
net0: e1000=7A:FA:D6:DC:06:70,bridge=vmbr0
numa: 0
ostype: l26
smbios1: uuid=ae5d66d6-724f-46cd-a85b-24eda7b9ecec
sockets: 1
ide0: local:100/xxx-xxx-flat.vmdk
ide1: local:100/xxx-xxx_1-flat.vmdk
unused0: local:100/vm-100-disk-1.vmdk
unused1: local:100/vm-100-disk-2.qcow2,size=32G
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A partir de là, les disques apparaissent dans la VM au niveau de ide0 et ide1 dans mon cas. On progresse.&lt;/p&gt;
&lt;h3 id="cas-des-disques-qcow2"&gt;Cas des disques QCOW2
&lt;/h3&gt;&lt;p&gt;Dans le cas des disques QCOW2 (et les QCOW2 uniquement, pas les RAW), il sera nécessaire d’ajouter également un argument « taille » du disque, sans quoi la VM peut ne pas démarrer. Il faudra rajouter &lt;strong&gt;en fin de ligne&lt;/strong&gt; la taille du disque (&lt;strong&gt;xxx,size=yyG&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;Astuce : si vous ne la connaissez pas, supprimez le disque de la VM (qui passera en inutilisé), puis éditer le (edit) pour l’ajouter à nouveau. Le fichier de configuration devrait se recréer avec les bonnes options automatiquement.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/10/09_proxmox_kvm.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h3 id="cas-des-disques-raw"&gt;Cas des disques RAW
&lt;/h3&gt;&lt;p&gt;A l’inverse, la taille du disque en argument dans la configuration d’une VM pour une image RAW ne semble pas nécessaire.&lt;/p&gt;
&lt;p&gt;Par contre, pour les disques raw, il faut savoir qu’il faut ABSOLUMENT les nommer en « .raw » pour qu’ils soient visibles dans la liste des disques (mes disques provenant de KVM étaient nommés par défaut en « .img »).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2015/10/local.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Si vous ne les renommez pas, les disques seront présents dans la VM, mais elle refusera de démarrer avec l’erreur suivante :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;unable to parse volume filename&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Il faudra prendre soin de tous les renommer, puis de modifier la configuration de la machine virtuelle en tenant compte de cette modification.&lt;/p&gt;</description></item><item><title>Bug : unable to execute QEMU command &amp;lsquo;cont’ sous KVM et RHEL/CentOS</title><link>https://blog.zwindler.fr/2015/10/10/bug-unable-to-execute-qemu-command-cont-sous-kvm-et-rhelcentos/</link><pubDate>Sat, 10 Oct 2015 10:30:00 +0000</pubDate><guid>https://blog.zwindler.fr/2015/10/10/bug-unable-to-execute-qemu-command-cont-sous-kvm-et-rhelcentos/</guid><description>&lt;img src="https://blog.zwindler.fr/2015/10/kvm.webp" alt="Featured image of post Bug : unable to execute QEMU command &amp;lsquo;cont’ sous KVM et RHEL/CentOS" /&gt;&lt;p&gt;Cet article est encore un vieil article que je n’ai jamais pris le temps de sortir. Voilà maintenant c’est fait ;-)&lt;/p&gt;
&lt;h2 id="bug-unable-to-execute-qemu-command-cont"&gt;Bug unable to execute QEMU command ‘cont’
&lt;/h2&gt;&lt;p&gt;Aussi rare que cela soit, après ma migration de KVM sur Ubuntu a KVM sur CentOS, je suis tombé sur un bug du Kernel Linux qui affectait directement ma capacité à faire fonctionner des machines virtuelles sous Windows 7 ou Windows 2008 ! Mais toutes les autres fonctionnaient normalement.&lt;/p&gt;
&lt;h3 id="symptôme"&gt;Symptôme
&lt;/h3&gt;&lt;p&gt;Lorsqu’on démarre la VM ou qu’elle démarre seule au boot, elle se met en pause. Si on essaye de la sortir du mode pause on reçoit l’erreur suivante.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Error unpausing domain: internal error unable to execute QEMU command ‘cont’: Resetting the Virtual Machine is required&amp;lt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;L’erreur en elle même n’est pas très explicite. Dans le log de la machine virtuelle en question, on a un message plus long mais guère plus évocateur :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;/var/log/libvirt/qemu/[maVM]
kvm: unhandled exit 80000021
kvm_run returned -22
If you’re running a guest on an Intel machine without unrestricted mode
support, the failure can be most likely due to the guest entering an invalid
state for Intel VT. For example, the guest maybe running in big real mode
which is not supported on less recent Intel processors.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Bien évidemment, toutes les autres VMs sous Linux fonctionnent parfaitement donc on ne peut pas accuser Qemu de ne pas fonctionner correctement.&lt;/p&gt;
&lt;h3 id="solution"&gt;Solution
&lt;/h3&gt;&lt;p&gt;En théorie, j’ai lu à plusieurs endroits que le bug était censé être corrigés sur des patchs des kernels de CentOS 5 ou 6 (toujours présent en 2.6.32-431.3.1.el6.x86_64 par exemple) et même pour Ubuntu.&lt;br&gt;
Dans la pratique, même en mettant l’OS CentOS à jour, impossible de faire fonctionner cette VM.&lt;br&gt;
La seule vrai solution que j’avais trouvé à l’époque était de forcer le passage à un kernel plus récent, à savoir au moins 3.+.&lt;/p&gt;
&lt;p&gt;Pour ceux qui se sentiraient un peu perdu, le plus simple est de changer de version de CentOS ou d’Ubuntu. Sur les dernière version le bug n’est plus présent.&lt;/p&gt;
&lt;p&gt;Cependant, si vous avez un système en place et qu’une migration n’est pas à l’ordre du jour, voici la marche à suivre pour installer un kernel plus récent. Voici la procédure que j’ai utilisée pour installer un 3.13 sur lequel la VM fonctionne à nouveau (3.11 fonctionne aussi, je ne sais pas avant).&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;yum install gcc ncurses ncurses-devel
yum update
wget https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.13.1.tar.gz
tar xzf linux-3.13.1.tar.gz -C /usr/src/
cd /usr/src/linux-3.13.1/
make menuconfig
make
make modules_install install
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;N’oubliez pas de vérifier que votre kernel est bien choisi en premier dans le boot loader, ce qui n’est souvent pas le cas par défaut (modifier la valeur &lt;strong&gt;default&lt;/strong&gt; dans le &lt;strong&gt;grub.conf&lt;/strong&gt; pour correspondre à la bonne entrée) sinon le problème ne sera pas résolu au reboot.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vi /etc/grub.conf
default=X
[...]
root (hd0,0)
kernel /vmlinuz-3.13.1 ro root=/dev/mapper/vg_root-lv_root rd_LVM_LV=vg_root/lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_MD_UUID=8f43b4fe:e72ed9aa:2da568b5:5f43b223 SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=fr-latin9 rd_LVM_LV=vg_endeavour/lv_swap rd_NO_DM rhgb quiet
initrd /initramfs-3.13.1.img
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et vous pouvez vérifier que vous êtes sur le bon kernel avec un uname.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;reboot
uname -r
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="erreurbug-error-starting-virt-manager"&gt;Erreur/bug Error starting virt-manager
&lt;/h2&gt;&lt;p&gt;En bonus track, je voudrais aussi ajouter un petit bug de plus pour la route, sur l’utilisation de l’interface graphique virt-manager cette fois ci.&lt;/p&gt;
&lt;p&gt;Pour une raison obscure, lorsque je voulais lancer ma GUI virt-manager, il m’est arrivé une ou deux fois de suivre la procédure décrite sur &lt;a class="link" href="http://nutanix.blogspot.fr/2013/06/kvm-virt-manager-startup-failure.html" target="_blank" rel="noopener"
&gt;le blog de nutanix&lt;/a&gt; lorsque je recevais l’erreur suivante :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Error starting virt-manager&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;dbus-uuidgen --get
cat /var/lib/dbus/machine-id
dbus-uuidgen &amp;gt; /var/lib/dbus/machine-id
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>Migration KVM Ubuntu vers Redhat et problème /usr/libexec/qemu-kvm: No such file or directory</title><link>https://blog.zwindler.fr/2015/10/04/migration-kvm-ubuntu-vers-redhat-et-probleme-usrlibexecqemu-kvm-no-such-file-or-directory/</link><pubDate>Sun, 04 Oct 2015 19:20:58 +0000</pubDate><guid>https://blog.zwindler.fr/2015/10/04/migration-kvm-ubuntu-vers-redhat-et-probleme-usrlibexecqemu-kvm-no-such-file-or-directory/</guid><description>&lt;img src="https://blog.zwindler.fr/2015/10/kvm.webp" alt="Featured image of post Migration KVM Ubuntu vers Redhat et problème /usr/libexec/qemu-kvm: No such file or directory" /&gt;&lt;p&gt;Je suis en train de migrer de KVM vers ProxMox. Et du coup, je ressors de mes tiroirs tous les articles que je n’ai pas &lt;del&gt;eu&lt;/del&gt; pris le temps d’écrire à propos des problèmes que j’ai pu rencontrer, notamment lors de ma migration VMware ESXi vers KVM/Uubuntu puis KVM/Ubuntu vers KVM/CentOS.&lt;/p&gt;
&lt;h2 id="processsu-de-migration-à-froid"&gt;Processsu de migration (à froid)
&lt;/h2&gt;&lt;p&gt;On pourrait penser que migrer une machine virtuelle KVM Ubuntu vers une machine virtuelle KVM sous RHEL/CentOS ne pose pas de problème particulier puisqu’il s’agit d’une même technologie : qemu. Et pourtant !&lt;/p&gt;
&lt;p&gt;Lorsque j’ai voulu passer sous CentOS pour des questions d’habitude d’administration (et aussi parce que la philosophie RHEL me plait plus que celle d’Ubuntu), je me suis rendu compte que ça n’est pas tout à fait vrai.&lt;/p&gt;
&lt;p&gt;Voici la procédure que j’ai suivi pour migrer :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;copie de mes machines virtuelle sur un volume séparé, ainsi que dump de leur fichiers de configuration&lt;/li&gt;
&lt;li&gt;réinstallation &lt;em&gt;from scratch&lt;/em&gt; de l’OS de l’hyperviseur, j’en ai profité pour passer sur un OS installé en RAID1 pour plus de sécurité&lt;/li&gt;
&lt;li&gt;récupération des machines virtuelles et réimport de leur configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour ceux qui ne sont pas familier avec l’import/export de configuration de machines virtuelles via virsh, voici un petit aparté sur la marche à suivre :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;virsh list #affiche la liste des machines virtuelles actives sur le serveur
virsh list --all #affiche toutes les VMs enregistrés sur l&amp;#39;hôte, même celles inactives
virsh dumpxml GuestID &amp;gt; guest.xml #dump XML du fichier de configuration pour sauvegarde ou import futur
virsh define guest.xml #réimporter le fichier de configuration XML (sans démarrer la VM à la suite)
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="en-cas-derreur-no-such-file-or-directory-lors-de-limport"&gt;En cas d’erreur &lt;em&gt;No such file or directory&lt;/em&gt; lors de l’import
&lt;/h2&gt;&lt;p&gt;Lors qu’on importe la machine virtuelle, on peut avoir l’erreur suivante :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;virsh define MaVM.xml
error: Failed to define domain from MaVM.xml
error: Cannot find QEMU binary /usr/bin/kvm: No such file or directory
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;La première chose à vérifier bien entendu est que tous les packages sont bien installés mais dans mon cas c’était bien le cas (le package qemu contenant l’émulateur KVM était bien installé).&lt;/p&gt;
&lt;p&gt;Sur Ubuntu, l’émulateur est stocké dans le binaire &lt;strong&gt;/usr/bin/kvm&lt;/strong&gt;. A l’inverse, sur RHEL ou CentOS, il n’est pas situé dans le même dossier, et ne s’appelle même pas &lt;strong&gt;kvm&lt;/strong&gt; mais &lt;strong&gt;/usr/libexec/qemu-kvm&lt;/strong&gt; !&lt;/p&gt;
&lt;p&gt;On doit donc passer sur chaque fichier XML de configuration de machine virtuelle pour modifier le chemin vers le binaire. On en profitera également pour mettre à jour le chemin vers le disque dur virtuel si jamais l’arborescence de stockage n’est pas la même entre les deux serveurs.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vim MaVM.xml
&amp;lt;emulator&amp;gt;/usr/bin/kvm&amp;lt;/emulator&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A partir de là, vous pouvez importer correctement vos VMs et les démarrer !&lt;/p&gt;
&lt;h2 id="pour-aller-plus-loin"&gt;Pour aller plus loin
&lt;/h2&gt;&lt;p&gt;A noter, par défaut sous RHEL/CentOS les fichiers sont répartis de la façon suivante :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/etc/libvirt/qemu/ pour tous les fichiers de configuration VM, storage, etc.&lt;/li&gt;
&lt;li&gt;/var/log/libvirt/qemu/ pour les fichiers journaux des machines virtuelles&lt;/li&gt;
&lt;li&gt;/var/run/libvirt/qemu/ contient les fichiers de fonctionnement de la machine, à avoir le .pid pour stocker le PID du process maitre de ma VM, ainsi qu’un fichier XML contenant une copie de la configuration de la VM en fonctionnement&lt;/li&gt;
&lt;li&gt;/var/lib/libvirt/qemu/ contient des fichiers permettant de suivre les performances de la VM, de stocker les éventuels dump/snapshots/sauvegardes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un peu de documentation clairement expliquée sur l’utilisation de virsh sur la communauté Ubuntu : &lt;a class="link" href="https://help.ubuntu.com/community/KVM/Virsh" target="_blank" rel="noopener"
&gt;Virsh&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Et pour aller plus loin dans le Troubleshooting, voici &lt;a class="link" href="https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Virtualization_Deployment_and_Administration_Guide/sect-Troubleshooting-Common_libvirt_errors_and_troubleshooting.html" target="_blank" rel="noopener"
&gt;un guide de RedHat listant les erreurs courantes avec Qemu/KVM&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>