<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Rancher on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/rancher/</link><description>Recent content in Rancher on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Tue, 24 Jan 2023 06:30:00 +0200</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/rancher/index.xml" rel="self" type="application/rss+xml"/><item><title>Test (incomplet) de Rancher Labs Harvester, plateforme de virtualisation hyperconvergée</title><link>https://blog.zwindler.fr/2023/01/24/test-rancher-labs-harvester-hci/</link><pubDate>Tue, 24 Jan 2023 06:30:00 +0200</pubDate><guid>https://blog.zwindler.fr/2023/01/24/test-rancher-labs-harvester-hci/</guid><description>&lt;img src="https://blog.zwindler.fr/2023/01/harvester.webp" alt="Featured image of post Test (incomplet) de Rancher Labs Harvester, plateforme de virtualisation hyperconvergée" /&gt;&lt;h2 id="je-ne-dirais-pas-que-cest-un-échec-je-dirais-que-ça-na-pas-marché-"&gt;Je ne dirais pas que c&amp;rsquo;est un échec. Je dirais que ça n&amp;rsquo;a pas marché !
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Disclaimer !&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Je vous préviens tout de suite, même si j&amp;rsquo;ai réussi à installer Harvester et avoir un cluster fonctionnel, j&amp;rsquo;ai eu beaucoup de mal à l&amp;rsquo;utiliser, car mes machines étaient trop peu puissantes pour le faire fonctionner.&lt;/p&gt;
&lt;p&gt;En effet, en lisant la doc (lol, qui fait ça ?) je me suis rendu compte que les prérequis sont relativement élevés :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/requirements.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Harvester : great for &amp;ldquo;edge HCI&amp;rdquo; !&lt;/p&gt;
&lt;p&gt;Also Harvester : 16-core/64 GB RAM or above preferred for production&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Je ne vais donc pas totalement au bout du test, ne soyez pas déçu / vous êtes prévenus.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/pas_march%c3%a9.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="lab-maison"&gt;Lab maison
&lt;/h2&gt;&lt;p&gt;Il y a quelques mois, j&amp;rsquo;ai décidé d&amp;rsquo;acheter des petites machines pour me faire un &amp;ldquo;lab&amp;rdquo; à la maison.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;idée était de pouvoir tester des technos telles que des hyperviseurs, sans galérer avec des VMs (et avoir des perfs pourries en &amp;ldquo;nested virt&amp;rdquo;) ou galérer avec les interfaces types ILO pas toujours très bien supportées par les différents hébergeurs &amp;ldquo;pas chers&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Pour éviter de me ruiner, j&amp;rsquo;ai décidé d&amp;rsquo;acheter d&amp;rsquo;occasion 3 Dell micro (pour avoir un nombre impair de machines) de la gamme 3050 ou équivalent et avec les caractéristiques suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;i5-6500T à 4 cores&lt;/li&gt;
&lt;li&gt;entre 4 et 16 Go de RAM DDR3(L) ou DDR4&lt;/li&gt;
&lt;li&gt;un emplacement 2&amp;quot;5 SATA et éventuellement un emplacement NVMe&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/lab.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;D&amp;rsquo;abord, ces machines sont assez peu couteuses (entre 100 et 150€ sur LeBonCoin ou les reconditionneurs en cherchant bien). Ensuite, elles consomment très peu grâce au i5-T (autour de 10w en idle) ce qui me permet de les laisser allumées quelques heures sans me sentir mal pour ma facture d&amp;rsquo;électricité ou la planète. Enfin, elles sont super compactes, presque silencieuses et jolies. On est loin du rack qui fait tâche dans le salon.&lt;/p&gt;
&lt;p&gt;Une fois que je les ai reçues, je vous ai demandé sur Twitter/Masto ce que vous vouliez que je mette dessus. Parmis vos réponses, c&amp;rsquo;est Harvester qui a attiré ma curiosité parmis vos réponses.&lt;/p&gt;
&lt;h2 id="mais-cest-quoi-harvester-"&gt;Mais c&amp;rsquo;est quoi Harvester ?
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://www.rancher.com/products/harvester" target="_blank" rel="noopener"
&gt;Harvester&lt;/a&gt; est un produit de chez Rancher Labs (compagnie achetée par Suse en 2020).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/harvester.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Harvester is the next generation of hyperconverged infrastructure designed for the modern cloud-native environment.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;C&amp;rsquo;est donc un produit de virtualisation, dans la gamme des solutions &amp;ldquo;hyperconvergées&amp;rdquo;, où le stockage de chaque &lt;em&gt;noeud&lt;/em&gt; est mis dans un pool commun de stockage distribué.&lt;/p&gt;
&lt;p&gt;Vous avez sûrement entendu parler de Nutanix ou de VMware vSAN, ou peut être de Proxmox VE qui propose un cluster Ceph natif, pour faire la même chose en open source.&lt;/p&gt;
&lt;p&gt;Ce que met en avant en premier Rancher, c&amp;rsquo;est que Harvester est un outil &lt;strong&gt;simple&lt;/strong&gt; à utiliser.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hyperconverged infrastructure doesn’t need to be complex or expensive. With Harvester and Rancher, IT operators now have access to an enterprise-ready, simple-to-use infrastructure platform that cohesively manages their virtual machines and Kubernetes clusters alongside one another.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ok, why not. Mais là où ça se complique, c&amp;rsquo;est quand on creuse un peu sur &lt;strong&gt;comment&lt;/strong&gt; c&amp;rsquo;est fait :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Built by the Rancher engineering team, Harvester is powered by 100% open source cloud native technology including Kubernetes, Longhorn and Kubevirt.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mkay. Utiliser Kubernetes pour faire des VMs, ça &amp;ldquo;marche&amp;rdquo; (Kubevirt), mais c&amp;rsquo;est clairement pas l&amp;rsquo;idée que j&amp;rsquo;aurais en premier.&lt;/p&gt;
&lt;h2 id="techniquement-cest-quoi-"&gt;Techniquement c&amp;rsquo;est quoi ?
&lt;/h2&gt;&lt;p&gt;Pour aller voir de plus près comment ça marche, le plus simple est d&amp;rsquo;aller voir le repository officiel de harvester (c&amp;rsquo;est open source, tout est disponible sur Github.com).&lt;/p&gt;
&lt;p&gt;Le plus intéressant est ce fichier &lt;a class="link" href="https://github.com/harvester/harvester/blob/master/deploy/charts/harvester/Chart.yaml" target="_blank" rel="noopener"
&gt;harvester/deploy/charts/harvester/Chart.yaml&lt;/a&gt; dans lequel on peut voir tout ce qui est déployé par défaut sur nos machines Harvester :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;kubevirt-operator&lt;/li&gt;
&lt;li&gt;harvester-network-controller&lt;/li&gt;
&lt;li&gt;harvester-node-disk-manager&lt;/li&gt;
&lt;li&gt;csi-snapshotter&lt;/li&gt;
&lt;li&gt;longhorn&lt;/li&gt;
&lt;li&gt;kube-vip&lt;/li&gt;
&lt;li&gt;harvester-load-balancer&lt;/li&gt;
&lt;li&gt;whereabouts&lt;/li&gt;
&lt;li&gt;harvester-node-manager&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ca fait pas mal de composants et ça explique certainement les requirements élevés en nombre de CPUs minimum (on a tendance à &lt;strong&gt;réserver&lt;/strong&gt; plus de CPU qu&amp;rsquo;on en consomme sur les composants techniques d&amp;rsquo;un cluster Kubernetes, par sécurité).&lt;/p&gt;
&lt;h2 id="voyons-voir-comment-ça-sinstalle"&gt;Voyons voir comment ça s&amp;rsquo;installe.
&lt;/h2&gt;&lt;p&gt;Bon là, c&amp;rsquo;est relativement classique, on peut booter Harvester via un serveur PXE ou &lt;a class="link" href="https://docs.harvesterhci.io/v1.1/install/usb-install" target="_blank" rel="noopener"
&gt;l&amp;rsquo;installer via un ISO avec une clé USB&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;avais la flemme de monter un serveur PXE (mais il va falloir que je m&amp;rsquo;y mette, on en reparlera dans un autre article, cela dit) donc je suis resté simple et efficace.&lt;/p&gt;
&lt;p&gt;Un petit coup de &lt;a class="link" href="https://www.balena.io/etcher/" target="_blank" rel="noopener"
&gt;balena Etcher&lt;/a&gt; et on en parle plus.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://releases.rancher.com/harvester/v1.1.1/harvester-v1.1.1-amd64.iso
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod +x balenaEtcher-1.13.1-x64.AppImage
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./balenaEtcher-1.13.1-x64.AppImage
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/balena.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On a ensuite une interface d&amp;rsquo;install assez basique et plutôt simple dans laquelle on renseigne hostname, IP, token pour créer ou joindre un cluster existant. Dans un contexte plus pro/industrialisé, le boot PXE et une config automatisée prendront évidemment tout leur sens.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/iso_install.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;non, ce n&amp;rsquo;est pas de la neige sur l&amp;rsquo;écran, il est juste affreusement sale&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Effectivement, je n&amp;rsquo;ai eu aucun souci à ce niveau et c&amp;rsquo;était très simple. Une fois l&amp;rsquo;installation de nos 3 noeuds terminée, on se retrouve avec une interface comme celle ci :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/harvester_cluster_ok.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="on-se-connecte"&gt;On se connecte
&lt;/h2&gt;&lt;p&gt;Maintenant qu&amp;rsquo;on a un cluster fonctionnel, on peut aller faire un tour sur l&amp;rsquo;interface de management.&lt;/p&gt;
&lt;p&gt;On nous avait promis quelque chose de simple et c&amp;rsquo;est pas des blagues ! C&amp;rsquo;est simple, pour ne pas dire simpliste.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/menu1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Un menu pour les VMs, un pour les volumes, un pour le réseau, un pour les backups (et quelques autres).&lt;/p&gt;
&lt;h2 id="la-première-vm"&gt;La première VM
&lt;/h2&gt;&lt;p&gt;On ne perd pas de temps, je suis tout de suite allé créer un VM (on est quand même là pour ça).&lt;/p&gt;
&lt;p&gt;Préalablement, c&amp;rsquo;est mieux si on a créé un &lt;em&gt;Namespace&lt;/em&gt; (oui, vous vous souvenez c&amp;rsquo;est du Kubernetes !) et uploadé une clé SSH. Le menu reste simple, on est proche de ce qu&amp;rsquo;on va trouver chez les grands cloud providers, par exemple.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/vm1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Il y a juste une petite subtilité pour ce qui est de la création de volumes, je trouve le wizard pas hyper clair la première fois. Pour créer la VM, il va vous falloir probablement soit un ISO, soit un volume que vous aurez préalablement créé contenant l&amp;rsquo;OS sur lequel booter.&lt;/p&gt;
&lt;p&gt;Sauf que l&amp;rsquo;interface ne parle que de &amp;ldquo;disques&amp;rdquo; sans plus de détails. Il faut comprendre qu&amp;rsquo;on va ajouter un CDROM (ISO) et un disque (HDD).&lt;/p&gt;
&lt;p&gt;Et il faut changer de menu pour uploader l&amp;rsquo;ISO, car on ne peut pas le faire directement dans le menu de création de VM.&lt;/p&gt;
&lt;p&gt;On a vu plus simple comme UX d&amp;rsquo;un hyperviseur. Heureusement l&amp;rsquo;interface des ISOs a quand même l&amp;rsquo;avantage de proposer de rentrer une URL et de DL le fichier pour nous (comme Proxmox VE), ce qui gagne du temps.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/iso1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/iso2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On peut ensuite ajouter à notre VM des volumes (en cliquant sur Volumes dans le menu au milieu à gauche) et ajouter l&amp;rsquo;ISO et un volume vide.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/vm2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Ce qui est intéressant ici, c&amp;rsquo;est que mon volume est provisionné dans le stockage &lt;code&gt;longhorn&lt;/code&gt;, à savoir, le fameux pool de stockage distribué aggrégeant les disques de tous mes serveurs, géré &amp;ldquo;automagiquement&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Si j&amp;rsquo;ajoute des noeuds, le stockage s&amp;rsquo;étend. Si j&amp;rsquo;en retire, toutes les données sont redistribuées.&lt;/p&gt;
&lt;p&gt;Ca me fait toujours un peu flipper ce genre de solutions. Quand &amp;ldquo;ça se passe mal&amp;rdquo;, c&amp;rsquo;est quand même bien d&amp;rsquo;avoir la main et j&amp;rsquo;aurais probablement plus confiance dans un Ceph (sur Proxmox VE) sur lequel j&amp;rsquo;ai plus facilement la main pour réparer/rebalance, que sur un longhorn prépackagé pour moi.&lt;/p&gt;
&lt;p&gt;Mais peut-être que c&amp;rsquo;est juste une histoire d&amp;rsquo;habitude et que ça se gère tout aussi bien.&lt;/p&gt;
&lt;h2 id="on-la-boote-cette-vm-"&gt;On la boote, cette VM ?
&lt;/h2&gt;&lt;p&gt;Une fois configurée, on peut donc commencer à booter notre VM et voir si elle fonctionne comme attendue.&lt;/p&gt;
&lt;p&gt;Et c&amp;rsquo;est là où les choses ont commencé à sérieusement se gâter pour moi. En effet, je l&amp;rsquo;ai dit tout au début de l&amp;rsquo;article, mes machines ne sont tout simplement pas assez puissantes pour héberger une solution hyperconvergée de ce type.&lt;/p&gt;
&lt;p&gt;Les SSDs étaient trop lents (je n&amp;rsquo;ai pas encore investi dans des NVMe pour avoir les données séparées du disque SATA de l&amp;rsquo;OS) et surtout, les CPUs étaient au max.&lt;/p&gt;
&lt;p&gt;Sans aucune VM, à vide, Harvester réserve déjà quasiment les 4 CPUs de mes 3 machines. Pire, sur la machine harvester01, l&amp;rsquo;interface me disait réserver plus de cores que ce que la machine disposait (4.5 cores). Niveau RAM, ça allait même si à l&amp;rsquo;usage 10-12 Go par machine aurait probablement été juste.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/ressources.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Le résultat était que la plupart des fonctionnalités étaient extrêmement lentes. Ma VM a mis une 20aines de secondes à se créer puis booter.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/vm3.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Même la navigation dans l&amp;rsquo;interface était parfois pénible. J&amp;rsquo;ai mis plusieurs minutes avant de pouvoir afficher la console VNC de ma VM. Le stockage avait du mal à se synchroniser entre les nodes.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/vm4.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Je ne parle même pas de tester des fonctionnalités plus avancées comme les live-migrations, les snapshots, les backups/restaurations. J&amp;rsquo;ai donc décidé de finir d&amp;rsquo;explorer les menus puis de couper court à l&amp;rsquo;essai.&lt;/p&gt;
&lt;h2 id="les-autres-menus"&gt;Les autres menus
&lt;/h2&gt;&lt;p&gt;Au-delà de la partie purement HCI (hyperconverged infrastructure), Rancher Labs met en avant le fait qu&amp;rsquo;il existe de belles synergies entre Harvester et Rancher. Typiquement, il est possible de gérer ses clusters Harvester depuis Rancher (si j&amp;rsquo;ai bien compris) et inversement de créer plus facilement des clusters Kubernetes/Rancher grâce à Harvester.&lt;/p&gt;
&lt;p&gt;N&amp;rsquo;ayant pas du tout l&amp;rsquo;infra pour tester, je ne peux pas trop juger de la pertinence de cette fonctionnalité.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai aussi trouvé intéressant l&amp;rsquo;ajout d&amp;rsquo;extension directement dans l&amp;rsquo;interface d&amp;rsquo;Harvester. On est proche de l&amp;rsquo;expérience Kubernetes packagée par certains cloud providers qui fournissent presque plus un PaaS propulsé par Kubernetes qu&amp;rsquo;un KaaS.&lt;/p&gt;
&lt;p&gt;On peut très facilement déployer une stack de monitoring Prometheus ou de logging avec fluentbit&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/extensions.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2023/01/extensions2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Je n&amp;rsquo;ai pas testé non plus, mais il existe des providers terraform officiels assez complets qui permettent d&amp;rsquo;automatiser pas mal d&amp;rsquo;actions. Je ferai peut être un test avec un update de l&amp;rsquo;article.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://registry.terraform.io/providers/harvester/harvester/latest/docs" target="_blank" rel="noopener"
&gt;registry.terraform.io/providers/harvester&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="conclusion--pour-aller-plus-loin"&gt;Conclusion &amp;amp;&amp;amp; pour aller plus loin
&lt;/h2&gt;&lt;p&gt;J&amp;rsquo;imagine que comme moi, vous restez sur votre faim. Je n&amp;rsquo;ai vraiment pas pu aller loin à cause de mes problématiques de matériel. Si vous voulez en savoir plus, je vous invite donc à regarder la vidéo &lt;a class="link" href="https://youtu.be/hu6p4CPXSDI" target="_blank" rel="noopener"
&gt;Harvester deep dive&lt;/a&gt; avec Saiyam Pathak (Kubesimplify) et Guangbo Chen (Rancher Labs).&lt;/p&gt;
&lt;p&gt;Personnellement, comme pour mon précédent test de &lt;a class="link" href="https://blog.zwindler.fr/2020/10/26/kubernetes-avec-rancheros-et-rke-partie-1/" target="_blank" rel="noopener"
&gt;RancherOS (un autre produit Rancher Labs)&lt;/a&gt;, j&amp;rsquo;ai du mal à bien comprendre à &lt;strong&gt;qui&lt;/strong&gt; s&amp;rsquo;adresse ce genre d&amp;rsquo;outils.&lt;/p&gt;
&lt;p&gt;Harvester est présenté comme une solution HCI basée sur Kubernetes mais &lt;strong&gt;avec une interface simplifiée à l&amp;rsquo;extrême&lt;/strong&gt; pour permettre à des opérateurs IT (vos équipes IT traditionnelles, disons) qui ne maîtrisent pas ces technos, de le gérer. La simplicité est vraiment l&amp;rsquo;argument principal mis en avant et l&amp;rsquo;interface reflète cette promesse.&lt;/p&gt;
&lt;p&gt;Mais&amp;hellip; au-delà des éventuelles synergies avec l&amp;rsquo;écosystème Rancher Labs&amp;hellip; pourquoi est ce qu&amp;rsquo;une équipe IT aurait &lt;strong&gt;envie&lt;/strong&gt; d&amp;rsquo;installer un hyperviseur basé sur Kubernetes (+ Kubevirt + longhorn) ???&lt;/p&gt;
&lt;p&gt;Des solutions de virtualisation &lt;strong&gt;vraiment&lt;/strong&gt; simples existent sur le marché (qu&amp;rsquo;elles soient open source ou pas, on-prem ou managées). Kubernetes n&amp;rsquo;est pas pensé pour faire du &lt;a class="link" href="http://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/" target="_blank" rel="noopener"
&gt;Pet (vs Cattle)&lt;/a&gt; et ce n&amp;rsquo;est clairement pas dans un usecase d&amp;rsquo;hyperviseur simple que je le mettrais en avant.&lt;/p&gt;
&lt;p&gt;Dernier point, dans un monde où l&amp;rsquo;électricité coûte un bras et où tout le monde se targue d&amp;rsquo;être plus green que green (c&amp;rsquo;est pour la planète), peut-on vraiment accepter qu&amp;rsquo;une solution de virtualisation demande des prérequis en ressources aussi importants ?&lt;/p&gt;
&lt;p&gt;Peut-être que j&amp;rsquo;ai tout faux, mais tout ça me parait assez peu efficient&amp;hellip;&lt;/p&gt;</description></item><item><title>k3os, le reboot de RancherOS à la sauce k3s</title><link>https://blog.zwindler.fr/2020/12/08/k3os-le-reboot-de-rancheros-a-la-sauce-k3s/</link><pubDate>Tue, 08 Dec 2020 07:45:00 +0000</pubDate><guid>https://blog.zwindler.fr/2020/12/08/k3os-le-reboot-de-rancheros-a-la-sauce-k3s/</guid><description>&lt;img src="https://blog.zwindler.fr/2020/12/k3s.webp" alt="Featured image of post k3os, le reboot de RancherOS à la sauce k3s" /&gt;&lt;h2 id="k3os-encore-un-produit-rancher-"&gt;k3os, encore un produit Rancher ?
&lt;/h2&gt;&lt;p&gt;Oui, k3os. Je vais donc ENCORE parler d’un produit de Rancher aujourd’hui, et la raison principale est que cet article est plus ou moins la suite logique des deux précédents sur RancherOS et RKE&lt;/p&gt;
&lt;p&gt;Dans &lt;a class="link" href="https://blog.zwindler.fr/2020/10/26/kubernetes-avec-rancheros-et-rke-partie-1/" &gt;Kubernetes avec RancherOS et RKE partie 1&lt;/a&gt;, je vous expliquais que j’avais ENCORE changé d’infra et que pour le fun, j’avais souhaité essayer d’installer &lt;a class="link" href="https://blog.zwindler.fr/2020/10/26/kubernetes-avec-rancheros-et-rke-partie-1/" &gt;RancherOS&lt;/a&gt; puis &lt;a class="link" href="https://blog.zwindler.fr/2020/11/30/kubernetes-avec-rancheros-et-rke-partie-2/" &gt;RKE&lt;/a&gt;, respectivement comme distrib pour mes nodes Kubernetes et comme méthode d’installation de Kubernetes lui même.&lt;/p&gt;
&lt;p&gt;Bon, alors d’abord j’ai pas été super convaincu par RancherOS (pas seulement pour mon usage perso, mais aussi plus globalement) et en plus, j’ai découvert grâce aux commentaires que RancherOS était en fait abandonné.&lt;/p&gt;
&lt;p&gt;Bummer&amp;hellip;&lt;/p&gt;
&lt;h2 id="k3s-pour-mon-usecase-cest-quand-même-mieux"&gt;k3s pour mon usecase c’est quand même mieux
&lt;/h2&gt;&lt;p&gt;Bon en vrai ce n’était pas bien grave, car le but était de tester ces produits dont j’entendais parler depuis un moment. Mais du coup, je n’ai toujours pas de Kubernetes viable pour mes geekeries&amp;hellip;&lt;/p&gt;
&lt;p&gt;Un des outils qui correspond le mieux à mon usecase, là encore chez Rancher, c’est &lt;strong&gt;&lt;a class="link" href="https://k3s.io/" target="_blank" rel="noopener"
&gt;k3s&lt;/a&gt;&lt;/strong&gt;. Un Kubernetes minimaliste qui prend très peu de ressources et qui est simple à installer.&lt;/p&gt;
&lt;p&gt;J’avais d’ailleurs fait quelques articles dessus, notamment pour parler d’un playbook Ansible qui permettait de déployer k3s sur des instances ARM dans le cloud de Scaleway (la bonne époque où ils en proposaient, en tout cas&amp;hellip;).&lt;/p&gt;
&lt;p&gt;Le code est toujours dispo et &lt;strong&gt;n’était pas spécifique à ARM ni à Scaleway&lt;/strong&gt;, si ça vous intéresse.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/zwindler/ansible-scaleway-k3s" target="_blank" rel="noopener"
&gt;Le code sur Github&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&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;L’article pour en parler&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="et-k3os-dans-tout-ça-"&gt;Et k3os dans tout ça ?
&lt;/h2&gt;&lt;p&gt;La méthode d’installation de Kubernetes est donc choisie. Mais ça ne répond pas à la seconde question, à savoir, sur quelle distribution je l’installe.&lt;/p&gt;
&lt;p&gt;Je peux l’installer sur n’importe quel OS Linux généraliste (Debian, Ubuntu, CentOS, &amp;hellip; you name it), mais le but, c’est quand même d’installer un Kubernetes le plus léger possible (car je suis radin sur les serveurs que je loue et ils sont peu puissants).&lt;/p&gt;
&lt;p&gt;Qu’à cela ne tienne, me dis-je ! Pourquoi ne pas retenter l’expérience CoreOS et RancherOS avec k3os ?&lt;/p&gt;
&lt;p&gt;Et c’est vraiment une bonne question&amp;hellip;&lt;/p&gt;
&lt;h2 id="k3os-donc"&gt;k3OS donc
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;k3OS is a Linux distribution designed to remove as much OS maintenance as possible in a Kubernetes cluster. It is specifically designed to only have what is needed to run &lt;a class="link" href="https://github.com/rancher/k3s" target="_blank" rel="noopener"
&gt;k3s&lt;/a&gt;. Additionally the OS is designed to be managed by kubectl once a cluster is bootstrapped. Nodes only need to join a cluster and then all aspects of the OS can be managed from Kubernetes. Both k3OS and k3s upgrades are handled by the k3OS operator.
&lt;a class="link" href="https://github.com/rancher/k3os" target="_blank" rel="noopener"
&gt;github.com/rancher/k3os&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;k3os est donc une distribution optimisée par Rancher pour fonctionner avec k3s et consommer le moins de ressources possibles.&lt;/p&gt;
&lt;p&gt;Les avantages mis en avant sont que dès que l’OS est installé, on a un Kubernetes fonctionnel puisque k3s est préinstallé et configuré à l’install de l’OS.&lt;/p&gt;
&lt;p&gt;L’autre avantage mis en avant est que tout la gestion du cycle de vie de l’OS est piloté à l’aide d’un operateur dans Kubernetes (k3OS operator) qui va nous permettre de gérer l’OS depuis Kubernetes directement.&lt;/p&gt;
&lt;p&gt;Mkay, pourquoi pas.&lt;/p&gt;
&lt;h2 id="et-cest-reparti-pour-un-tour"&gt;Et c’est reparti pour un tour
&lt;/h2&gt;&lt;p&gt;Même procédure que pour l’article sur RancherOS, les principes sont très similaires. On va télécharger une image iso, créer une VM et se connecter dessus en liveCD pour installer l’OS sur le disque.&lt;/p&gt;
&lt;p&gt;La page des releases est ici : &lt;a class="link" href="https://github.com/rancher/k3os/releases" target="_blank" rel="noopener"
&gt;github.com/rancher/k3os/releases&lt;/a&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd /var/lib/vz/template/iso
wget https://github.com/rancher/k3os/releases/download/v0.11.1/k3os-amd64.iso
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;To copy k3OS to local disk, after logging in as rancher run sudo k3os install. Then remove the ISO from the virtual machine and reboot.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/12/k3os-0.11.1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;STOOOOOP&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Exactement comme dans l’install de RancherOS, si vous partez bille en tête vous risquez de tomber sur un OS (ahah).&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://blog.zwindler.fr/2020/10/26/kubernetes-avec-rancheros-et-rke-partie-1/" &gt;Dans l’article précédent&lt;/a&gt;, j’avais fait l’andouille et lancé la commande, pour me rendre compte qu’une fois installé, je n’avais ni réseau, ni clé SSH pour me connecter sur l’utilisateur rancher post install.&lt;/p&gt;
&lt;p&gt;En vrai, tout doit se faire via cloud-config&amp;hellip;&lt;/p&gt;
&lt;p&gt;Bon, pour être honnête, cette fois-ci, ils ont quand même un peu plus prévu le coup. Si vous ne fournissez pas de cloud-config, cette fois-ci k3os vous propose de rentrer un mot de passe pour votre rancher.&lt;/p&gt;
&lt;p&gt;Mais vous n’aurez pas plus de réseau si comme moi vous n’avez pas mis de DHCP sur votre LAN (cf aparté pour les bolosses qui n’ont pas de DHCP plus tard dans l’article).&lt;/p&gt;
&lt;h2 id="cloud-config"&gt;cloud-config
&lt;/h2&gt;&lt;p&gt;Partons donc pour l’instant du principe que vous avez un DHCP et que vous aurez donc, une fois k3OS installé, accès réseau à votre machine.&lt;/p&gt;
&lt;p&gt;Proxmox a la bonne idée de permettre la création de volume cloud-init directement depuis l’UI.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/12/k3os_cloud-init.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/12/k3os_cloudinit_2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Cependant, j’ai bien l’impression que le format du cloud-init de Proxmox ne correspond pas au format attendu par k3OS&amp;hellip;&lt;/p&gt;
&lt;p&gt;OK, je suis pas fâché.&lt;/p&gt;
&lt;p&gt;On va donc devoir le faire à la mimine et ça tombe bien, car on a ENCORE le souci du clavier Qwerty/Azerty&amp;hellip; (&lt;a class="link" href="https://blog.zwindler.fr/2020/10/26/kubernetes-avec-rancheros-et-rke-partie-1/" &gt;cf Bonus Qwerty&lt;/a&gt;), ce qui est parfait pour copier à la main une clé SSH, c’est bien connu.&lt;/p&gt;
&lt;p&gt;Vous l’aurez compris, on va s’en sortir une fois de plus avec un port série et la console de type xterm.js&amp;hellip;&lt;/p&gt;
&lt;p&gt;Grosso modo, mon cloud config s’est limité à ça.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;gt; config.yml &amp;lt;&amp;lt; EOF
k3os:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQAaaaaaaaaaaaaaaaaaaaaaaaaaaaOF0lZiHOjIZ/27aaHmNTq27Vws2dhzJ9 rancher
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Tout ça pour ça me direz-vous ? Oui&amp;hellip;&lt;/p&gt;
&lt;p&gt;Mais bon, une fois qu’on a ça, on peut passer à l’install elle-même, qui est en fait un mini installeur qui vous pose quelques questions un peu triviales comme « rôle du node », « token », « chemin de la clé SSH ».&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;k3os-15121 [~]$ sudo k3os install
Running k3OS configuration
Choose operation
1. Install to disk
2. Configure server or agent
Select Number [1]:
Config system with cloud-init file? [y/N]: y
cloud-init file location (file path or http URL): config.yml
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ces valeurs peuvent d’ailleurs être ajoutées au cloud-config pour vous permettre d’automatiser la totalité de l’opération.&lt;/p&gt;
&lt;p&gt;A l’issue de l’opération&amp;hellip; magie ! vous aurez un Kubernetes tout neuf et tout léger :)&lt;/p&gt;
&lt;h2 id="aparté-pour-les-bolosses-qui-nont-pas-de-dhcp-aka-moi"&gt;Aparté pour les bolosses qui n’ont pas de DHCP (aka. moi)
&lt;/h2&gt;&lt;p&gt;Ça aurait été plus simple de monter un petit serveur DHCP vite fait mais je suis têtu comme pas deux.&lt;/p&gt;
&lt;p&gt;La blague avec k3OS est que, contrairement à RancherOS, il n’est tout simplement pas possible d’installer l’OS en lui spécifiant l’adresse réseau physique qu’il devra avoir post install.&lt;/p&gt;
&lt;p&gt;En fait au début, j’avais copié ce que j’avais fait pour RancherOS. L’installeur de k3OS ne râle pas, mais il ignore simplement le code en trop.&lt;/p&gt;
&lt;p&gt;Et vous ne pourrez plus vous connecter&amp;hellip;&lt;/p&gt;
&lt;p&gt;Mais comme je suis têtu (je me répète), j’ai cherché à tout prix la solution.&lt;/p&gt;
&lt;p&gt;L’idée ici est de feinter l’installeur en ne lui donnant PAS de cloud config. On garde ainsi la possibilité de se loguer à l’utilisateur rancher avec un mot de passe (pas bien ça&amp;hellip;).&lt;/p&gt;
&lt;p&gt;Une fois k3OS installé, on se connecte une nouvelle fois en console (oui, on risque pas de le faire en SSH&amp;hellip;) et on configure la carte réseau.&lt;/p&gt;
&lt;p&gt;k3OS est un dérivé d’Alpine (pour les binaires userspace) avec le kernel d’Ubuntu 20.04 (oh&amp;hellip;kay ?).&lt;/p&gt;
&lt;p&gt;Pour setter le réseau, vous pouvez donc faire :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo connmanctl services
*AR Wired ethernet_c6eb50d8c655_cable
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Cette commande vous renvoie le nom de la carte réseau virtuelle. Vous pouvez maintenant regarder la configuration par défaut&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo connmanctl services ethernet_c6eb50d8c655_cable
/net/connman/service/ethernet_c6eb50d8c655_cable
Type = ethernet
Security = [ ]
State = ready
Favorite = True
Immutable = False
AutoConnect = True
Name = Wired
Ethernet = [ Method=auto, Interface=eth0, Address=C6:EB:50:D8:C6:55, MTU=1500 ]
IPv4 = [ Method=auto, Address=169.254.126.16, Netmask=255.255.0.0 ]
IPv4.Configuration = [ Method=auto ]
IPv6 = [ ]
IPv6.Configuration = [ Method=auto, Privacy=disabled ]
Nameservers = [ 8.8.8.8 ]
Nameservers.Configuration = [ ]
Timeservers = [ ]
Timeservers.Configuration = [ ]
Domains = [ ]
Domains.Configuration = [ ]
Proxy = [ Method=direct ]
Proxy.Configuration = [ ]
mDNS = False
mDNS.Configuration = False
Provider = [ ]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Grande classe. 8.8.8.8 en DNS&amp;hellip; No comment.&lt;/p&gt;
&lt;p&gt;Et setter votre carte réseau post installation avec cette dernière commande (à remplacer par vos valeurs à vous, hein) :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo connmanctl config ethernet_d2416991aa5b_cable --ipv4 manual 192.168.1.15 255.255.255.0 192.168.1.1 --nameservers 192.168.1.1
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;Bon je crois qu’il est temps d’arrêter de se faire du mal&amp;hellip;&lt;/p&gt;
&lt;p&gt;Oui clairement, je me suis mis dans un exemple un peu foireux. Tout le monde de normalement constitué dispose d’un DHCP de nos jours. Surtout que k3OS cible les usages de k3s, à savoir le edge et l’IoT.&lt;/p&gt;
&lt;p&gt;Mais du coup, j’ai l’impression qu’on est vraiment dans le marché de niche de la niche : un OS optimisé pour l’IoT ou l’edge uniquement. Je ne suis clairement pas ciblé par k3OS.&lt;/p&gt;
&lt;p&gt;Ça ne m’a pas vraiment donné envie de regarder plus en détails la partie k3OS operator, qui permet de gérer les mises à jours de l’OS depuis Kube.&lt;/p&gt;
&lt;p&gt;La documentation sur le sujet est disponible ici et ça a l’air d’avoir beaucoup bougé entre la v0.9, la v0.10 et la v0.11, puisqu’il y a des exceptions dans tous les sens&amp;hellip;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/rancher/k3os#upgrade-and-maintenance" target="_blank" rel="noopener"
&gt;github.com/rancher/k3os#upgrade-and-maintenance&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bref&amp;hellip; il est temps que je m’installe un bête OS généraliste&amp;hellip;&lt;/p&gt;</description></item><item><title>Kubernetes avec RancherOS et RKE – partie 2</title><link>https://blog.zwindler.fr/2020/11/30/kubernetes-avec-rancheros-et-rke-partie-2/</link><pubDate>Mon, 30 Nov 2020 07:45:00 +0000</pubDate><guid>https://blog.zwindler.fr/2020/11/30/kubernetes-avec-rancheros-et-rke-partie-2/</guid><description>&lt;img src="https://blog.zwindler.fr/2020/11/rke.webp" alt="Featured image of post Kubernetes avec RancherOS et RKE – partie 2" /&gt;&lt;h2 id="déployer-kubernetes-avec-rke"&gt;Déployer Kubernetes avec RKE
&lt;/h2&gt;&lt;p&gt;Il y a quelques semaines, je vous ai présenté un petit projet que j’avais commencé pour le fun: déployer Kubernetes à l’aide de deux composants de Rancher : &lt;strong&gt;RancherOS&lt;/strong&gt; et &lt;strong&gt;RKE&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2020/10/26/kubernetes-avec-rancheros-et-rke-partie-1/" &gt;Kubernetes avec RancherOS et RKE - partie 1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mais-cest-quoi-rke-"&gt;Mais c’est quoi RKE ?
&lt;/h2&gt;&lt;p&gt;Rancher est une boite pléthorique de solutions pour le monde des containers. Parmi toutes les solutions qu’ils proposent, on a Rancher, k3s, k3os, k3d, Longhorn (pour le stockage), et donc : RancherOS et RKE.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;RKE is a CNCF-certified Kubernetes distribution that runs entirely within Docker containers.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;RKE est donc une manière d’installer mais surtout de gérer de manière simple Kubernetes.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;It solves the common frustration of installation complexity with Kubernetes by removing most host dependencies and presenting a stable path for deployment, upgrades, and rollbacks.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Car si déployer Kubernetes commence à devenir relativement trivial (on peut installer Kubernetes avec microk8s ou minikube sur son portable en quasiment une ligne de commande, Kubeadm est GA,&amp;hellip;), ce n’est pas toujours le cas des mises à jour de vos clusters en prod, que ce soit pour l’OS lui-même, ou bien les composants de Kube. C’est le fameux day2 operation &lt;a class="link" href="https://blog.zwindler.fr/2020/07/29/au-secours-le-metier-dops-va-disparaitre/" &gt;dont je vous ai déjà parlé&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="rke-pour-nous-sauver"&gt;RKE pour nous sauver
&lt;/h2&gt;&lt;p&gt;RKE a donc vocation à nous simplifier la vie, en nous proposant une méthode (plus) simple pour gérer le cycle de vie de nos clusters : un binaire qui manipulera tous les composants de notre Kubernetes dans des containers.&lt;/p&gt;
&lt;p&gt;L’idée est intéressante (même si pas nouvelle, de nombreuses distributions de Kubernetes containerisent les composants internes), du coup j’ai voulu voir ce que Rancher proposait.&lt;/p&gt;
&lt;p&gt;Et comme je ne veux rien faire comme les autres, je me suis rajouté une difficulté supplémentaire en partant du principe que si Rancher proposait une distrib Linux, j’allais utiliser leur distrib comme base pour les nodes.&lt;/p&gt;
&lt;p&gt;Ainsi, l’OS (et Docker) est géré par RancherOS, et la gestion du cycle de vie de mon cluster Kubernetes est gérée par RKE.&lt;/p&gt;
&lt;h2 id="disclaimer"&gt;Disclaimer
&lt;/h2&gt;&lt;p&gt;Qu’on se mette d’accord tout de suite. Je ne vous conseille pas du tout de faire la même chose. J’étais simplement curieux de voir si ces 2 solutions proposées par Rancher se mariaient bien ensemble.&lt;/p&gt;
&lt;p&gt;Et en fait, j’ai d’ailleurs été assez critique envers RancherOS dans le post précédent&amp;hellip; J’ai même découvert grâce à un des lecteurs que RancherOS allait tout simplement être abandonné dans les mois qui viennent&amp;hellip;&lt;/p&gt;
&lt;p&gt;A priori ce n’est pas le cas de RKE, mais on peut tout de même rester prudent ;-).&lt;/p&gt;
&lt;h2 id="rke-cest-quand-même-pas-mal"&gt;RKE, c’est quand même pas mal
&lt;/h2&gt;&lt;p&gt;Heureusement, cette partie s’est globalement mieux passée.&lt;/p&gt;
&lt;p&gt;De base, j’ai tout de suite remarqué qu’il n’y avait pas de documentation officielle pour installer RKE sur des machines RancherOS. J’ai trouvé ça un peu étonnant (et même carrément inquiétant) mais vous allez voir au final que ça fonctionne.&lt;/p&gt;
&lt;p&gt;Le code source de RKE est disponible sur Github à l’adresse suivante : &lt;a class="link" href="https://github.com/rancher/rke" target="_blank" rel="noopener"
&gt;github.com/rancher/rke&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Comme je le disais plus haut, RKE est simplement un binaire (à l’instar de kubeadm), écrit en go.&lt;/p&gt;
&lt;p&gt;On va donc, dans la majorité des cas, simplement le télécharger avec un bête cURL ou wget sur un de nos serveurs RancherOS (ou autre, du coup), à partir de la page des &lt;a class="link" href="https://github.com/rancher/rke/releases/tag/v1.2.3" target="_blank" rel="noopener"
&gt;releases dans Github&lt;/a&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;wget https://github.com/rancher/rke/releases/download/v1.2.3/rke_linux-amd64
mv rke_linux-amd64 rke
chmod +x rke
./rke --version
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;La dernière commande devrait vous renvoyer « rke version v1.2.3 » (ou celle que vous aurez installé).&lt;/p&gt;
&lt;p&gt;Pour pouvoir s’installer sur tous les nœuds de votre cluster, vous vous doutez bien qu’il va falloir avoir un moyen de vous identifier sur ces nœuds en devenir.&lt;/p&gt;
&lt;p&gt;J’ai donc généré une clé SSH via OpenSSL sur ma machine locale, et j’ai ajouté cette clé dans celles autorisées pour l’utilisateur &lt;strong&gt;rancher&lt;/strong&gt; sur tous les membres du futur cluster.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;openssl genrsa -out rancher.private.pem 2048
openssl rsa -in rancher.private.pem -outform PEM -pubout -out rancher.public.pem
ls -l
total 8
-rw------- 1 toto toto 1679 Aug 12 14:56 rancher.private.pem
-rw-r--r-- 1 toto toto 451 Aug 12 15:00 rancher.public.pem
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="configuration-du-cluster"&gt;Configuration du cluster
&lt;/h2&gt;&lt;p&gt;A partir de là, vous allez pouvoir commencer à décrire à RKE ce que vous souhaitez qu’il fasse.&lt;/p&gt;
&lt;p&gt;Dans mon cas, j’avais juste sous la main qu’une seule machine RancherOS. J’ai donc déployé le « cluster » le plus trivial qui soit, un cluster à une seule machine avec tout dessus.&lt;/p&gt;
&lt;p&gt;Rancher donne plusieurs exemples de configuration et dans mon cas j’ai utilisé celui-ci : &lt;a class="link" href="https://rancher.com/docs/rke/latest/en/example-yamls/#minimal-cluster-yml-example" target="_blank" rel="noopener"
&gt;rancher.com/docs/rke/latest/en/example-yamls/#minimal-cluster-yml-example&lt;/a&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;gt; cluster.yml &amp;lt;&amp;lt; EOF
nodes:
- address: 192.168.1.14
user: rancher
role:
- controlplane
- etcd
- worker
ssh_key_path: /home/toto/rancher.private.pem
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On voit donc que la configuration est assez simple et claire à comprendre. On liste nos nodes ainsi que leurs rôles dans ce cluster (ici controlplane, etcd, ET worker) et c’est tout.&lt;/p&gt;
&lt;p&gt;Vous pouvez également générer un fichier de configuration via la ligne de commande suivante, qui vous posera plein de questions en lignes de commandes (TUI)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;./rke config --name cluster-new.yml
[+] Cluster Level SSH Private Key Path [~/.ssh/id_rsa]: /home/toto/rancher.private.pem
[+] Number of Hosts [1]:
[+] SSH Address of host (1) [none]: 192.168.1.14
[+] SSH Port of host (1) [22]:
[+] SSH Private Key Path of host (192.168.1.14) [none]: /home/toto/rancher.private.pem
[+] SSH User of host (192.168.10.214) [ubuntu]: rancher
[...]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Maintenant qu’on a configuré notre cluster.yml (notre fichier de description du cluster) on le « bootstrape » avec un simple &lt;strong&gt;rke up&lt;/strong&gt; :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;./rke up
INFO[0000] Running RKE version: v1.2.3
INFO[0000] Initiating Kubernetes cluster
INFO[0000] [dialer] Setup tunnel for host [192.168.1.14]
INFO[0000] Checking if container [cluster-state-deployer] is running on host [192.168.1.14], try #1
[...]
NFO[0068] [ingress] Setting up nginx ingress controller
INFO[0068] [addons] Saving ConfigMap for addon rke-ingress-controller to Kubernetes
INFO[0068] [addons] Successfully saved ConfigMap for addon rke-ingress-controller to Kubernetes
INFO[0068] [addons] Executing deploy job rke-ingress-controller
INFO[0094] [ingress] ingress controller nginx deployed successfully
INFO[0094] [addons] Setting up user addons
INFO[0094] [addons] no user addons defined
INFO[0094] Finished building Kubernetes cluster successfully
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A la fin du processus, vous devriez avoir un cluster Kubernetes « up and running » ainsi qu’un fichier &lt;strong&gt;cluster.rkestate&lt;/strong&gt; ainsi qu’un fichier &lt;strong&gt;kube_config_cluster.yml&lt;/strong&gt; dans le répertoire courant.&lt;/p&gt;
&lt;p&gt;C’est ce dernier fichier qu’il faut utiliser pour se connecter à votre cluster en kubectl&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;kubectl --kubeconfig kube_config_cluster.yml get nodes
NAME STATUS ROLES AGE VERSION
192.168.1.14 Ready controlplane,etcd,worker 108d v1.19.4
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="final-thoughts"&gt;Final thoughts
&lt;/h2&gt;&lt;p&gt;Si mon avis était très très mitigé sur RancherOS, je suis beaucoup plus satisfait par l’expérience (courte) que j’ai eue avec RKE.&lt;/p&gt;
&lt;p&gt;L’outil ne révolutionne pas vraiment le déploiement de cluster Kubernetes et je ne pense pas que je vais rester sur cette stack RancherOS/RKE (c’était vraiment par curiosité pour le portfolio de Rancher).&lt;/p&gt;
&lt;p&gt;Mais de ce que j’ai pu voir, c’est simple à utiliser, ça fonctionne plutôt bien (même sur RancherOS et c’est dire&amp;hellip;).&lt;/p&gt;
&lt;p&gt;La configuration par fichier YAML est agréable et très complète à la fois, et permet de planifier à l’avance ce qu’on veut faire avec les machines qu’on a. J’ai également testé une mise à jour de Kubernetes 1.18.5 vers 1.19.4 qui est très bien passée.&lt;/p&gt;
&lt;p&gt;De ce que j’ai cru comprendre, il existe des synergies avec d’autres produits de Rancher (notamment Rancher lui-même), donc je pense qu’on peut dire que si vous êtes dans un écosystème Rancher, RKE est probablement un tool plutôt safe pour déployer vos clusters.&lt;/p&gt;
&lt;p&gt;Dans le cas contraire, même si RKE semble une option totalement viable, je pense qu’il vaut tout de même mieux étudier d’autres solutions en parallèle. Elles seront potentiellement plus adaptées à votre contexte (AKS engine si vous louez du IaaS sur Azure, kubeadm ou kubespray pour du « on-prem », &amp;hellip;).&lt;/p&gt;
&lt;p&gt;Have fun :)&lt;/p&gt;</description></item><item><title>Kubernetes avec RancherOS et RKE – partie 1</title><link>https://blog.zwindler.fr/2020/10/26/kubernetes-avec-rancheros-et-rke-partie-1/</link><pubDate>Mon, 26 Oct 2020 07:45:00 +0000</pubDate><guid>https://blog.zwindler.fr/2020/10/26/kubernetes-avec-rancheros-et-rke-partie-1/</guid><description>&lt;img src="https://blog.zwindler.fr/2020/10/rancheros_explained.webp" alt="Featured image of post Kubernetes avec RancherOS et RKE – partie 1" /&gt;&lt;h2 id="rancheros-pour-commencer"&gt;RancherOS pour commencer
&lt;/h2&gt;&lt;p&gt;Pendant l’été, j’ai &lt;em&gt;encore&lt;/em&gt; changé d’infra, avec un passage à un cluster Proxmox VE à 3 nœuds. Je reviendrais la dessus, mais la finalité c’est que j’ai eu (encore) l’envie de m’installer un petit cluster Kubernetes dans mes hyperviseurs.&lt;/p&gt;
&lt;p&gt;Ceux qui me suivent depuis un moment savent que j’en ai déjà déployé des tonnes depuis le temps (&lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=kubernetes" &gt;k3s qui vient également de chez Rancher, mais aussi kubespray, kubeadm, aks, OVH, the hard way de kelsey hightower, &amp;hellip;&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Du coup, plutôt que de gagner du temps et refaire quelque chose que je maîtrise déjà, je suis parti dans l’idée de tester quelque chose d’encore nouveau, deux produits de Rancher dont j’ai entendu parler : RancherOS + RKE !&lt;/p&gt;
&lt;p&gt;L’idée dans cette première partie est de découvrir RancherOS, une des nombreuses solutions pour vos workload containerisés proposées par Rancher.&lt;/p&gt;
&lt;h2 id="mais-cest-quoi-rancheros-"&gt;Mais c’est quoi RancherOS ?
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;RancherOS A lightweight, secure Linux distribution, built from containers to run containers well.
RancherOS est donc un OS minimaliste contenant juste ce qu’il faut pour faire du Docker, configuré à l’aide de cloud-init et dans lequel la plupart des opérations de maintenances sont simplifiées.
Quand je lis ça, je ne peux pas m&amp;rsquo;empêcher de repenser à CoreOS, qui faisait (fait) les mêmes promesses.
N’ayant qu’installé et utilisé pendant peu de temps CoreOS, je ne serai pas capable de faire une comparaison des deux produits entre eux, mais la finalité est vraiment la même.
Un point intéressant (je trouve) dans RancherOS est le fait que tous les services &amp;ldquo;techniques&amp;rdquo; nécessaires pour faire fonctionner correctement vos applications containerisés sont également des containers.
RancherOS is the smallest, easiest way to run Docker in production. Every process in RancherOS is a container managed by Docker. This includes system services such as udev and syslog.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/10/rancheros_explained.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;L’idée ici, c’est que tous ces services systèmes tournent dans un démon Docker séparé (pour plus de sécurité et éviter la suppression accidentelle).&lt;/p&gt;
&lt;h2 id="comment-le-déployer-"&gt;Comment le déployer ?
&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;Ça dépend. Et évidemment, ça dépend, ça dépasse.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rancher a fait le choix (malin) de mettre le paquet pour faciliter le déploiement de leur RancherOS sur le plus de plateformes possibles.&lt;/p&gt;
&lt;p&gt;Ainsi, vous retrouverez des processus de déploiement facilités pour la plupart des clouds providers public, mais aussi des images pour VMware, une image pour Rasberry Pi, Virtual Box ou Docker Machine. Il y a même de quoi booter en PXE pour ceux qui ont encore l’envie de faire ce genre de choses.&lt;/p&gt;
&lt;p&gt;Dans mon cas, la seule solution à ma disposition pour KVM c’est d’&lt;a class="link" href="https://rancher.com/docs/os/v1.x/en/installation/workstation/boot-from-iso/" target="_blank" rel="noopener"
&gt;utiliser l’ISO&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="première-bonne-nouvelle-et-première-déconvenue"&gt;Première bonne nouvelle et première déconvenue
&lt;/h2&gt;&lt;p&gt;LA première bonne nouvelle, c’est qu’il existe un ISO tuné pour Proxmox VE, et ça c’est très cool.&lt;/p&gt;
&lt;p&gt;Donc je DL l’ISO, créé une bête machine virtuelle sur mon cluster, dans lequel l’ISO est monté et roule ma poule ?&lt;/p&gt;
&lt;p&gt;Ouais&amp;hellip; presque !&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You must boot with enough memory which you can refer to &lt;a class="link" href="https://rancher.com/docs/os/v1.x/en/overview/#hardware-requirements" target="_blank" rel="noopener"
&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Un point agaçant avec RancherOS est le &lt;em&gt;minimum requirement&lt;/em&gt; en termes de mémoire. 1.25 Go pour un OS Linux soi-disant minimaliste (passé à 1 Go depuis la 1.5), la pilule a du mal à passer. Ok, je pinaille peut-être un peu, mais 1 Go c’est énorme quand on a prévu de lancer juste quelques petits containers comme des petits nginx ou des petits bouts de code python.&lt;/p&gt;
&lt;p&gt;Il faut dire que Rancher nous a mal habitué avec k3s, leur Kubernetes modifié qui tourne avec quasiment pas de RAM au point de permettre de Kubernetes sur des RPi 1 ou en &lt;em&gt;edge computing&lt;/em&gt;. Et là, avec 2 fois plus de RAM en &lt;em&gt;requirement&lt;/em&gt;, j’ai que le démon Docker, même pas le kube qui va avec&amp;hellip;&lt;/p&gt;
&lt;p&gt;Du coup, le &amp;ldquo;RancherOS is the smallest, easiest way to run Docker in production&amp;rdquo;, bof&amp;hellip;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&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;Déployer en 5 minutes un cluster Kubernetes sur ARM avec k3s et Ansible&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rancher essaye de se raccrocher aux branches en vous linkant une &lt;a class="link" href="https://rancher.com/docs/os/v1.x/en/installation/custom-builds/custom-rancheros-iso/#reduce-memory-requirements" target="_blank" rel="noopener"
&gt;doc permettant de construire soi-même une image custom nécessitant moins de RAM&lt;/a&gt;, mais bon&amp;hellip; Le mal est fait, ils m’ont pas motivé à tester&amp;hellip;&lt;/p&gt;
&lt;h2 id="déployer-rancheros-sur-proxmox-ve"&gt;Déployer RancherOS sur Proxmox VE
&lt;/h2&gt;&lt;p&gt;Ok, assez discuté, maintenant on peut rentrer dans le vif du sujet. Sur notre hyperviseur préféré, on récupère l’ISO.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd /var/lib/vz/template/iso
wget https://releases.rancher.com/os/latest/proxmoxve/rancheros.iso
--2020-08-10 15:00:26-- https://releases.rancher.com/os/latest/proxmoxve/rancheros.iso
Resolving releases.rancher.com (releases.rancher.com)... 104.26.12.240, 172.67.69.133, 104.26.13.240, ...
Connecting to releases.rancher.com (releases.rancher.com)|104.26.12.240|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 160432128 (153M) [application/x-iso9660-image]
Saving to: ‘rancheros.iso’
rancheros.iso 100%[===================&amp;gt;] 153.00M 42.3MB/s in 3.7s
2020-08-10 15:00:36 (40.9 MB/s) - ‘rancheros.iso’ saved [160432128/160432128]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;La procédure d’installation officielle est &lt;a class="link" href="https://rancher.com/docs/os/v1.x/en/installation/server/install-to-disk/" target="_blank" rel="noopener"
&gt;disponible ici&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Grosso modo, on boot la VM, qui va configurer le serveur au minimum et permettre de se connecter avec l’utilisateur rancher&lt;code&gt; sans mot de passe. L’idée est d’utiliser cet utilisateur pour finaliser l’installation avec ros install&lt;/code&gt; une fois la VM configurée.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The ros install` command orchestrates the installation from the rancher/os container. You will need to have already created a cloud-config file and found the target disk.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;STOOOOOP&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Si vous partez bille en tête comme moi et faites un ros install` sans lire la phrase en entier, vous vous retrouverez avec une VM sur laquelle vous ne pourrez pas vous loguer (voire sans réseau si vous n’avez pas de DHCP). C’est con.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The easiest way to log in is to pass a cloud-config.yml file containing your public SSH keys.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="cloud-config"&gt;Cloud config
&lt;/h2&gt;&lt;p&gt;Ok, on va éviter de tous faire la même erreur. Voici maintenant le fameux prérequis, la documentation officielle qui parle de &lt;a class="link" href="https://rancher.com/docs/os/v1.x/en/configuration/#cloud-config" target="_blank" rel="noopener"
&gt;configuration/#cloud-config&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Si vous avez un doute sur certains paramètres, vous pouvez toujours utiliser la commande ros config` qui permet de récupérer les valeurs par défaut puis les setter.&lt;/p&gt;
&lt;p&gt;On finalisera le tout en fusionnant la config actuelle avec un fichier YAML, ou alors on exportera la conf actuelle dans un autre fichier YAML.&lt;/p&gt;
&lt;p&gt;Dans le cas d’un PoC, la plupart des valeurs qui vont nous intéresser sont simplement ce qui permet de setter l’IP et de configurer notre clé SSH pour pouvoir se connecter.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo ros config get rancher.network
dhcp_timeout: 0
dns:
nameservers: []
search: []
http_proxy: &amp;#34;&amp;#34;
https_proxy: &amp;#34;&amp;#34;
interfaces: {}
modem_networks: {}
no_proxy: &amp;#34;&amp;#34;
post_cmds: []
pre_cmds: []
wifi_networks: {}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Donc là, de base, bah ya rien.&lt;/p&gt;
&lt;p&gt;Pourtant, si vous allez voir le fichier /var/lib/rancher/conf/cloud-config.yml, vous remarquerez qu’il y a pleeeeein de choses, plus ou moins utiles.&lt;/p&gt;
&lt;p&gt;La page de doc qui nous intéressera donc dans ce cas est &lt;a class="link" href="https://rancher.com/docs/os/v1.x/en/networking/" target="_blank" rel="noopener"
&gt;networking&lt;/a&gt;. Voici un exemple de commandes pour configurer une IP fixe (à remplacer par des valeurs qui ont du sens dans votre réseau, of course).&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo ros config set rancher.network.interfaces.eth0.address 192.168.1.10/24
sudo ros config set rancher.network.interfaces.eth0.gateway 192.168.1.1
sudo ros config set rancher.network.interfaces.eth0.mtu 1500
sudo ros config set rancher.network.interfaces.eth0.dhcp false
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A partir de ce moment là, vous avez accès au réseau depuis votre machine RancherOS, mais les modifications ne seront pas permanentes. On va donc exporter tout ça.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo ros config export
rancher:
environment:
EXTRA_CMDLINE: /init
network:
interfaces:
eth0:
address: 192.168.1.10/24
dhcp: false
gateway: 192.168.1.10
mtu: 1500
ssh_authorized_keys: []
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Bon, et là vous voyez qu’il nous manque toujours la clé SSH.&lt;/p&gt;
&lt;h2 id="bonus-clavier-qwerty"&gt;Bonus clavier qwerty
&lt;/h2&gt;&lt;p&gt;Vous connaissez la différence entre un admin systèmes français débutant et un admin système français senior ?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you call yourself a sysadmin and don’t know by heart the qwerty layout on an azerty keyboard, I just assume you are a junior.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;(Pour ceux qui n’ont pas la blague, allez voir ce tweet de _oshell qui a bien backfired (lien mort) dans sa face)&lt;/p&gt;
&lt;p&gt;Le senior, a force de bouffer des consoles à la con qui gèrent mal les différents layouts de claviers (parce que &amp;ldquo;hé, on s’en fout des gens qui ont pas de qwerty, on vient de la Silicon valley&amp;rdquo;), il connaît le qwerty par cœur.&lt;/p&gt;
&lt;p&gt;Et ben là encore, ça n’a pas loupé. La console NoVNC de mon PVE, qui en plus n’avait le partage de presse-papier qui ne marchait pas.&lt;/p&gt;
&lt;p&gt;Je veux bien être à l’aise en &amp;ldquo;blind qwerty sur azerty&amp;rdquo;, mais faut pas déconner, je suis pas senior au point d’être capable de copier une clé publique dans un YAML #trollface.&lt;/p&gt;
&lt;p&gt;Donc pour ceux qui ne connaissent pas l’astuce, il est possible d’affecter temporairement un terminal série à votre VM de la façon suivante (voir &lt;a class="link" href="https://pve.proxmox.com/wiki/Serial_Terminal" target="_blank" rel="noopener"
&gt;doc Proxmox VE&lt;/a&gt;)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# qm set 100 -serial0 socket
update VM 100: -serial0 socket
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A partir de là, vous devriez pouvoir accéder à un nouveau type de console dans Proxmox, qui devrait à la fois résoudre le problème de clavier qwerty ET le problème de presse-papier.&lt;/p&gt;
&lt;h2 id="cloud-config-suite"&gt;Cloud-config, suite
&lt;/h2&gt;&lt;p&gt;On récupère ce qu’on vient d’exporter et on ajoute notre clé comme nous le demande Rancher dans sa doc. Et avant de lancer l’install, on vérifie que notre cloud-config est valide&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo ros config validate -i cloud-config.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Si la commande ne renvoie rien, c’est que c’est OK (pas super explicite mais bon why not). On passe donc à l’install :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo ros install -c cloud-config.yml -d /dev/sda
INFO[0000] No install type specified...defaulting to generic
Installing from rancher/os:v0.5.0
Continue [y/N]:
[...]
Continue with reboot [y/N]: y
INFO[0013] Rebooting
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A partir de là, on peut (et on doit) se connecter en SSH sur la machine RancherOS (l’accès console n’est plus possible)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ssh -J proxmoxve rancher@192.168.1.10
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et si tout s’est bien passé, vous devriez pouvoir vous connecter !&lt;/p&gt;
&lt;h2 id="et-maintenant-que-vais-je-fai-reuh-"&gt;Et maintenant, que vais-je fai-reuh ?
&lt;/h2&gt;&lt;p&gt;Ben déjà on peut regarder ce que RancherOS a activé comme &amp;ldquo;services&amp;rdquo; sur notre install Proxmox VE.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;sudo ros service list
disabled amazon-ecs-agent
disabled container-cron
disabled open-iscsi
disabled zfs
disabled kernel-extras
disabled kernel-headers
disabled kernel-headers-system-docker
disabled open-vm-tools
disabled hyperv-vm-tools
enabled qemu-guest-agent
disabled rancher-server
disabled rancher-server-stable
disabled amazon-metadata
disabled volume-cifs
disabled volume-efs
disabled volume-nfs
disabled modem-manager
disabled waagent
disabled virtualbox-tools
disabled pingan-amc
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Globalement, pas grand chose. La seule chose activée est le qemu-guest-agent, ce qui est utile puisque nous avons une effectivement une VM QEMU dans ce cas précis.
Quant à vos containers Docker, vous pouvez vérifier qu’ils sont bien séparés des containers docker servant au fonctionnement de RancherOS avec les commandes suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les containers &amp;ldquo;systèmes&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[rancher@rancher ~]$ sudo system-docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1e059e78c17e rancher/os-docker:19.03.11 &amp;#34;ros user-docker&amp;#34; 12 minutes ago Up 12 minutes docker
ba43a0648227 rancher/os-qemuguestagent:v2.8.1-2 &amp;#34;/usr/bin/ros entr...&amp;#34; 12 minutes ago Restarting (1) 34 seconds ago qemu-guest-agent
d9ad607221fa rancher/os-console:v1.5.6 &amp;#34;/usr/bin/ros entr...&amp;#34; 12 minutes ago Up 12 minutes console
ad0197c79ff2 rancher/os-base:v1.5.6 &amp;#34;/usr/bin/ros entr...&amp;#34; 12 minutes ago Up 12 minutes ntp
538ccf5eb624 rancher/os-base:v1.5.6 &amp;#34;/usr/bin/ros entr...&amp;#34; 12 minutes ago Up 12 minutes network
f389c6b0b40e rancher/os-base:v1.5.6 &amp;#34;/usr/bin/ros entr...&amp;#34; 12 minutes ago Up 12 minutes udev
b51deb379bf2 rancher/container-crontab:v0.4.0 &amp;#34;container-crontab&amp;#34; 12 minutes ago Up 12 minutes system-cron
59441adcc016 rancher/os-syslog:v1.5.6 &amp;#34;/usr/bin/entrypoi...&amp;#34; 13 minutes ago Up 12 minutes syslog
120df7cc2492 rancher/os-acpid:v1.5.6 &amp;#34;/usr/bin/ros entr...&amp;#34; 13 minutes ago Up 12 minutes acpid
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Vos containers :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[rancher@rancher ~]$ docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Les containers &amp;ldquo;systèmes&amp;rdquo; sont bien distincts des containers docker &amp;ldquo;utilisateurs&amp;rdquo;. La promesse d’isolation Docker infra vs Docker appli est bien tenue.&lt;/p&gt;
&lt;h2 id="mon-avis"&gt;Mon avis
&lt;/h2&gt;&lt;p&gt;A voir à l’usage, mais je ne suis pas hyper convaincu.&lt;/p&gt;
&lt;p&gt;D’abord, en termes d’OS minimalistes, on a quand même vu mieux. Et d’ailleurs, &lt;a class="link" href="https://rancher.com/docs/os/v1.x/en/installation/custom-builds/custom-rancheros-iso/#reduce-memory-requirements" target="_blank" rel="noopener"
&gt;les gens chez Rancher le savent puisqu’ils se sentent obligés de s’en justifier&lt;/a&gt;&amp;hellip;&lt;/p&gt;
&lt;p&gt;Plus grave, l’UX est quand même super bof. J’ai l’habitude d’installer des softs mais je me suis quand même pris la tête avec le cloud-config assez moyennement documenté, et en plus, à faire DANS une console (et la galère QWERTY/AZERTY associée).&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Et c’est pas fini&amp;rdquo;, comme dis la pub.&lt;/p&gt;
&lt;p&gt;Je vous l’ai dis, mon objectif est d’avoir un cluster Kubernetes installé par RKE. Or, il n’est pas trivial d’utiliser RancherOS comme OS pour hoster un Kubernetes déployé avec RKE. Vous verrez dans la partie 2 que ça n’a pas été une partie de plaisir&amp;hellip;&lt;/p&gt;
&lt;p&gt;Un comble pour 2 produits de la même boite censé vous simplifier l’administration de Docker/Kube&amp;hellip;&lt;/p&gt;
&lt;p&gt;Et plus grave encore, c’est que j’ai du mal à voir pour qui ce genre de distribs apporte de la valeur. C’est d’ailleurs pour cette même raison pour laquelle je n’avais pas poussé l’expérimentation très loin avec CoreOS. En tant qu’admin, je suis forcément frustré par un OS où je n’ai pas/peu la main.&lt;/p&gt;
&lt;p&gt;J’aime bien ce qu’ils font chez Rancher. Mais je ne sais pas répondre à la question Pourquoi RancherOS ?
On pourrait se dire que pour une équipe de développeurs en mode startup qui doit sortir son MVP en peu de temps, ça peut être cool.&lt;/p&gt;
&lt;p&gt;Mais même là, j’ai des doutes.&lt;/p&gt;
&lt;p&gt;Si ces gens là veulent VRAIMENT s’abstraire d’Ops (voir mon avis sur la question dans &lt;a class="link" href="https://blog.zwindler.fr/2020/07/29/au-secours-le-metier-dops-va-disparaitre/" &gt;Au secours, le métier d’Ops va disparaître !&lt;/a&gt;), ils partiront sur d’autres types de technos (Kubernetes managé, Serverless, No code ?).&lt;/p&gt;
&lt;p&gt;Si vous voyez une raison que j’aurais loupé, n’hésitez pas à venir en parler en commentaire ou via les RS, car là je vois pas&amp;hellip;&lt;/p&gt;
&lt;p&gt;En attendant la partie sur RKE, have fun :)&lt;/p&gt;</description></item><item><title>Déployer en 5 minutes un cluster Kubernetes sur ARM avec k3s et Ansible</title><link>https://blog.zwindler.fr/2019/03/21/deployer-en-5-minutes-un-cluster-kubernetes-sur-arm-avec-k3s-et-ansible/</link><pubDate>Thu, 21 Mar 2019 13:00:14 +0000</pubDate><guid>https://blog.zwindler.fr/2019/03/21/deployer-en-5-minutes-un-cluster-kubernetes-sur-arm-avec-k3s-et-ansible/</guid><description>&lt;img src="https://blog.zwindler.fr/2019/03/k3s_scaleway.webp" alt="Featured image of post Déployer en 5 minutes un cluster Kubernetes sur ARM avec k3s et Ansible" /&gt;&lt;h2 id="cest-quoi-k3s-"&gt;C’est quoi k3s ?
&lt;/h2&gt;&lt;p&gt;Il y a quelques jours, vous avez peut être vu passer dans vos fil d’actus &lt;strong&gt;k3s&lt;/strong&gt;, ce nouveau projet &lt;a class="link" href="https://k3s.io/" target="_blank" rel="noopener"
&gt;open sourcé par Rancher&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Lightweight Kubernetes. 5 less than k8s.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Il s’agit d’une version réduite de Kubernetes, sans pour autant être minimaliste, qui nous vante la possibilité de monter des clusters Kubernetes avec très peu de ressources nécessaires. On parle de moins de 512 Mo de RAM pour un master, encore moins pour un worker, tout dans un binaire de 40 Mo, support de &lt;strong&gt;armhf&lt;/strong&gt;, et &lt;strong&gt;arm64&lt;/strong&gt;, &amp;hellip;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Great for Edge, IoT, CI, ARM, and situations where a PhD in k8s clusterology is infeasible&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Cerise sur le gâteau, comme tout est regroupé dans un seul et même binaire, l’installation est ultra simple et se résume en :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Récupérer un binaire&lt;/li&gt;
&lt;li&gt;Lancer le binaire sur le master&lt;/li&gt;
&lt;li&gt;Lancer le binaire sur le worker avec l’URL du master et un token&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mais-cest-génial-"&gt;Mais c’est génial !
&lt;/h2&gt;&lt;p&gt;Nécessairement, pour arriver à ça, il a fallut faire quelques concessions mais pour l’instant je ne les trouves pas très gênantes. Parmi les modifications notables, on retrouve :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Suppression des features alpha, legacy et non standard&lt;/li&gt;
&lt;li&gt;Suppression de tous les add-on des cloud providers&lt;/li&gt;
&lt;li&gt;Remplacement de etcd3 par sqlite3 (même si etcd3 peut être toujours être utilisé)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="jen-veux-un-"&gt;J’en veux un !
&lt;/h2&gt;&lt;p&gt;Autant dire que pas mal de bidouilleurs du dimanche se sont jetés dessus.&lt;/p&gt;
&lt;p&gt;Le premier exemple qui vient à l’esprit est de monter un cluster Kubernetes sur Raspberry pi. Nombre de personnes ont déjà installé Docker sur un raspberry qui traînait dans un tiroir (moi compris), et le nombre d’articles avec Docker Swarm sur plusieurs Raspberry pullule sur le web.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2016/09/05/geekerie-du-week-end-installer-docker-sur-un-raspberry-pi/" &gt;Geekerie du week end : installer Docker sur un Raspberry Pi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tout ça c’est très bien mais jusqu’à présent, il était difficile d’installer Kubernetes sur ce genre de machines, assez limités en CPU/RAM. Du coup, vous vous en doutez, je ne suis pas le premier à parler de ça.&lt;/p&gt;
&lt;p&gt;Vincent RABAT aka &lt;strong&gt;itwars&lt;/strong&gt; (que vous connaissez sûrement si vous écumez les meetups sur Bordeaux) m’a coiffé au poteau en &lt;a class="link" href="https://github.com/itwars/k3s-ansible" target="_blank" rel="noopener"
&gt;releasant un playbook Ansible pour installer k3s&lt;/a&gt;, et notamment sur un Raspberry Pi (mais pas que).&lt;/p&gt;
&lt;p&gt;A charge de revanche, Vincent ;-).&lt;/p&gt;
&lt;h2 id="un-peu-différent"&gt;Un peu différent
&lt;/h2&gt;&lt;p&gt;Du coup, pour me démarquer, je vous propose aujourd’hui quelque chose d’un peu différent. N’ayant pas suffisament de raspberry sous la main, j’ai voulu faire un PoC de k3s en me basant sur des machines ARM créées chez un cloud provider.&lt;/p&gt;
&lt;p&gt;L’idée étant que si ça marche sur des machines de faible puissance en ARM, ça marchera partout (x64, raspberry, etc).&lt;/p&gt;
&lt;p&gt;Ça fait plusieurs fois que j’utilise &lt;a class="link" href="https://www.scaleway.com/" target="_blank" rel="noopener"
&gt;Scaleway&lt;/a&gt; comme hébergeur pour des petits projets, et en particulier pour déployer rapidement des machines car leur API est pas trop mal fichues et surtout ils disposent de modules Ansible très bien fait, notamment avec la feature « inventaire dynamique », ce que beaucoup ne font pas.&lt;/p&gt;
&lt;p&gt;Pour ceux que ça intéresse, mon talk sur BDX.IO était basé sur le même principe :&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://www.youtube.com/watch?v=WPRE1_f0pyg" target="_blank" rel="noopener"
&gt;https://www.youtube.com/watch?v=WPRE1_f0pyg&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Dans ce tuto, je vais donc vous montrer comment en quelque commande, monter un cluster k3s sur des machines ARM créées à la volée chez Scaleway, le tout avec Ansible (vous l’aurez compris).&lt;/p&gt;
&lt;h2 id="quelques-prérequis"&gt;Quelques prérequis
&lt;/h2&gt;&lt;p&gt;La première chose à faire est de cloner sur votre machine les playbooks Ansible que j’ai mis à disposition sur Github à l’adresse suivante : &lt;a class="link" href="https://github.com/zwindler/ansible-scaleway-k3s" target="_blank" rel="noopener"
&gt;github.com/zwindler/ansible-scaleway-k3s&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pour réaliser ce tuto, je pars du principe que vous avec déjà un compte sur Scaleway, que vous avez un clé SSH qu’on déposera à la racine du projet, appelée &lt;strong&gt;admin.pub&lt;/strong&gt; (c’est original).&lt;/p&gt;
&lt;p&gt;Il faudra également installer les package &lt;strong&gt;pipy&lt;/strong&gt; suivant sur la machine locale :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;pip install jinja2 PyYAML paramiko cryptography packaging
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ensuite, vous devrez installer Ansible depuis les sources (&amp;gt;= 2.8devel) et éventuellement le binaire &lt;strong&gt;jq&lt;/strong&gt; pour requêter dans les output JSON (ça c’est juste pour se faciliter la vie)&lt;/p&gt;
&lt;p&gt;Dans la console Scaleway, vous devrez créer un token sur le site de Scaleway pour les accès distants et le stocker dans un fichier &lt;strong&gt;scaleway_token&lt;/strong&gt;&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;Et enfin sourcer le fichier pour avoir la variable dans votre environnement&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;source scaleway_token
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="ok-on-est-prêt"&gt;OK, on est prêt
&lt;/h2&gt;&lt;p&gt;La première étape de cette procédure va être de générer des instances ARM pour héberger le master et le worker Kubernetes. Pour ça, le playbook Ansible &lt;strong&gt;create_arm_vms.yaml&lt;/strong&gt; va :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;récupérer l’ID d’organisation du compte Scaleway&lt;/li&gt;
&lt;li&gt;récupérer un ID d’image compatible debian Stretch&lt;/li&gt;
&lt;li&gt;ajouter si nécessaire la clé SSH de l’admin&lt;/li&gt;
&lt;li&gt;créer autant de machines que nécessaire&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On lance la commande suivante :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook create_arm_vms_scaleway.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ET C’EST TOUT !&lt;/p&gt;
&lt;p&gt;Normalement en 2 minutes, vous devriez avoir 2 instances ARM sur le datacenter de Paris (par1).&lt;/p&gt;
&lt;p&gt;A noter, il se peut qu’elles ne soient pas accessibles tout de suite en SSH. J’adapterai peut être le playbook pour qu’il ne rende pas la main tant que les machines ne sont pas accessibles, et qu’on enchaîne automatiquement sur l’étape suivante (TODO).&lt;/p&gt;
&lt;h2 id="inventaire-automatique"&gt;Inventaire automatique
&lt;/h2&gt;&lt;p&gt;Je le disais plus haut, la grande force de Scaleway avec Ansible est le fait qu’ils ont fait l’effort de coder &lt;strong&gt;l’inventaire dynamique&lt;/strong&gt;. Vous n’avez pas besoin de renseigner à la main les IPs des instances que vous venez de créer dans un fichier ansible/hosts. Grâce à l’API, la découverte se fait automatiquement. On va dont pouvoir enchaîner sur la suite directement.&lt;/p&gt;
&lt;p&gt;De base, voici le contenu de mon fichier d’inventaire (inventory.yml) :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;plugin: scaleway
regions:
- par1
tags:
- k3smaster
- k3sworker
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Maintenant que les machines sont UP, on peut vérifier ce que nous renvoie Scaleway avec la commande &lt;strong&gt;ansible-inventory&lt;/strong&gt;. Ça devrait ressembler à ça :&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;arm64&amp;#34;,
&amp;#34;commercial_type&amp;#34;: &amp;#34;ARM64-2GB&amp;#34;,
&amp;#34;hostname&amp;#34;: &amp;#34;k3smaster1&amp;#34;,
[...]
&amp;#34;k3sworker&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;h2 id="ssh-fingerprints"&gt;SSH fingerprints
&lt;/h2&gt;&lt;p&gt;Une étape qui est souvent fastidieuse, surtout quand on ajoute beaucoup de serveur, est l’étape de vérification de l&amp;rsquo;empreinte SSH des nouveaux serveurs lors de la première connexion. Cette authentification est très importante et il &lt;b&gt;n’est pas du tout conseillé&lt;/b&gt; (comme je le vois parfois) d’ajouter l’option &lt;strong&gt;ANSIBLE_HOST_KEY_CHECKING=False&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ici, je vous propose de scanner automatiquement &lt;em&gt;la première fois&lt;/em&gt; l&amp;rsquo;empreinte, et l’ajouter dans votre known_hosts. Ainsi, si l&amp;rsquo;empreinte change en cours de route, vous serez prévenus. Cependant, ce n’est à utiliser que dans le cas de notre bidouille, pas en production.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-inventory --list -i inventory.yml | jq -r &amp;#39;.k3smaster.hosts | .[]&amp;#39; | xargs ssh-keyscan &amp;gt;&amp;gt; ~/.ssh/known_hosts
ansible-inventory --list -i inventory.yml | jq -r &amp;#39;.k3sworker.hosts | .[]&amp;#39; | xargs ssh-keyscan &amp;gt;&amp;gt; ~/.ssh/known_hosts
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Vous pouvez maintenant ajouter votre clé SSH dans le ssh-agent, et vérifier qu’on vous pouvez vous connecter à tous les serveurs via Ansible :&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;h2 id="préparation-du-serveur"&gt;Préparation du serveur
&lt;/h2&gt;&lt;p&gt;C’était facile, non ?&lt;/p&gt;
&lt;p&gt;Et bien la suite l’est encore plus, à l’exception de cette petite subtilité/piège =&amp;gt; Il se trouve que l’image ARM par défaut proposée par Scaleway ne dispose ni de python ni de sudo. Pour faire du Ansible, c’est très très handicapant.&lt;/p&gt;
&lt;p&gt;J’ai donc écris un petit playbook, à n’exécuter la première fois, qui installe les prérequis non présents sur l’image de base (&lt;strong&gt;python&lt;/strong&gt; et &lt;strong&gt;sudo&lt;/strong&gt;)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook -i inventory.yml -u root install_prerequisites_scaleway.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Si vous n’êtes pas sur ce genre de machines, vous n’aurez pas à faire cette étapes.&lt;/p&gt;
&lt;p&gt;Maintenant qu’on a des machines avec python et sudo, on peut installer k3s normalement avec Ansible :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook -i inventory.yml -u root install_k3s_scaleway.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Une fois de plus : ET C’EST TOUT !&lt;/p&gt;
&lt;p&gt;Le cluster est maintenant opérationnel. Les serveurs ont Kubernetes installé et fonctionnel. Le ou les workers ont rejoint le master et font parti d’un même cluster. Un Ingress controller Treafik est créé, on peut jouer dessus directement :-)&lt;/p&gt;
&lt;h2 id="bonus--accéder-au-cluster"&gt;Bonus : accéder au cluster
&lt;/h2&gt;&lt;p&gt;Bon je vous ai un peu feinté.&lt;/p&gt;
&lt;p&gt;Certes, on peut se connecter en SSH sur le master et le piloter avec les commandes &lt;strong&gt;kubectl&lt;/strong&gt; classique (mais il faut rajouter k3s devant car le binaire kubectl est intégré à k3s). Mais c’est quand même plus simple si on peut y accéder à distance, depuis votre machine locale.&lt;/p&gt;
&lt;p&gt;Là encore, j’ai donc fais un petit playbook qui va aspirer la configuration &lt;strong&gt;kubectl&lt;/strong&gt; et la coller dans le fichier &lt;strong&gt;~/.kube/config.k3smaster&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook -i inventory.yml -u root configure_kubeconfig.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A partir de là, vous devriez pouvoir tester votre nouveau cluster depuis votre PC :-)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd
kubectl --kubeconfig=.kube/config.k3smaster get nodes
NAME STATUS ROLES AGE VERSION
k3smaster1 Ready &amp;lt;none&amp;gt; 2d v1.13.3-k3s.6
k3sworker1 Ready &amp;lt;none&amp;gt; 2d v1.13.3-k3s.6
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Enjoy !!!&lt;/p&gt;</description></item></channel></rss>