<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Deployment on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/deployment/</link><description>Recent content in Deployment on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Sun, 29 Mar 2026 18:00:00 +0200</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/deployment/index.xml" rel="self" type="application/rss+xml"/><item><title>101 façons de déployer Kubernetes : 125 solutions, des PRs communautaires et une UI qui s'améliore</title><link>https://blog.zwindler.fr/2026/03/29/101-facons-de-deployer-kubernetes-v3/</link><pubDate>Sun, 29 Mar 2026 18:00:00 +0200</pubDate><guid>https://blog.zwindler.fr/2026/03/29/101-facons-de-deployer-kubernetes-v3/</guid><description>&lt;img src="https://blog.zwindler.fr/2026/03/125-kube.webp" alt="Featured image of post 101 façons de déployer Kubernetes : 125 solutions, des PRs communautaires et une UI qui s'améliore" /&gt;&lt;h2 id="il-bouge-encore"&gt;Il bouge encore
&lt;/h2&gt;&lt;p&gt;Depuis la sortie de &lt;a class="link" href="https://blog.zwindler.fr/2026/02/09/101-facons-de-deployer-kubernetes-nouvelle-ui/" &gt;l&amp;rsquo;interface web du projet&lt;/a&gt; début février, le projet a continué à évoluer. Ajout de solutions manquantes, petites améliorations de l&amp;rsquo;UI, contributions externes, optimisations de performances&amp;hellip; Bref, un bon petit mois bien rempli pour ce gros side project que j&amp;rsquo;aimerais faire grossir.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://zwindler.github.io/101-ways-to-deploy-kubernetes/" target="_blank" rel="noopener"
&gt;101-ways-to-deploy-kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note : si vous n&amp;rsquo;avez pas suivi les épisodes précédents :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2025/11/02/93-facons-de-deployer-kubernetes/" &gt;93 façons de déployer Kubernetes&lt;/a&gt; — le Google Sheet original&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2026/01/04/101-facons-de-deployer-kubernetes-v2/" &gt;101 façons de déployer Kubernetes (v2)&lt;/a&gt; — passage sur GitHub&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2026/02/09/101-facons-de-deployer-kubernetes-nouvelle-ui/" &gt;Une nouvelle UI pour explorer les 118+ solutions&lt;/a&gt; — l&amp;rsquo;appli Astro + Tailwind&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="7-nouvelles-solutions"&gt;7 nouvelles solutions
&lt;/h2&gt;&lt;p&gt;Le catalogue est passé de 118 à &lt;strong&gt;125 solutions&lt;/strong&gt;. Voici les ajouts depuis le dernier article :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Xen Orchestra&lt;/strong&gt; - ajouté pendant un stream de Cuistops =&amp;gt; Déploiement de clusters Kubernetes (MicroK8s) via les &amp;ldquo;recettes&amp;rdquo; de Xen Orchestra, la plateforme de management de Vates. Catégorie ManagementPlatform.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Charmed Kubernetes&lt;/strong&gt; - suite à un commentaire sur LinkedIn, j&amp;rsquo;ai remplacé l&amp;rsquo;entrée &amp;ldquo;Juju&amp;rdquo; par Charmed Kubernetes, qui est le vrai nom du produit Canonical pour déployer Kubernetes via Juju.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;kubeaver&lt;/strong&gt; - découvert en scrollant bluesky sans but =&amp;gt; un installateur Kubernetes offline/online avec une GUI, basé sur Kubespray et Ansible. Certifié CNCF conformance (pour ce que ça vaut&amp;hellip;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;talos-bootstrap&lt;/strong&gt; - script interactif de Cozystack pour bootstrapper des clusters Kubernetes sur Talos OS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;boot-to-talos&lt;/strong&gt; - Outil de Cozystack (encore) qui convertit n&amp;rsquo;importe quel OS existant en Talos Linux, complètement depuis le userspace. Partiellement utilisé par Quentin dans un contexte que je ne peux révéler ;-)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TOPF&lt;/strong&gt; - Talos Orchestrator by PostFinance, un CLI pour gérer des clusters Kubernetes basés sur Talos. Découvert sur le discord de Cuistops&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Talhelper&lt;/strong&gt; - Outil CLI pour créer des clusters Talos en mode GitOps, à partir d&amp;rsquo;un seul fichier YAML déclaratif. Je l&amp;rsquo;avais initialement mis de côté mais à y réfléchir, pourquoi pas le mettre.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On notera qu&amp;rsquo;au même titre que kubeadm et k3s, il y a beaucoup de solutions qui s&amp;rsquo;appuient sur &lt;strong&gt;Talos Linux&lt;/strong&gt;. De mon point de vue, ça valide l&amp;rsquo;OS et ça confirme l&amp;rsquo;adoption croissante de cet OS immutable pour Kubernetes.&lt;/p&gt;
&lt;h2 id="refonte-complète-des-tags"&gt;Refonte complète des tags
&lt;/h2&gt;&lt;p&gt;Un gros chantier a été la &lt;strong&gt;refonte de tous les tags&lt;/strong&gt; du catalogue. Ils étaient incohérents : des noms d&amp;rsquo;outils utilisés comme tags (openshift, rancher&amp;hellip;), des tags redondants (on-premise + self-hosted), des tags manquants ou parfois faux (par ex. &amp;ldquo;lightweight&amp;rdquo; sur des outils qui lancent des VMs).&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai nettoyé les tags de &lt;strong&gt;toutes les catégories&lt;/strong&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Desktop&lt;/strong&gt; : suppression des noms d&amp;rsquo;outils comme tags, ajout de &lt;code&gt;gui&lt;/code&gt; pour Docker Desktop, Orbstack, Podman Desktop, Rancher Desktop&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Selfhosted&lt;/strong&gt; : suppression du tag redondant &lt;code&gt;on-premise&lt;/code&gt; (29 solutions), ajout de tags pertinents (&lt;code&gt;automation&lt;/code&gt;, &lt;code&gt;edge&lt;/code&gt;, &lt;code&gt;lightweight&lt;/code&gt;, &lt;code&gt;bare-metal&lt;/code&gt;&amp;hellip;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ManagementPlatform&lt;/strong&gt; : toutes les solutions ont maintenant 3 tags (&lt;code&gt;multi-cloud&lt;/code&gt;, &lt;code&gt;managed&lt;/code&gt;, &lt;code&gt;gui&lt;/code&gt;, &lt;code&gt;automation&lt;/code&gt;&amp;hellip;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;KubernetesInKubernetes&lt;/strong&gt; : correction de vcluster (&lt;code&gt;virtualization&lt;/code&gt; → &lt;code&gt;lightweight&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="de-nouveaux-filtres-dans-lui"&gt;De nouveaux filtres dans l&amp;rsquo;UI
&lt;/h2&gt;&lt;p&gt;J&amp;rsquo;ai ajouté un &lt;strong&gt;filtre par nombre d&amp;rsquo;étoiles GitHub&lt;/strong&gt; qui n&amp;rsquo;apparaît que quand le filtre &amp;ldquo;Open Source only&amp;rdquo; est activé. Plutôt pratique pour identifier rapidement les projets les plus populaires (&amp;gt; 100, &amp;gt; 1k, &amp;gt; 10k stars).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2026/03/stars-filter.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;occasion aussi de réorganiser la barre de filtres : le sélecteur de statut (Active/Abandoned) est passé en dropdown compact, et le layout général a été retravaillé pour rester lisible même avec plus de filtres.&lt;/p&gt;
&lt;p&gt;Dernier point, lorsque vous faites une recherche dans la barre principale, une variable vient d&amp;rsquo;ajouter à l&amp;rsquo;URL : pratique pour partager des solutions directement avec le lien.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2026/03/search.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="les-contributions-dantoine-caron-slashgear"&gt;Les contributions d&amp;rsquo;Antoine Caron (Slashgear)
&lt;/h2&gt;&lt;p&gt;Un grand merci à &lt;a class="link" href="https://bsky.app/profile/slashgear.dev" target="_blank" rel="noopener"
&gt;Antoine Caron (@slashgear)&lt;/a&gt; qui, au-delà de m&amp;rsquo;avoir aidé sur &lt;a class="link" href="https://blog.zwindler.fr/2026/02/19/optimisation-webperf-avif-precompression/" &gt;les performances&lt;/a&gt; et &lt;a class="link" href="https://blog.zwindler.fr/2026/02/20/securite-headers-http-observatory-hugo/" &gt;la sécurité&lt;/a&gt; de ce blog, a aussi contribué directement au projet 101 ways avec plusieurs PRs !&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hiérarchie des headings&lt;/strong&gt; - les cartes utilisaient des &lt;code&gt;&amp;lt;h3&amp;gt;&lt;/code&gt; sans &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt; dans la page. Antoine a corrigé ça pour une hiérarchie correcte (&lt;code&gt;h1&lt;/code&gt; → &lt;code&gt;h2&lt;/code&gt;), ce qui améliore la navigation pour les lecteurs d&amp;rsquo;écran.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accessibilité du champ de recherche&lt;/strong&gt; - ajout d&amp;rsquo;un vrai &lt;code&gt;&amp;lt;label&amp;gt;&lt;/code&gt; (en &lt;code&gt;sr-only&lt;/code&gt;) et passage du &lt;code&gt;type=&amp;quot;text&amp;quot;&lt;/code&gt; à &lt;code&gt;type=&amp;quot;search&amp;quot;&lt;/code&gt; pour une meilleure sémantique.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip links&lt;/strong&gt; - ajout de liens &amp;ldquo;skip to content&amp;rdquo; pour la navigation au clavier (WCAG 2.1, critère 2.4.1). Trois liens : vers la recherche, les filtres, et le contenu principal.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="amélioration-des-performances"&gt;Amélioration des performances
&lt;/h2&gt;&lt;p&gt;En parlant de performances, le site s&amp;rsquo;est aussi amélioré côté PageSpeed. Voici un avant/après sur Lighthouse mobile :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2026/03/101-avant.avif"
loading="lazy"
alt="Score PageSpeed avant optimisation : 82"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2026/03/101-apr%c3%a8s.avif"
loading="lazy"
alt="Score PageSpeed après optimisation : 99"
&gt;&lt;/p&gt;
&lt;p&gt;De &lt;strong&gt;82 à 99&lt;/strong&gt; en performances mobiles, avec du 100/100 en bonnes pratiques et SEO.&lt;/p&gt;
&lt;p&gt;Ces gains viennent d&amp;rsquo;un ensemble de corrections, notamment la résolution du &lt;strong&gt;clipping des cartes au hover&lt;/strong&gt;, un bug CSS assez vicieux lié à &lt;code&gt;content-visibility: auto&lt;/code&gt; qui impliquait &lt;code&gt;contain: paint&lt;/code&gt; et coupait le haut des cartes quand elles se soulevaient au survol. Antoine avait identifié le problème avec l&amp;rsquo;&lt;code&gt;overflow-hidden&lt;/code&gt;, et Copilot a trouvé la cause racine dans le CSS containment.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2026/03/clipping.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="merci-"&gt;Merci !
&lt;/h2&gt;&lt;p&gt;Un grand merci à tous ceux qui contribuent, que ce soit en me mentionnant les outils manquants, en soumettant des PRs, ou simplement en partageant le projet.&lt;/p&gt;
&lt;p&gt;Merci spécial à &lt;strong&gt;Antoine Caron&lt;/strong&gt; pour ses PRs sur l&amp;rsquo;accessibilité et la CI - c&amp;rsquo;est vraiment chouette de voir quelqu&amp;rsquo;un prendre le temps d&amp;rsquo;améliorer un projet open source qui n&amp;rsquo;est pas le sien. Et c&amp;rsquo;est d&amp;rsquo;autant plus appréciable qu&amp;rsquo;Antoine m&amp;rsquo;avait déjà aidé sur ce blog avec &lt;a class="link" href="https://blog.zwindler.fr/2026/02/19/optimisation-webperf-avif-precompression/" &gt;l&amp;rsquo;optimisation des images en AVIF&lt;/a&gt; et &lt;a class="link" href="https://blog.zwindler.fr/2026/02/20/securite-headers-http-observatory-hugo/" &gt;les security headers HTTP&lt;/a&gt;. 🙏&lt;/p&gt;
&lt;p&gt;Le projet compte maintenant &lt;strong&gt;125 solutions&lt;/strong&gt;. Si vous en connaissez d&amp;rsquo;autres, n&amp;rsquo;hésitez pas à &lt;a class="link" href="https://github.com/zwindler/101-ways-to-deploy-kubernetes/issues" target="_blank" rel="noopener"
&gt;ouvrir une issue&lt;/a&gt; ou une PR (ou juste à me ping, en cas de flemme) !&lt;/p&gt;
&lt;p&gt;👉 &lt;a class="link" href="https://zwindler.github.io/101-ways-to-deploy-kubernetes/" target="_blank" rel="noopener"
&gt;zwindler.github.io/101-ways-to-deploy-kubernetes&lt;/a&gt;&lt;/p&gt;</description></item><item><title>101 façons de déployer Kubernetes : une nouvelle UI pour explorer les 118+ solutions</title><link>https://blog.zwindler.fr/2026/02/09/101-facons-de-deployer-kubernetes-nouvelle-ui/</link><pubDate>Mon, 09 Feb 2026 18:00:00 +0200</pubDate><guid>https://blog.zwindler.fr/2026/02/09/101-facons-de-deployer-kubernetes-nouvelle-ui/</guid><description>&lt;img src="https://blog.zwindler.fr/2026/02/101-kubernetes-ui-screenshot.webp" alt="Featured image of post 101 façons de déployer Kubernetes : une nouvelle UI pour explorer les 118+ solutions" /&gt;&lt;h2 id="de-google-sheet-à-une-vraie-application-web"&gt;De Google Sheet à une vraie application web
&lt;/h2&gt;&lt;p&gt;Vous vous souvenez peut-être de mes précédents articles sur ce projet : d&amp;rsquo;abord un &lt;a class="link" href="https://blog.zwindler.fr/2025/11/02/93-facons-de-deployer-kubernetes/" &gt;simple Google Sheet avec 93 méthodes&lt;/a&gt;, puis un &lt;a class="link" href="https://blog.zwindler.fr/2026/01/04/101-facons-de-deployer-kubernetes-v2/" &gt;dépôt GitHub avec plus de 100 entrées&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Aujourd&amp;rsquo;hui, je peux présenter la dernière itération de ce projet : &lt;strong&gt;une vraie interface web&lt;/strong&gt; pour explorer toutes ces solutions !&lt;/p&gt;
&lt;p&gt;👉 &lt;a class="link" href="https://zwindler.github.io/101-ways-to-deploy-kubernetes/" target="_blank" rel="noopener"
&gt;101-ways-to-deploy-kubernetes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2026/02/101-kubernetes-ui-screenshot.avif"
loading="lazy"
alt="Interface web du projet 101 ways to deploy Kubernetes"
&gt;&lt;/p&gt;
&lt;h2 id="pourquoi-une-ui-"&gt;Pourquoi une UI ?
&lt;/h2&gt;&lt;p&gt;Le tableau Markdown sur GitHub, c&amp;rsquo;était déjà mieux que le Google Sheet pour la collaboration, mais à peine. Difficile à parser, difficile de rajouter des colonnes sans que ça devienne trop le bazar (c&amp;rsquo;était déjà le cas, ahah), et surtout, ultra MOCHE.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2026/01/101-kubernetes-v2-screenshot.avif"
loading="lazy"
alt="Ancien tableau Markdown sur GitHub, difficile à lire"
&gt;&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai donc décidé de transformer tout ça en une interface moderne et intuitive, avec l&amp;rsquo;aide d&amp;rsquo;un LLM.&lt;/p&gt;
&lt;h2 id="stack-technique--astro--tailwind"&gt;Stack technique : Astro + Tailwind
&lt;/h2&gt;&lt;p&gt;Pour ce projet, j&amp;rsquo;ai choisi une stack simple mais efficace :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a class="link" href="https://astro.build/" target="_blank" rel="noopener"
&gt;Astro&lt;/a&gt;&lt;/strong&gt; : un framework moderne qui génère des sites statiques ultra-rapides&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a class="link" href="https://tailwindcss.com/" target="_blank" rel="noopener"
&gt;Tailwind CSS&lt;/a&gt;&lt;/strong&gt; : pour un design responsive sans prise de tête&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le résultat ? Un site léger, plutôt rapide, et qui fonctionne aussi bien sur &lt;strong&gt;desktop&lt;/strong&gt; que sur &lt;strong&gt;mobile&lt;/strong&gt; (même si l&amp;rsquo;expérience desktop reste plus confortable vu la quantité de données).&lt;/p&gt;
&lt;h2 id="les-fonctionnalités"&gt;Les fonctionnalités
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Des cartes pour chaque solution&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Fini le tableau digne d&amp;rsquo;un dev back (non, pire, un ingé kube&amp;hellip;) ! Chaque outil dispose maintenant de sa propre &amp;ldquo;carte&amp;rdquo; animée avec :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le logo du projet&lt;/li&gt;
&lt;li&gt;Le type de licence (OSS ou propriétaire)&lt;/li&gt;
&lt;li&gt;Le nombre d&amp;rsquo;étoiles GitHub&lt;/li&gt;
&lt;li&gt;Des liens directs vers le projet et des ressources tierces (blogs indépendants, REX, tutos&amp;hellip;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2026/02/101-kubernetes-zoom.avif"
loading="lazy"
alt="Vue détaillée d’une carte de solution Kubernetes avec logo, licence et étoiles GitHub"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Des filtres puissants&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Vous cherchez uniquement des solutions open source ? Des outils pour le développement local ? Des plateformes de management ?&lt;/p&gt;
&lt;p&gt;Les filtres par &lt;strong&gt;catégories&lt;/strong&gt; permettent de naviguer facilement :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Desktop (développement local)&lt;/li&gt;
&lt;li&gt;Managed (offres cloud)&lt;/li&gt;
&lt;li&gt;Self-hosted (automatisation on-premise)&lt;/li&gt;
&lt;li&gt;Infra As Code&lt;/li&gt;
&lt;li&gt;Kubernetes OS (systèmes spécialisés)&lt;/li&gt;
&lt;li&gt;Management Platform&lt;/li&gt;
&lt;li&gt;Kubernetes in Kubernetes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et vous pouvez aussi filtrer par &lt;strong&gt;statut&lt;/strong&gt; (actif, abandonné) ou afficher uniquement les solutions &lt;strong&gt;open source&lt;/strong&gt; ou &lt;strong&gt;production ready&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Une barre de recherche&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Vous savez ce que vous cherchez ? Tapez directement le nom dans la barre de recherche pour trouver la solution en un instant.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Des tags pour affiner&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Au-delà des catégories, les tags permettent d&amp;rsquo;identifier rapidement les technologies sous-jacentes (kubeadm, k3s, k0s&amp;hellip;).&lt;/p&gt;
&lt;h2 id="le-saviez-vous--au-moins-18-outils-utilisent-kubeadm-"&gt;Le saviez-vous ? Au moins 18 outils utilisent kubeadm !
&lt;/h2&gt;&lt;p&gt;En compilant toutes ces données, j&amp;rsquo;ai découvert quelque chose de fascinant : &lt;strong&gt;au moins 18 outils&lt;/strong&gt; utilisent &lt;code&gt;kubeadm&lt;/code&gt; comme backend pour déployer Kubernetes ! 🤯&lt;/p&gt;
&lt;p&gt;Et ce n&amp;rsquo;est même pas en comptant les offres managées des cloud providers !&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est typiquement le genre d&amp;rsquo;information qu&amp;rsquo;on peut maintenant visualiser instantanément grâce à cette nouvelle interface.&lt;/p&gt;
&lt;h2 id="un-projet-collaboratif"&gt;Un projet collaboratif
&lt;/h2&gt;&lt;p&gt;Le projet reste &lt;strong&gt;100% open source&lt;/strong&gt; et collaboratif. Les données sont toujours stockées dans le dépôt GitHub, et l&amp;rsquo;UI est générée automatiquement à partir de ces données (j&amp;rsquo;ai même rajouté des previews pour les PRs).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il manque un outil ou un provider ?&lt;/strong&gt; Vous avez repéré un bug ? N&amp;rsquo;hésitez pas à &lt;a class="link" href="https://github.com/zwindler/101-ways-to-deploy-kubernetes/issues" target="_blank" rel="noopener"
&gt;ouvrir une issue&lt;/a&gt; ou à soumettre une Pull Request !&lt;/p&gt;
&lt;p&gt;Le projet compte maintenant &lt;strong&gt;118 solutions&lt;/strong&gt; (et je sais qu&amp;rsquo;il en manque certainement), avec pour chacune :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Des liens à jour&lt;/li&gt;
&lt;li&gt;Le statut du projet&lt;/li&gt;
&lt;li&gt;Des références externes (tutoriels, retours d&amp;rsquo;expérience&amp;hellip;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="essayez-commentez-partagez"&gt;Essayez, commentez, partagez
&lt;/h2&gt;&lt;p&gt;Rendez-vous sur &lt;a class="link" href="https://zwindler.github.io/101-ways-to-deploy-kubernetes/" target="_blank" rel="noopener"
&gt;zwindler.github.io/101-ways-to-deploy-kubernetes&lt;/a&gt; pour explorer toutes ces solutions !&lt;/p&gt;
&lt;p&gt;OK, c&amp;rsquo;est un infâme &amp;ldquo;call to action&amp;rdquo; comme on en voit sur tous les réseaux sociaux. Soit.&lt;/p&gt;
&lt;p&gt;Cependant, je ne peux pas savoir si c&amp;rsquo;est utile (ou non) si vous ne le faites pas. Je peux le laisser en l&amp;rsquo;état (ça n&amp;rsquo;est pas génant en soit, j&amp;rsquo;ai plein d&amp;rsquo;autres side projects qui n&amp;rsquo;attendent que mon temps libre) ou le faire vivre, si ça vous plait / sert.&lt;/p&gt;
&lt;p&gt;Et si vous trouvez ce projet utile, n&amp;rsquo;hésitez pas à :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Star&lt;/strong&gt; le projet sur &lt;a class="link" href="https://github.com/zwindler/101-ways-to-deploy-kubernetes" target="_blank" rel="noopener"
&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Partager&lt;/strong&gt; avec vos collègues de la communauté Cloud Native&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contribuer&lt;/strong&gt; en ajoutant des outils manquants ou en corrigeant des erreurs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Merci d&amp;rsquo;avance ! 🙏&lt;/p&gt;</description></item><item><title>101 façons de déployer Kubernetes (v2) : maintenant sur Github avec plus de méthodes, plus de détails, plus de tout</title><link>https://blog.zwindler.fr/2026/01/04/101-facons-de-deployer-kubernetes-v2/</link><pubDate>Sun, 04 Jan 2026 10:00:00 +0200</pubDate><guid>https://blog.zwindler.fr/2026/01/04/101-facons-de-deployer-kubernetes-v2/</guid><description>&lt;img src="https://blog.zwindler.fr/2026/01/101-kubernetes-v2-screenshot.webp" alt="Featured image of post 101 façons de déployer Kubernetes (v2) : maintenant sur Github avec plus de méthodes, plus de détails, plus de tout" /&gt;&lt;h2 id="une-nouvelle-version-une-nouvelle-maison"&gt;Une nouvelle version, une nouvelle maison
&lt;/h2&gt;&lt;p&gt;Il y a quelques mois, je vous présentais mon &lt;a class="link" href="https://blog.zwindler.fr/2025/11/02/93-facons-de-deployer-kubernetes/" &gt;tableau recensant 93 façons différentes de déployer Kubernetes&lt;/a&gt;, sur Google Sheets.&lt;/p&gt;
&lt;p&gt;À la suite de la remarque de Ludovic Piot qui aurait aimé contribuer un ou deux outils manquants, j&amp;rsquo;ai pris un peu (beaucoup, en vrai) de temps pendant ces vacances pour &lt;strong&gt;déménager tout ça sur Github&lt;/strong&gt; : &lt;a class="link" href="https://github.com/zwindler/101-ways-to-deploy-kubernetes" target="_blank" rel="noopener"
&gt;101-ways-to-deploy-kubernetes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2026/01/101-kubernetes-v2-screenshot2.avif"
loading="lazy"
alt="Capture d’écran du dépôt GitHub 101 ways to deploy Kubernetes v2"
&gt;&lt;/p&gt;
&lt;p&gt;Pourquoi sur un dépôt &lt;code&gt;git&lt;/code&gt; plutôt que sur un Google Sheet comme au début ? Parce que &lt;strong&gt;ça me permet facilement de rendre ce projet vraiment collaboratif&lt;/strong&gt;, notamment via des PRs (et surtout leur validation ou non).&lt;/p&gt;
&lt;p&gt;Google Sheets, c&amp;rsquo;était bien pour commencer, quand c&amp;rsquo;était un outil perso pour m&amp;rsquo;aider à écrire mon livre, mais pour la collaboration, c&amp;rsquo;était pas viable.&lt;/p&gt;
&lt;h2 id="quoi-de-neuf-dans-cette-v2-"&gt;Quoi de neuf dans cette v2 ?
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Contributions facilitées&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Le projet dispose maintenant d&amp;rsquo;un &lt;strong&gt;&lt;a class="link" href="https://github.com/zwindler/101-ways-to-deploy-kubernetes/blob/main/CONTRIBUTING.md" target="_blank" rel="noopener"
&gt;CONTRIBUTING.md&lt;/a&gt;&lt;/strong&gt; qui explique comment participer.&lt;/p&gt;
&lt;p&gt;Vous connaissez une solution qui n&amp;rsquo;est pas listée ? Vous avez repéré une erreur ? Un lien cassé ? Il vous suffit de faire une Pull Request !&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;De nombreuses nouvelles méthodes (j&amp;rsquo;ai pas compté mais probablement une douzaine)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Le projet est passé de 93 à &lt;strong&gt;plus de 100 méthodes&lt;/strong&gt; ! J&amp;rsquo;ai continué mes explorations et ajouté une douzaine de nouvelles solutions, dont certaines que vous m&amp;rsquo;aviez suggérées.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Informations sur les licences&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai enrichi le tableau avec &lt;strong&gt;des détails sur les licences&lt;/strong&gt; de chaque projet. C&amp;rsquo;est particulièrement important pour identifier d&amp;rsquo;un coup d&amp;rsquo;oeil si un produit est réellement open source ou si c&amp;rsquo;est une solution à licence propriétaire ou commerciale.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2026/01/101-kubernetes-v2-screenshot.avif"
loading="lazy"
alt="Tableau des méthodes de déploiement Kubernetes avec informations de licence"
&gt;&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai eu le débat avec Ludovic justement, qui voulait comprendre pourquoi je n&amp;rsquo;avais pas listé &amp;ldquo;MKE (Mirantis Kubernetes Engine)&amp;rdquo;. Je lui avais répondu à l&amp;rsquo;époque que c&amp;rsquo;était parce que je ne pouvais pas avoir accès à une version d&amp;rsquo;essai en tant que &amp;ldquo;random des Internets&amp;rdquo; sans passer par un commercial, mais l&amp;rsquo;argument n&amp;rsquo;était pas hyper solide.&lt;/p&gt;
&lt;p&gt;Pour trouver une règle &amp;ldquo;unique&amp;rdquo; à indiquer dans le &lt;a class="link" href="https://github.com/zwindler/101-ways-to-deploy-kubernetes/blob/main/CONTRIBUTING.md" target="_blank" rel="noopener"
&gt;CONTRIBUTING.md&lt;/a&gt;, j&amp;rsquo;ai donc réintégré une partie des solutions que j&amp;rsquo;avais &amp;ldquo;censurées&amp;rdquo;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;While the heart of the cloud native ecosystem is open source, both open source and closed source (proprietary) tools are accepted in this list. What matters is whether the tool helps deploy Kubernetes clusters, not its licensing model.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Nombreuses références externes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai fait un &lt;strong&gt;important travail&lt;/strong&gt; sur la partie &amp;ldquo;références externes&amp;rdquo;. L&amp;rsquo;idée du répo, au delà de juste fournir une liste à la prévert, est de référencer des articles de tiers indiquant &lt;strong&gt;comment&lt;/strong&gt; mettre en place ces solutions et bénéficier des retours d&amp;rsquo;expérience de la communauté.&lt;/p&gt;
&lt;p&gt;Dans l&amp;rsquo;idée de rendre le projet plus international (ça sera tout aussi utile aux anglophones qu&amp;rsquo;aux petits frenchies de ma communauté), j&amp;rsquo;ai récupéré en priorité des liens en anglais, pour le plus de solutions possibles de cette liste. Il en reste encore qui n&amp;rsquo;en ont pas, mais ça progresse.&lt;/p&gt;
&lt;p&gt;Note importante : au-delà de la documentation officielle (qui existe très souvent pour la grande majorité des projets), j&amp;rsquo;ai en priorité voulu recenser :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Des tutoriels de qualité de la communauté&lt;/li&gt;
&lt;li&gt;Des articles de blog détaillés&lt;/li&gt;
&lt;li&gt;Des retours d&amp;rsquo;expérience concrets&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="un-projet-toujours-sous-cc-by-sa-40"&gt;Un projet toujours sous CC BY-SA 4.0
&lt;/h2&gt;&lt;p&gt;Le contenu reste sous licence &lt;a class="link" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr" target="_blank" rel="noopener"
&gt;CC BY-SA 4.0 (Attribution - Share Alike)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Cela signifie que vous êtes libre de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Partager&lt;/strong&gt; : copier et redistribuer le contenu&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Adapter&lt;/strong&gt; : remixer, transformer et créer à partir de ce matériel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sous les conditions suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Attribution&lt;/strong&gt; : vous devez créditer le projet&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Partage dans les mêmes conditions&lt;/strong&gt; : si vous adaptez le contenu, vous devez le distribuer sous la même licence&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="comment-contribuer-"&gt;Comment contribuer ?
&lt;/h2&gt;&lt;p&gt;C&amp;rsquo;est simple :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Forkez le dépôt &lt;a class="link" href="https://github.com/zwindler/101-ways-to-deploy-kubernetes" target="_blank" rel="noopener"
&gt;101-ways-to-deploy-kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ajoutez ou modifiez le contenu (en suivant le format du tableau)&lt;/li&gt;
&lt;li&gt;Soumettez une Pull Request&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Lisez le &lt;a class="link" href="https://github.com/zwindler/101-ways-to-deploy-kubernetes/blob/main/CONTRIBUTING.md" target="_blank" rel="noopener"
&gt;CONTRIBUTING.md&lt;/a&gt; pour plus de détails sur le processus et les bonnes pratiques.&lt;/p&gt;
&lt;p&gt;Toutes les contributions sont les bienvenues : nouvelles entrées, corrections, enrichissements, suggestions&amp;hellip;&lt;/p&gt;
&lt;h2 id="et-la-suite-"&gt;Et la suite ?
&lt;/h2&gt;&lt;p&gt;Le projet va continuer à évoluer au fil des découvertes et de vos contributions.&lt;/p&gt;
&lt;p&gt;Je continue aussi à explorer de nouvelles solutions et à enrichir les informations existantes. Et qui sait, peut-être qu&amp;rsquo;on dépassera les 150 méthodes d&amp;rsquo;ici la fin de l&amp;rsquo;année ? 😄&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est le moment où je fais mon influenceur et que je vous demande de ne pas hésiter à :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Star&lt;/strong&gt; le projet sur Github si vous le trouvez utile ⭐⭐⭐&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contribuer&lt;/strong&gt; en ajoutant vos découvertes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Partager&lt;/strong&gt; autour de vous si vous le trouvez utile&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rendez-vous sur &lt;a class="link" href="https://github.com/zwindler/101-ways-to-deploy-kubernetes" target="_blank" rel="noopener"
&gt;github.com/zwindler/101-ways-to-deploy-kubernetes&lt;/a&gt; !&lt;/p&gt;</description></item><item><title>93 façons de déployer Kubernetes : j'ai recensé (presque) toutes les méthodes existantes</title><link>https://blog.zwindler.fr/2025/11/02/93-facons-de-deployer-kubernetes/</link><pubDate>Sun, 02 Nov 2025 18:00:00 +0200</pubDate><guid>https://blog.zwindler.fr/2025/11/02/93-facons-de-deployer-kubernetes/</guid><description>&lt;img src="https://blog.zwindler.fr/2025/11/93-kubernetes-screenshot.webp" alt="Featured image of post 93 façons de déployer Kubernetes : j'ai recensé (presque) toutes les méthodes existantes" /&gt;&lt;h2 id="un-projet-documentaire-un-peu-fou"&gt;Un projet documentaire un peu fou
&lt;/h2&gt;&lt;p&gt;Quand j&amp;rsquo;ai commencé à écrire mon livre &lt;a class="link" href="https://www.editions-eyrolles.com/livre/kubernetes" target="_blank" rel="noopener"
&gt;&amp;ldquo;Kubernetes : 50 solutions pour les postes de développement et les clusters de production&amp;rdquo;&lt;/a&gt;, je me suis rapidement rendu compte d&amp;rsquo;un problème : &lt;strong&gt;il existe une infinité de façons de déployer Kubernetes&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Bon, pas &lt;em&gt;littéralement&lt;/em&gt; une infinité, mais quand même&amp;hellip; beaucoup. Trop ?&lt;/p&gt;
&lt;p&gt;Pour structurer mon livre et choisir quelles solutions j&amp;rsquo;allais couvrir, j&amp;rsquo;ai fait ce que tout bon nerd ferait : &lt;strong&gt;j&amp;rsquo;ai créé un tableau&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Un très grand tableau.&lt;/p&gt;
&lt;p&gt;Un &lt;strong&gt;Google Sheet&lt;/strong&gt; qui recense actuellement &lt;strong&gt;93 méthodes différentes&lt;/strong&gt; pour déployer Kubernetes. Comme je n&amp;rsquo;aime pas &amp;ldquo;gâcher&amp;rdquo;, je le partage avec vous aujourd&amp;rsquo;hui &lt;a class="link" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr" target="_blank" rel="noopener"
&gt;en CC BY-SA 4.0 (Attribution - Share Alike)&lt;/a&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.google.com/spreadsheets/d/1zjOLU8MblsN8VPwUyHNDFbBQ7EihHM2joD2Q9Tv2DiI/edit?usp=sharing" target="_blank" rel="noopener"
&gt;93 façons de déployer Kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2025/11/93-kubernetes-screenshot.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="que-contient-ce-tableau-"&gt;Que contient ce tableau ?
&lt;/h2&gt;&lt;p&gt;Le tableau est structuré avec plusieurs colonnes pour vous aider à naviguer dans cette jungle :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nom du produit (et éditeur quand c&amp;rsquo;est intéressant)&lt;/li&gt;
&lt;li&gt;URL du produit : j&amp;rsquo;ai essayé de restreindre aux produits open source (ou aux services managés &lt;strong&gt;publics&lt;/strong&gt;) même s&amp;rsquo;il y a quelques exceptions&lt;/li&gt;
&lt;li&gt;Type de solution (j&amp;rsquo;y reviendrai)&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Basé sur&amp;rdquo; : là, c&amp;rsquo;est un truc assez rigolo&amp;hellip; beaucoup de projets sont des surcouches de kubeadm, k3s ou k0s. Tous ne le disent pas ouvertement, et je m&amp;rsquo;en suis rendu compte en les essayant&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et peut-être un peu moins intéressant (peut-être que ça disparaîtra)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Est-ce que j&amp;rsquo;en parle dans mon livre ?&lt;/li&gt;
&lt;li&gt;Est-ce que j&amp;rsquo;en parle sur mon blog ?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="les-différentes-catégories-doutils"&gt;Les différentes catégories d&amp;rsquo;outils
&lt;/h2&gt;&lt;p&gt;Pour structurer d&amp;rsquo;abord ma pensée, et ensuite mon livre, j&amp;rsquo;ai essayé de classer ces méthodes en catégories.&lt;/p&gt;
&lt;p&gt;Certaines sont assez évidentes (une offre managée, on voit tout de suite de quoi il s&amp;rsquo;agit), d&amp;rsquo;autres, un peu plus personnelles (et donc discutables).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kubernetes sur desktop (Local Development)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Les outils pour développer en local sur votre machine. On parle ici des Minikube, kind et autres Docker Desktop&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Infrastructure as Code (IaC)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Les outils qui vous permettent de décrire le déploiement de Kubernetes via du code (opentofu, crossplane, pulumi&amp;hellip;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kubernetes in Kubernetes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Parce que pourquoi faire simple quand on peut faire&amp;hellip; recursif ? 🤯. Ca se limite pour l&amp;rsquo;instant à vCluster et k3k.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OS spécialisés&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Des systèmes d&amp;rsquo;exploitation conçus spécifiquement pour faire tourner Kubernetes. Je pense bien sûr à Talos Linux, mais pas que ;-P.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kubernetes managés (les offres cloud clés en main)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pas besoin de faire un dessin, on pense direct à la triplette EKS / AKS / GKE, mais aussi aux solutions françaises (OVHcloud Managed Kubernetes, bientôt Clever Cloud :smirk:)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Plateformes de management de clusters&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Là, c&amp;rsquo;est une catégorie un peu à part, qui vont nous permettre de gérer plein de clusters Kubernetes et même de générer de nouveaux clusters gérés par des clusters&amp;hellip; Souvent des bonnes usines à gaz comme Gardener ou pire Kubermatic Kubernetes Platform. On a quand même des trucs un peu plus funs comme Kamaji.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Outils d&amp;rsquo;automatisation pour self-hosted&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Les solutions qui automatisent le déploiement sur vos propres machines, comme kubeadm, k3s et k0s (la triplette, base d&amp;rsquo;à peu près 50% des autres solutions du marché).&lt;/p&gt;
&lt;h2 id="la-révélation--tout-le-monde-copie-sur-son-voisin"&gt;La révélation : tout le monde copie sur son voisin
&lt;/h2&gt;&lt;p&gt;En remplissant ce tableau, j&amp;rsquo;ai découvert quelque chose de marrant : &lt;strong&gt;une grande majorité des outils ne réinventent pas la roue&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Beaucoup de projets sont en fait des &lt;strong&gt;surcouches&lt;/strong&gt; ou des &lt;strong&gt;wrappers&lt;/strong&gt; autour de trois solutions de base que je cite juste avant (kubeadm, k3s et k0s). Et parfois, on a &lt;strong&gt;aussi&lt;/strong&gt; des surcouches de solutions un peu plus confidentielles.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;info n&amp;rsquo;est pas toujours disponible, j&amp;rsquo;ai parfois découvert ça au détour d&amp;rsquo;un blogpost, ou même en allant fouiller les entrailles de la solution.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est typiquement le genre de colonne intéressante pour bien se rendre compte qu&amp;rsquo;au delà de l&amp;rsquo;apparente diversité de ces solutions de déploiement, il y a en fait un gros standard et quelques variations.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;espère réussir à dénicher plus d&amp;rsquo;indices similaires pour remplir encore un peu plus cette colonne :).&lt;/p&gt;
&lt;h2 id="un-document-vivant"&gt;Un document vivant
&lt;/h2&gt;&lt;p&gt;Ce tableau n&amp;rsquo;est pas figé. Le nombre d&amp;rsquo;outils évolue régulièrement (j&amp;rsquo;en découvre de nouveaux presque chaque semaine).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Si vous connaissez une méthode qui n&amp;rsquo;est pas listée&lt;/strong&gt;, n&amp;rsquo;hésitez pas à commenter sur les réseaux.&lt;/p&gt;
&lt;p&gt;Note : je rappelle que je vise en priorité les solutions &lt;strong&gt;open source&lt;/strong&gt; ou services managés &lt;strong&gt;publics&lt;/strong&gt; (je viens de virer Mirantis Kubernetes Engine pour cette raison).&lt;/p&gt;
&lt;h2 id="et-sinon-il-me-reste-quoi-à-tester-"&gt;Et sinon, il me reste quoi à tester ?
&lt;/h2&gt;&lt;p&gt;J&amp;rsquo;ai déjà teasé sur les réseaux sociaux fréquentables, dans la liste des trucs que je n&amp;rsquo;ai pas encore testé mais qui pourraient me motiver, il y a :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://kamaji.clastix.io" target="_blank" rel="noopener"
&gt;kamaji&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/portainer/kubesolo" target="_blank" rel="noopener"
&gt;kubesolo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/kubeclipper/kubeclipper" target="_blank" rel="noopener"
&gt;kubeclipper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://tarook.cloud/en" target="_blank" rel="noopener"
&gt;tarook&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>[Tutoriel] XWiki, ma premier appli Statefull sur Kubernetes</title><link>https://blog.zwindler.fr/2017/10/24/tutoriel-xwiki-ma-premier-appli-stateful-sur-kubernetes/</link><pubDate>Tue, 24 Oct 2017 11:30:52 +0000</pubDate><guid>https://blog.zwindler.fr/2017/10/24/tutoriel-xwiki-ma-premier-appli-stateful-sur-kubernetes/</guid><description>&lt;img src="https://blog.zwindler.fr/2017/10/xwiki_kubernetes.webp" alt="Featured image of post [Tutoriel] XWiki, ma premier appli Statefull sur Kubernetes" /&gt;&lt;h2 id="pourquoi-déployer-xwiki-sur-kubernetes-"&gt;Pourquoi déployer XWiki sur Kubernetes ?
&lt;/h2&gt;&lt;p&gt;Vous le savez surement maintenant vu le nombre d’article que j’ai écrit sur le sujet, j’aime bien &lt;a class="link" href="http://www.xwiki.org/xwiki/bin/view/Main/WebHome" target="_blank" rel="noopener"
&gt;XWiki&lt;/a&gt;. C’est un super projet mené par des gens passionnés, réactifs et surtout, c’est cet outil qui a permis à mon entreprise d’adopter ENFIN le wiki comme outil de documentation, que ce soit pour documenter les procédures, mais aussi documenter entièrement les concepts de l’outil que nous développons.&lt;/p&gt;
&lt;p&gt;D’un outil quasi-confidentiel utilisés par quelques admins peu motivés (sous Mediawiki), nous sommes donc progressivement passés à un outil utilisé par toutes les équipes, du dev. au support en passant par les ergo. et les CPs, utilisés par plusieurs entités internes et même accepté comme document contractuel par nos prestataires. J’ai d’ailleurs &lt;a class="link" href="https://blog.zwindler.fr/2016/12/12/migration-mediawiki-vers-xwiki/" &gt;documenté la migration sur cet article&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/12/mediawiki_to_xwiki_logo.png"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Mais j’aime aussi XWiki car c’est selon moi l’exemple parfait d’une appli 2 ou 3 tiers relativement simple pour explorer l’écosystème Docker (construction des images, les problématiques réseau et stockage, …). Je joue régulièrement avec &lt;a class="link" href="https://hub.docker.com/r/zwindler/xwiki-tomcat8/" target="_blank" rel="noopener"
&gt;ma propre image sur le Dockerhub&lt;/a&gt; pour explorer un peu plus cet écosystème riche (c’est rien de le dire).&lt;/p&gt;
&lt;p&gt;Quelle meilleure application donc pour réellement tester mon tout nouveau cluster Kubernetes (je ne compte pas nginx ou helloworld) ?&lt;/p&gt;
&lt;h2 id="kubernetes-"&gt;Kubernetes ?
&lt;/h2&gt;&lt;p&gt;Pour ceux qui ont besoin d’un rappel sur Kubernetes ou des premiers concepts et/ou comment l’installer, &lt;a class="link" href="https://blog.zwindler.fr/2017/06/07/installer-cluster-kubernetes-vm-centos/" &gt;je vous invite à lire/relire mon article précédent sur le sujet&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A noter également (j’ai pas mal communiqué là-dessus sur les réseaux sociaux), la Linux Foundation, qui gère également la Cloud Native Computing Foundation (et qui elle-même gère Kubernetes), a mis à disposition gratuitement un cour en ligne de type MOOC sur edX. Vous pouvez même vous « certifier » à la fin si vous réussissez le QCM, moyennant 100$.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2017/10/kubernetes_edx.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;A l’issue de ces lectures, vous devriez donc avoir :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la connaissance des différents concepts de Kubernetes&lt;/li&gt;
&lt;li&gt;un cluster Kubernetes opérationnel (une ou plusieurs machines, ou simplement un minikube en local)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ce sont les prérequis pour la suite de cet article, même si je vais essayer de détailler tout ce qui va suivre.&lt;/p&gt;
&lt;h2 id="plan-de-bataille"&gt;Plan de bataille
&lt;/h2&gt;&lt;p&gt;Je ne vais pas vous le cacher, si on veut tout faire soit même, ce n’est pas « trivial ». Mais en décomposant toutes les étapes, vous allez voir que c’est logique.&lt;/p&gt;
&lt;p&gt;Pour faire tourner mon image Docker &lt;a class="link" href="https://hub.docker.com/r/zwindler/xwiki-tomcat8/" target="_blank" rel="noopener"
&gt;zwindler/xwiki-tomcat8&lt;/a&gt;, j’ai besoin, sur mon cluster Kubernetes, des choses suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un &lt;strong&gt;Deployment&lt;/strong&gt; qui exécute la partie PostgreSQL. Ce &lt;strong&gt;Deployment&lt;/strong&gt; contiendra :
&lt;ul&gt;
&lt;li&gt;un &lt;strong&gt;ReplicaSet&lt;/strong&gt; avec une seule instance car on ne souhaite avoir qu’un seul &lt;strong&gt;Pod&lt;/strong&gt; avec l’image postgresql officielle&lt;/li&gt;
&lt;li&gt;Un &lt;strong&gt;Service&lt;/strong&gt; de type &lt;strong&gt;ClusterIP&lt;/strong&gt; pour lui permettre de communiquer avec le XWiki mais pas avec le monde extérieur&lt;/li&gt;
&lt;li&gt;Un &lt;strong&gt;PersistantVolumeClaim&lt;/strong&gt; et son &lt;strong&gt;PersistentVolume&lt;/strong&gt; associé pour stocker les données de la base&lt;/li&gt;
&lt;li&gt;Des &lt;strong&gt;Secrets&lt;/strong&gt; pour permet de configurer les mots de passes de postgres et de l’utilisateur XWiki&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;un &lt;strong&gt;Deployment&lt;/strong&gt; qui exécute la partie XWiki. Ce &lt;strong&gt;Deployment&lt;/strong&gt; contiendra :
&lt;ul&gt;
&lt;li&gt;un &lt;strong&gt;ReplicaSet&lt;/strong&gt; avec une seule instance car on ne fait tourner qu’un seul &lt;strong&gt;Pod&lt;/strong&gt; avec l’image zwindler/xwiki-tomcat8, car on n’utilise qu’un tomcat à la fois pour exécuter XWiki&lt;/li&gt;
&lt;li&gt;Un Service de type &lt;strong&gt;NodePort&lt;/strong&gt; (ou mieux si vous avez des LoadBalancers ou des Ingress à dispo.) qui permettra d’exposer le port interne au cluster Kubernetes vers le monde extérieur&lt;/li&gt;
&lt;li&gt;Un &lt;strong&gt;PersistantVolumeClaim&lt;/strong&gt; avec le &lt;strong&gt;PersistentVolume&lt;/strong&gt; pour stocker les pièces jointes car mon image Docker utilise l’option filesystem_store pour éviter de surcharger la base pour les PJ&lt;/li&gt;
&lt;li&gt;et aussi le &lt;strong&gt;Secret&lt;/strong&gt; défini précédemment pour accéder à la BDD.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OK.&lt;/p&gt;
&lt;p&gt;Voir ça posé dans une liste comme ça, ça peut faire peur.&lt;/p&gt;
&lt;p&gt;Alors vous allez me dire : « c’est plus facile de lancer ton DockerCompose » (&lt;a class="link" href="https://blog.zwindler.fr/2016/09/15/installer-xwiki-8-2-1-avec-docker-compose-en-2-lignes-de-commandes/" &gt;car j’ai montré qu’avec DockerCompose on peut démarrer une instance XWiki en 2 ou 3 lignes de commandes&lt;/a&gt;). Mais au final, tout ce que j’ai écris ici peut être concaténé dans un seul et même fichier YAML et le résultat est aussi simple dans l’absolu.&lt;/p&gt;
&lt;h2 id="créer-les-secrets"&gt;Créer les Secrets
&lt;/h2&gt;&lt;p&gt;Clairement, c’est un des gros points forts par rapport à la solution plus simple avec juste Docker / DockerCompose : la gestion des Secrets (et des configurations, dans une moindre mesure).&lt;/p&gt;
&lt;p&gt;Ici, plutôt que d’avoir un mot de passe en clair dans mon fichier compose, le mot de passe est renseigné à part, soit via un fichier, soit via l’API. Et ces mots de passes ne pourront plus être consultés via la CLI, mais pourront être utilisés.&lt;/p&gt;
&lt;p&gt;Pour créer un secret dans Kubernetes en CLI, il existe plusieurs méthodes. Soit on utilise la CLI directement depuis le prompt ou depuis un fichier plat (qui va se charger d’encoder le secret en base64 et de générer le YAML pour nous), soit on décide de créer le YAML nous-même. Je vous met les deux méthodes :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;echo -n &amp;#34;xwikidb&amp;#34; &amp;gt; ./POSTGRES_USER.txt
echo -n &amp;#34;xwikipwd&amp;#34; &amp;gt; ./POSTGRES_PASSWORD.txt
kubectl create secret generic postgresql-xwiki-user-password --from-file=POSTGRES_USER.txt --from-file=POSTGRES_PASSWORD.txt
secret &amp;#34;postgresql-xwiki-user-password&amp;#34; created
#ou
cat &amp;gt; postgresql_xwiki_user_password.yaml &amp;lt;&amp;lt; EOF
apiVersion: v1
kind: Secret
metadata:
name: postgresql-xwiki-user-password
type: Opaque
data:
username: $(cat POSTGRES_USER.txt| base64 -w 0)
password: $(cat POSTGRES_PASSWORD.txt| base64 -w 0)
EOF
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Au final, pour un déploiement unitaire pour vous même, ça ne change pas grand-chose bien sûr. Vous avez renseigné en clair le mot de passe (ou en base64 mais c’est pareil) à un moment donné.&lt;/p&gt;
&lt;p&gt;Cependant, dans le cadre d’un gros projet avec des développeurs qui poussent du code régulièrement d’un côté et des admins qui gèrent de l’autre les utilisateurs et les mots de passes, on peut permettre aux développeurs consommer les mots de passe sans jamais avoir à les connaitre (&lt;strong&gt;et laisser trainer sur Gitlab, ou pire, Github !&lt;/strong&gt;).&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;kubectl describe secret postgresql-xwiki-user-password
Name: postgresql-xwiki-user-password
Namespace: default
Labels: &amp;lt;none&amp;gt;
Annotations:
Type: Opaque
Data
====
password: 8 bytes
username: 7 bytes
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="créer-les-persistent-volumes"&gt;Créer les Persistent Volumes
&lt;/h2&gt;&lt;p&gt;Dans mon infrastructure, j’ai déjà un cluster GlusterFS. GlusterFS étant un SDS, il est particulièrement indiqué comme stockage persistant dans le cadre d’un cluster Kubernetes (comme Ceph, Cinder, S3 ou autre). Ces types de méthodes de stockage peuvent facilement se piloter par API et sont hautement disponibles.&lt;/p&gt;
&lt;p&gt;Création de l’endpoint GlusterFS&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;gt; gluster-endpoints.yaml &amp;lt;&amp;lt;EOF
apiVersion: v1
kind: Endpoints
metadata:
name: gluster-cluster
subsets:
- addresses:
- ip: 10.0.0.1
ports:
- port: 1
protocol: TCP
- addresses:
- ip: 10.0.0.2
ports:
- port: 1
protocol: TCP
EOF
kubectl apply -f gluster-endpoints.yaml
endpoints &amp;#34;gluster-cluster&amp;#34; created
kubectl get endpoints gluster-cluster
NAME ENDPOINTS AGE
gluster-cluster 10.0.0.1:1,10.0.0.2:1 39s
cat &amp;gt; gluster-service.yaml &amp;lt;&amp;lt; EOF
apiVersion: v1
kind: Service
metadata:
name: gluster-cluster
spec:
ports:
- port: 1
EOF
kubectl apply -f gluster-service.yaml
service &amp;#34;gluster-cluster&amp;#34; created
kubectl get service gluster-cluster
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
gluster-cluster 10.96.114.181 &amp;lt;none&amp;gt; 1/TCP 1m
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;La partie GlusterFS a été configurée côté Kubernetes. On peut maintenant s’atteler à la création des PV et PVC associés. D’abord la base de données :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;gt; gluster-pv-xwiki-pg.yaml &amp;lt;&amp;lt; EOF
apiVersion: v1
kind: PersistentVolume
metadata:
name: gluster-pv-xwiki-pg
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
glusterfs:
endpoints: gluster-cluster
path: /xwiki-pg-storage
readOnly: false
persistentVolumeReclaimPolicy: Retain
EOF
kubectl create -f gluster-pv-xwiki-pg.yaml
persistentvolume &amp;#34;gluster-pv-xwiki-pg&amp;#34; created
cat &amp;gt; gluster-pvc-xwiki-pg.yaml &amp;lt;&amp;lt; EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gluster-pvc-xwiki-pg
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
EOF
kubectl create -f gluster-pvc-xwiki-pg.yaml
persistentvolumeclaim &amp;#34;gluster-pvc-xwiki-pg&amp;#34; created
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et maintenant l’application XWiki&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;gt; gluster-pv-xwiki-app.yaml &amp;lt;&amp;lt; EOF
apiVersion: v1
kind: PersistentVolume
metadata:
name: gluster-pv-xwiki-app
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
glusterfs:
endpoints: gluster-cluster
path: /xwiki-app-storage
readOnly: false
persistentVolumeReclaimPolicy: Retain
EOF
kubectl create -f gluster-pv-xwiki-app.yaml
persistentvolume &amp;#34;gluster-pv-xwiki-app&amp;#34; created
cat &amp;gt; gluster-pvc-xwiki-app.yaml &amp;lt;&amp;lt; EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gluster-pvc-xwiki-app
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
EOF
kubectl create -f gluster-pvc-xwiki-app.yaml
persistentvolumeclaim &amp;#34;gluster-pvc-xwiki-app&amp;#34; created
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Dans le cadre d’un test, vous pouvez vous contenter de faire simplement appel à un partage NFS ou même à du stockage local (si vous n’avez qu’un worker) mais sachez que vous n’aurez pas le même niveau de résilience ni les même facilités d’administration.&lt;/p&gt;
&lt;p&gt;Si vous voulez un exemple de &lt;strong&gt;PersistentVolume&lt;/strong&gt; utilisant NFS, je vous conseille cet article qui traite d’un sujet peu plus complexe mais qui donne les étapes de base pour mettre en place le PV et PVC : &lt;a class="link" href="http://blog.kubernetes.io/2017/02/postgresql-clusters-kubernetes-statefulsets.html" target="_blank" rel="noopener"
&gt;Créer un cluster PostgreSQL avec un seul et même Deployment en utilisant les StatefulSets&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="créer-le-deployment-postgresql"&gt;Créer le Deployment postgreSQL
&lt;/h2&gt;&lt;p&gt;Voilà, on a tous les prérequis ! Il ne reste plus qu’à créer dans un premier temps notre base de données, puis notre XWiki. Comme indiqué au début, le &lt;strong&gt;Deployment&lt;/strong&gt; contiendra tous les éléments qu’on a créé plus tôt, dont les &lt;strong&gt;Secrets&lt;/strong&gt; et le &lt;strong&gt;Persistent Volume&lt;/strong&gt;. Il manquera aussi un &lt;strong&gt;Service&lt;/strong&gt;, que nous verrons plus tard.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;gt; xwiki-pg.yaml &amp;lt;&amp;lt; EOF
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: xwiki-pg
labels:
app: xwiki-pg
application: xwiki
spec:
replicas: 1
selector:
matchLabels:
app: xwiki-pg
application: xwiki
template:
metadata:
labels:
app: xwiki-pg
application: xwiki
name: xwiki-pg
spec:
containers:
- image: postgres:9.6
name: xwiki-pg
env:
- name: POSTGRES_DB
value: xwiki
- name: PGDATA
value: /var/lib/postgresql/data/pgdata
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: postgresql-xwiki-user-password
key: username
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgresql-xwiki-user-password
key: password
ports:
- containerPort: 5432
name: xwiki-pg
volumeMounts:
- name: xwiki-pg-storage
mountPath: /var/lib/postgresql/data/pgdata
volumes:
- name: xwiki-pg-storage
persistentVolumeClaim:
claimName: gluster-pvc-xwiki-pg
EOF
kubectl create -f xwiki-pg.yaml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Normalement, un &lt;strong&gt;Pod&lt;/strong&gt; devrait se créer et monter le disque Gluster, puis s’initialiser avec les variables d’environnement qu’on lui a donné.&lt;/p&gt;
&lt;p&gt;A partir de là, on ne peut cependant pas accéder à la base de données car on a pas encore créé le Service associé au &lt;strong&gt;Deployment&lt;/strong&gt;. Par défaut, on ne donne pas de type, c’est donc un &lt;strong&gt;ClusterIP&lt;/strong&gt;. Pour « savoir » vers quoi le Service doit rediriger, on a ajouté un &lt;strong&gt;Selector&lt;/strong&gt;, qui pointe sur le tag « app » avec la valeur « xwiki-pg » définie plus haut.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;gt; xwiki-pg-svc.yaml &amp;lt;&amp;lt; EOF
apiVersion: v1
kind: Service
metadata:
name: xwiki-pg-svc
labels:
app: xwiki-pg
spec:
ports:
- port: 5432
protocol: TCP
selector:
app: xwiki-pg
EOF
kubectl create -f xwiki-pg-svc.yaml
service &amp;#34;xwiki-pg-svc&amp;#34; created
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="créer-le-deployment-xwiki"&gt;Créer le Deployment XWiki
&lt;/h2&gt;&lt;p&gt;Youhou ! Plus qu’un ! Ici pas de grosses différences, le principe est le même. On doit créer un &lt;strong&gt;Deployment&lt;/strong&gt; puis un &lt;strong&gt;Service&lt;/strong&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat xwiki-tomcat.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: xwiki-app
labels:
app: xwiki-app
application: xwiki
spec:
replicas: 1
selector:
matchLabels:
app: xwiki-app
application: xwiki
template:
metadata:
labels:
app: xwiki-app
application: xwiki
name: xwiki-app
spec:
containers:
- image: zwindler/xwiki-tomcat8
name: xwiki-app
env:
- name: POSTGRES_INSTANCE
value: xwiki-pg
- name: POSTGRES_DB
value: xwiki
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
name: postgresql-xwiki-user-password
key: username
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgresql-xwiki-user-password
key: password
ports:
- containerPort: 8080
name: tomcat-port
volumeMounts:
- name: xwiki-app-storage
mountPath: /usr/local/tomcat/work/xwiki
volumes:
- name: xwiki-app-storage
persistentVolumeClaim:
claimName: gluster-pvc-xwiki-app
kubectl apply -f xwiki-tomcat.yaml
deployment &amp;#34;xwiki-app&amp;#34; created
cat xwiki-tomcat-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: xwiki-app-svc
labels:
apps: xwiki-app
spec:
type: NodePort
ports:
- port: 8080
targetPort: tomcat-port
protocol: TCP
selector:
app: xwiki-app
kubectl apply -f xwiki-tomcat-svc.yaml
service &amp;#34;xwiki-app-svc&amp;#34; created
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="est-ce-que-ça-marche-"&gt;Est-ce que ça marche ?
&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
gluster-cluster 10.96.114.181 &amp;lt;none&amp;gt; 1/TCP 4h
kubernetes 10.96.0.1 &amp;lt;none&amp;gt; 443/TCP 10d
xwiki-app-svc 10.103.218.140 &amp;lt;nodes&amp;gt; 8080:31484/TCP 4m
xwiki-pg-svc 10.108.219.88 &amp;lt;none&amp;gt; 5432/TCP 16m
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="tout-dun-coup"&gt;Tout d’un coup
&lt;/h2&gt;&lt;p&gt;Chose promise chose due ! Je vous ai dit en début d’article que vous pouviez tout déployer en quelques lignes de commandes. Dans l’absolu, vous pourriez tout déployer via un seul fichier. Je préfère découpler la partie stockage (qui va dépendre du stockage que vous allez utiliser) et la partie secret du reste pour les raisons que j’ai énoncé plus haut. Voilà ce que ça donne :&lt;/p&gt;
&lt;p&gt;On récupère les sources sur github&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;git clone https://github.com/zwindler/docker-xwiki
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A adapter en fonction de votre contexte, à minima les adresses IP si vous avez du gluster, et carrément à réécrire si vous utilisez autre chose (NFS ou CEPH par exemple) :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;kubectl apply -f docker-xwiki/kubernetes/gluster-endpoints-service.yaml
endpoints &amp;#34;gluster-cluster&amp;#34; created
service &amp;#34;gluster-cluster&amp;#34; created
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On injecte ensuite les secrets. A vous de les changer comme on a vu plus haut.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;kubectl apply -f docker-xwiki/kubernetes/postgresql_xwiki_user_password.yaml
secret &amp;#34;postgresql-xwiki-user-password&amp;#34; created
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Et on fini par&amp;hellip; tout le reste ! Là normalement il n’y a rien à changer à part éventuellement des ports, les seules « variables » dans ce déploiement étant le stockage et les mots de passes (qu’on vient de gérer).&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;kubectl apply -f docker-xwiki/kubernetes/xwiki-tomcat-pg-allinone.yaml
persistentvolume &amp;#34;gluster-pv-xwiki-pg&amp;#34; created
persistentvolume &amp;#34;gluster-pv-xwiki-app&amp;#34; created
deployment &amp;#34;xwiki-pg&amp;#34; created
persistentvolumeclaim &amp;#34;gluster-pvc-xwiki-pg&amp;#34; created
service &amp;#34;xwiki-pg-svc&amp;#34; created
deployment &amp;#34;xwiki-app&amp;#34; created
persistentvolumeclaim &amp;#34;gluster-pvc-xwiki-app&amp;#34; created
service &amp;#34;xwiki-app-svc&amp;#34; created
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="le-mot-de-la-fin"&gt;Le mot de la fin
&lt;/h2&gt;&lt;p&gt;Voilà, avec ce tutoriel vous avez maintenant une vue détaillée, étape par étape, de ce qu’il faut mettre en place pour gérer « proprement » le déploiement d’une application java + postgreSQL via Kubernetes.&lt;/p&gt;
&lt;p&gt;Clairement, c’est bien plus complexe qu’un simple Docker compose comme j’ai pu le présenté dans l’article sur ce sujet. Pour autant, il faut comparer ce qui est comparable, les deux installations n’ont rien à voir !&lt;/p&gt;
&lt;p&gt;D’un côté, vous avez une application déployée sur un nœud docker simple (éventuellement avec Swarm maintenant que les deux sont compatibles).&lt;/p&gt;
&lt;p&gt;De l’autre, vous avez une application qui est déployée sur un cluster de machines :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si l’une tombe en panne, la haute disponibilité est gérée : pas seulement sur le runtime, mais aussi sur le stockage !&lt;/li&gt;
&lt;li&gt;Vous pouvez segmenter votre cluster en namespaces, et donner des droits à certains namespace à certains utilisateurs avec un gestion fine des autorisations (RBAC)&lt;/li&gt;
&lt;li&gt;Vous disposez d’un dashboard et d’une API pour automatiser tous les déploiements (via Jenkins par exemple). Si vous voulez faire une mise à jour ou besoin de modifier un paramètre, c’est une simple commande ou un fichier de conf à appliquer à nouveau.&lt;/li&gt;
&lt;li&gt;Vous avez la possibilité de faire du scaling up/down, voire de l’autoscaling.&lt;/li&gt;
&lt;li&gt;&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La liste est longue ! En bref, vous passez d’une bidouille à la production.&lt;/p&gt;
&lt;h2 id="sources-additionnelles"&gt;Sources additionnelles
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;docs.openshift.org/latest/install_config/storage_examples/gluster_example.html (lien mort, pas dispo sur Internet Archive)&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://coderjourney.com/using-kubernetes-persistent-volumes/" target="_blank" rel="noopener"
&gt;coderjourney.com/using-kubernetes-persistent-volumes/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.xenonstack.com/blog/how-to-deploy-postgresql-on-kubernetes" target="_blank" rel="noopener"
&gt;www.xenonstack.com/blog/how-to-deploy-postgresql-on-kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>