<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Scaleway on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/scaleway/</link><description>Recent content in Scaleway on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Fri, 16 Jul 2021 07:00:00 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/scaleway/index.xml" rel="self" type="application/rss+xml"/><item><title>CIVO : du kubernetes managé à partir de 4$/mois, vraiment ?</title><link>https://blog.zwindler.fr/2021/07/16/civo-du-kubernetes-manage-a-partir-de-4-mois-vraiment/</link><pubDate>Fri, 16 Jul 2021 07:00:00 +0000</pubDate><guid>https://blog.zwindler.fr/2021/07/16/civo-du-kubernetes-manage-a-partir-de-4-mois-vraiment/</guid><description>&lt;img src="https://blog.zwindler.fr/2021/07/PXL_20210715_193337426.webp" alt="Featured image of post CIVO : du kubernetes managé à partir de 4$/mois, vraiment ?" /&gt;&lt;p&gt;Pendant la &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=kubecon&amp;#43;2021" &gt;Kubecon EU 2021&lt;/a&gt;, un provider que je ne connaissais pas a mis le paquet pour s’assurer de la visibilité : &lt;a class="link" href="https://www.civo.com" target="_blank" rel="noopener"
&gt;CIVO&lt;/a&gt;. Et avec une promesse plus qu’alléchante : un Kubernetes managé basé sur &lt;a class="link" href="https://blog.zwindler.fr/2019/03/21/deployer-en-5-minutes-un-cluster-kubernetes-sur-arm-avec-k3s-et-ansible/" &gt;k3s (que j’adore&lt;/a&gt;) et avec un tarif &lt;strong&gt;à partir de&lt;/strong&gt; 4$/mois !&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2021/07/00_civo.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Chez les concurrents, on a rien sous les 15€ / mois (Scaleway), quand ce n’est pas 30 voire 80… De quoi piquer ma curiosité donc.&lt;/p&gt;
&lt;h2 id="un-de-plus-"&gt;Un de plus ?
&lt;/h2&gt;&lt;p&gt;J’ai donc pris un compte d’essai proposé par l’entreprise aux participants de la Kubecon et j’ai créé un compte.&lt;/p&gt;
&lt;p&gt;La première chose que j’ai testé, c’est l’interface (il y a aussi une CLI). Forcément, chez un pure player, c’est simple et efficace, on s’y retrouve et l’interface est léchée. On est loin du gloubiboulga visuel de chez Azure (cf &lt;a class="link" href="https://blog.zwindler.fr/2018/12/18/jai-teste-pour-vous-aks-la-plateforme-kubernetes-managee-dazure/" &gt;mon test d’AKS&lt;/a&gt;). Après, c’est un minimum&amp;hellip; c’est forcément plus simple quand on commence de zéro et qu’on a pas des centaines de produits ;-p.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2021/07/01_civo_dashboard.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On a un dashboard avec les opérations réalisées chronologiquement, un menu pour créer des clusters kube, un menu pour créer du compute et des LB « nus ». Rien de bien révolutionnaire, ça fait le job.&lt;/p&gt;
&lt;p&gt;La partie « KubeQuest », c’est de la bête gamification (« Créez un cluster pour passer niveau 2!!! »), je ne m’y attarderai même pas.&lt;/p&gt;
&lt;h2 id="bon-on-le-créé-ce-cluster-à-4-"&gt;Bon, on le créé ce cluster à 4$ ?
&lt;/h2&gt;&lt;p&gt;Bon, ne vous enflammez pas, l’offre « à partir de 4$/mois » ne sera pas utilisable en prod, pas de miracle. Mais c’est déjà un tour de force qu’ils arrivent à le proposer, notamment grâce à k3s.&lt;/p&gt;
&lt;p&gt;Pas de surprise, le pricing des nodes est immédiatement affiché, et voilà à quoi ça ressemble :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2021/07/02_civo_4dollars.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Pour 4$ par mois, on vous propose un « cluster » d’un seul node, avec seulement 1 vCPU et 1 Go de RAM. Pas de quoi faire tourner grand chose d’autre que quelques containers nginx&amp;hellip; Si ça jamais ça fonctionne ?! (on y reviendra)&lt;/p&gt;
&lt;p&gt;Au delà, les prix sont similaires à ce que l’on trouve sur le marché « bon marché » (Scaleway notamment). Si on veut être un peu sérieux et comparer ce qui est comparable, on peut booter des machines avec 2vCPU et 4 Go de RAM à16$/mois l’unité (moins de ~13,5€ en ce moment).&lt;/p&gt;
&lt;h2 id="kubernetes-easy-to-install"&gt;Kubernetes easy to install
&lt;/h2&gt;&lt;p&gt;La plupart des offres managées de Kubernetes (si ce n’est toutes) viennent avec une certaine quantité de personnalisation préinstallée. Chez Azure, vous pouvez choisir parti 2 CNIs et le dashboard (ou pas). Chez Scaleway si c’est Calico qui est préinstallé ou pas.&lt;/p&gt;
&lt;p&gt;Chez CIVO, ils ont poussé le concept beaucoup plus loin, en reprenant l’idée de Rancher ou d’Openshift du « marketplace ».&lt;/p&gt;
&lt;p&gt;Avant de boostraper votre cluster, vous avez accès à tout un magasin d’applications (ni plus ni moins que des charts helm avec une icône pour cliquer dessus) et éventuellement une très petite personnalisation avec un dropdown menu (mais vraiment trivial, très peu de choix).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2021/07/03_civo_marketplace-2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Et là, pour le coup en terme d’UX je trouve ça très très malin. En quelques clics, j’ai (dé)sélectionné les composants qui m’intéressent et ils ont été préinstallés pour moi avec mon cluster.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2021/07/04_civo_security.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On peut même préinstaller des produits de sécurité, notamment Kyverno avec un ensemble de règles de sécurité préconfigurées.&lt;/p&gt;
&lt;h2 id="et-cest-pas-fini-"&gt;Et c’est pas fini !
&lt;/h2&gt;&lt;p&gt;Pour ce qui est des composants d’infrastructure, je comprend l’incentive. Pour certains devs, l’infra c’est ch***t.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Mon cluster je le veux up and running sans perte de temps, sans pour autant que mes données soient à poil sur Internet&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mais comme tout ce qui « cache » la complexité du métier d’Ops (cf mon article « Au secours, le métier d’Ops va disparaître »), la difficulté n’est pas tant le déploiement que le « day 2 operations ». Et si vous voulez modifier un paramètre, vous êtes marrons.&lt;/p&gt;
&lt;p&gt;Tout de même, préconfigurer cette partie dès le bootstrap du cluster est malin. Et ce qui est encore plus malin, c’est qu’ils ont open sourcé leur marketplace.&lt;/p&gt;
&lt;p&gt;Qu’est ce qu’ils y gagnent, me direz vous ?&lt;/p&gt;
&lt;p&gt;Et bien, s’il y a un nouveau « shiny composant » qui fait rêver tout le monde, vous pouvez aller faire une PR pour ajouter une tuile dans l’UI de CIVO. Comme ça vous bossez pour eux. Elle est pas belle la vie ? ;-p (je troll, mais je trouve ça cool, en vrai).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2021/07/07_civo_githubpr.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="et-le-cluster-il-boote-vite-"&gt;Et le cluster, il boote vite ?
&lt;/h2&gt;&lt;p&gt;C’est un peu la guéguerre entre Kubernetes managés à qui bootstrappera le control plane et les workers le plus vite. Azure met plus de 20 minutes. OVH bootstrappe le control plane en une minute mais met des plombes à sortir les VMs à cause de leur OpenStack. Exoscale fait le tout (control plane + workers) en moins de 2 minutes.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2021/07/05_civo_creating-1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;CIVO nous promet 90 secondes et c’était pas loin d’être vrai. Je ne dirai pas que c’est les plus rapides mais ils sont dans le top 3 de tous les kubes managés que j’ai pu tester, sans hésiter.&lt;/p&gt;
&lt;p&gt;Une fois le cluster opérationnel, on vous propose évidemment de télécharger votre kubeconfig et roule ma poule&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2021/07/06_civo_kubeconfig.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="mais-quest-ce-quon-peut-faire-tourner-dans-kube-avec-1-ou-4-go-de-ram-"&gt;Mais qu’est ce qu’on peut faire tourner dans Kube avec 1 (ou 4) Go de RAM ?
&lt;/h2&gt;&lt;p&gt;Le souci avec ce genre de « petites machines », c’est que si vous n’avez pas OS et kubernetes optimisés, une part non négligeable de la VM ne sera pas utilisable pour vos workloads et vous n’aurez que (dans le pire des cas) 2 Go de libre.&lt;/p&gt;
&lt;p&gt;Et c’est là toute la « &lt;em&gt;malinerie&lt;/em&gt; » d’utiliser k3s plutôt qu’un k8s vanilla. k3s est spécialement pensé pour tourner sur des petites machines (en edge notamment). J’avais pu installer un master kubernetes sur un raspberry pi 1 (model B, 1 CPU ridicule et 512 Mo de RAM) tellement l&amp;rsquo;empreinte mémoire demandée est faible.&lt;/p&gt;
&lt;p&gt;Associé à un magasin d’applications maison pré-tuné pour consommer peu (très petites requests pour fit les petites machines sans tout bloquer), on arrive avec des nodes quasiment sans overhead. Dans cet exemple, j’ai cliqué sur plusieurs composants (cert-manager, kyverno, ha-proxy, prometheus+alertmanager+grafana, metrics-server, falco). Je me retrouve avec des nodes (4vCPU 8Go) quasiment vides !&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;kubectl --kubeconfig civo-zwindler-kubeconfig top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k3s-zwindler-deadbeef-node-pool-31af 230m 5% 945Mi 12%
k3s-zwindler-deadbeef-node-pool-6609 97m 2% 471Mi 6%
k3s-zwindler-deadbeef-node-pool-e07c 141m 3% 874Mi 11%
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Du coup, pour du lab perso ou des workloads qui nécessitent très peu de puissance, l’offre de CIVO est plutôt bien positionnée. Je ne suis pas complètement convaincu de l’intérêt de l’offre extra small à 4$ qui est plus là pour la &lt;em&gt;prouesse technique&lt;/em&gt; qu’une réelle utilisation. Mais dès small ou medium, on a un service qui fonctionne, moins cher que de nombreux concurrents et surtout bien plus optimisé en terme de ratio overhead/puissance totale.&lt;/p&gt;
&lt;p&gt;Au delà de kubernetes, l’offre est quasiment inexistante. Des VMs (plus chères que les workers kubes !!! wtf) et des loadbalancer à 10$/mois (Scaleway le fait à 8€, on est dans les prix « pas cher ») et c’est tout&amp;hellip;&lt;/p&gt;
&lt;p&gt;Autant dire que c’est kubernetes ou rien. Du coup, est ce qu’il y a un marché pour ce besoin, je ne suis pas certain&amp;hellip; mais pourquoi pas ? En tout cas, bonne surprise !&lt;/p&gt;</description></item><item><title>Le blog en IPv6 : ça aurait du être simple et pourtant…</title><link>https://blog.zwindler.fr/2021/03/01/le-blog-en-ipv6-ca-aurait-du-etre-simple-et-pourtant/</link><pubDate>Mon, 01 Mar 2021 07:15:00 +0000</pubDate><guid>https://blog.zwindler.fr/2021/03/01/le-blog-en-ipv6-ca-aurait-du-etre-simple-et-pourtant/</guid><description>&lt;img src="https://blog.zwindler.fr/2021/02/ipv6-ready.webp" alt="Featured image of post Le blog en IPv6 : ça aurait du être simple et pourtant…" /&gt;&lt;h2 id="cest-lhistoire-dun-collègue-de-boulot"&gt;C’est l’histoire d’un collègue de boulot
&lt;/h2&gt;&lt;p&gt;C’est l’histoire d’un collègue de boulot, qui me dit :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dis donc zwindler, avec toute la veille que tu fais sur ton blog, comment se fait-il qu’il ne soit toujours pas accessible en IPv6 !?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Damned&amp;hellip; Il a raison le bougre !&lt;/p&gt;
&lt;p&gt;Mauvaise réponse : par flemme.&lt;/p&gt;
&lt;p&gt;Encore plus mauvaise réponse : parce que ce n’est pas aussi trivial à implémenter que ça devrait l’être&amp;hellip;&lt;/p&gt;
&lt;p&gt;Allez, je vous embarque !&lt;/p&gt;
&lt;h2 id="dabord-mon-infra"&gt;D’abord mon infra&amp;hellip;
&lt;/h2&gt;&lt;p&gt;J’vais sauter tout de suite le topo comme quoi IPv6 c’est important et surtout là depuis quasiment 25 ans, que IPv4 est dead depuis un an ou deux, qu’IPv6 c’est pas compliqué en vrai (la partie théorique j’entends ; la pratique on va en parler). De toute façon, les tweets récents de @davlgd me laissent à penser qu’un article sur &lt;a class="link" href="https://www.nextinpact.com/" target="_blank" rel="noopener"
&gt;NextInpact &lt;/a&gt;devrait sortir à ce sujet dans peu de temps ;-).&lt;/p&gt;
&lt;p&gt;J’ai changé une énième fois d’infra pour mes besoins persos et me retrouve maintenant avec un serveur hébergé à la maison pour le gros de mes besoins perso, ainsi que deux machines plus modestes (des Atom 2 cœurs, 4 Go) que je loue pour une bouchée de pain pour avoir un cluster Proxmox VE et des réplications ZFS.&lt;/p&gt;
&lt;p&gt;(Oui je ferai un article pour en parler&amp;hellip; promis&amp;hellip; un jour&amp;hellip; peut être).&lt;/p&gt;
&lt;p&gt;On commence déjà pas super bien : mon opérateur Internet ne me propose pas d’IPv6. Impossible donc de proposer mon blog en IPv6 si je l’héberge depuis chez moi.&lt;/p&gt;
&lt;p&gt;Ça tombe bien (sort of), j’ai préféré le laisser sur une des deux machines Atom que je loue, qui suffisent vu le peu de charge que représente le blog. Je pars du principe que les hébergeurs ont de meilleurs taux de dispos que ma maison bourrée de SPOF. L’histoire ne me donne pas forcément raison, mais passons.&lt;/p&gt;
&lt;h2 id="oneprovider"&gt;OneProvider
&lt;/h2&gt;&lt;p&gt;Est-ce que ces machines peuvent être en IPv6 ?&lt;/p&gt;
&lt;p&gt;Je me suis pris la tête avec le support de OneProvider à plusieurs reprises, mais punaise, ils sont tellement peu chers&amp;hellip; J’avais dit « plus jamais ! », mais des Atom à 6€ / mois pour 4 Go de RAM et un stockage correct&amp;hellip; C’est quasiment impossible de trouver mieux.&lt;/p&gt;
&lt;p&gt;Si on se contente de regarder ce qu’on a pour ce prix là, « la question elle est vite répondue ». Il n’y a pas d’IPv6 dans l’interface et on ne peut pas en commander. On est cuit&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2021/02/op-net.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="plot-twist"&gt;Plot twist
&lt;/h2&gt;&lt;p&gt;Bon ben voilà, pas de solution, fin de l’article.&lt;/p&gt;
&lt;p&gt;&amp;hellip;&lt;/p&gt;
&lt;p&gt;&amp;hellip; Mais non !&lt;/p&gt;
&lt;p&gt;Car quand on connait un peu les machines à Paris et à Amsterdam de OneProvider, on sait que ce sont en fait des serveurs de chez Online (Scaleway), vendus en marque blanche.&lt;/p&gt;
&lt;p&gt;Et là l’espoir renait car Online ne le met pas en avant sur son site directement, mais dans le wiki il est dit que&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;La totalité des réseaux Online/Dedibox est compatible IPv6, et les futurs déploiements auront également de l’IPv6 par défaut.
&lt;a class="link" href="https://documentation.online.net/fr/dedicated-server/network/ipv6/start" target="_blank" rel="noopener"
&gt;https://documentation.online.net/fr/dedicated-server/network/ipv6/start&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2021/02/ah.gif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="un-petit-mail-au-support"&gt;Un petit mail au support
&lt;/h2&gt;&lt;p&gt;Je prends mon courage à deux mains et j’écris au support, en espérant que ça ne finisse pas comme les fois précédentes à les engueuler comme du poisson pourri, car ils m’ont dit que « oui oui c’est possible » et finalement me la mette à l’envers avec des options payantes qui ne me servent à rien et qu’on ne peut pas annuler&amp;hellip;&lt;/p&gt;
&lt;p&gt;Bonne surprise, cette fois-ci :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2021/02/op-support.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;OK. On peut donc avoir un bloc en IPv6 (un /64 alors que c’est un /56 chez Online, mais on ne va pas faire les fines bouches) tout en gardant l’IPv4 (j’ai préféré leur demander confirmation, connaissant les zozos).&lt;/p&gt;
&lt;p&gt;Les seules difficultés sont donc que l’IP doit être assignée avec un client DHCP (mkay) et qu’on ne peut pas faire de rDNS. Dans mon cas, juste pour que le blog soit en IPv6, c’est suffisant.&lt;/p&gt;
&lt;p&gt;Une fois que j’ai indiqué que c’était bon pour moi, le support m’a rapidement envoyé un /64 ainsi qu’un DUID pour le DHCP.&lt;/p&gt;
&lt;h2 id="la-configuration-du-dhcp"&gt;La configuration du DHCP
&lt;/h2&gt;&lt;p&gt;A partir de là, le « fun » a pu commencer.&lt;/p&gt;
&lt;p&gt;D’abord, il a fallu trouver comment configurer &lt;strong&gt;dhclient&lt;/strong&gt; pour chopper correctement mon IPv6. Heureusement on trouve assez vite de l’aide sur le net, notamment sur le wiki d’Online (et ça tombe bien vu que je suis chez eux).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://documentation.online.net/en/dedicated-server/network/ipv6/prefix" target="_blank" rel="noopener"
&gt;documentation.online.net/en/dedicated-server/network/ipv6/prefix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Long story short; sur des distribs récentes (notamment Proxmox), le plus « simple » est de créer un service systemd qui se lancera au démarrage juste après le réseau&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat &amp;gt; /etc/systemd/system/dhclient.service &amp;lt;&amp;lt; EOF
[Unit]
Description=dhclient for sending DUID IPv6
After=network-online.target
Wants=network-online.target
[Service]
Restart=always
RestartSec=10
Type=forking
ExecStart=/sbin/dhclient -cf /etc/dhcp/dhclient6.conf -6 -P -v vmbr0
ExecStop=/sbin/dhclient -x -pf /var/run/dhclient6.pid
[Install]
WantedBy=network.target
EOF
cat /etc/dhcp/dhclient6.conf
interface &amp;#34;vmbr0&amp;#34; {
send dhcp6.client-id VOTRE:DUID;
request;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Vous remarquerez peut-être que, contrairement à l’article du wiki d’Online, je n’utilise pas l’interface réseau physique (&lt;strong&gt;enp0s20&lt;/strong&gt; dans mon cas) mais un bridge (&lt;strong&gt;vmbr0&lt;/strong&gt;). En fait, on a pas trop le choix (sauf si j’ai mal compris), car on va « brancher » nos VMs sur un bridge pour leur affecter des IPv6 et je n’ai pas réussi à faire marcher ça lorsque l’interface qui porte le /64 &lt;em&gt;n’était pas aussi le bridge&lt;/em&gt;. Si vous avez mieux, je prend les suggestions.&lt;/p&gt;
&lt;p&gt;La « blague » dans l’histoire, c’est que je n’utilise pas du tout cette configuration réseau dans laquelle l’IP de l’hyperviseur est portée par un bridge pour la partie IPv4 (&lt;a class="link" href="https://pve.proxmox.com/wiki/Network_Configuration#_masquerading_nat_with_tt_span_class_monospaced_iptables_span_tt" target="_blank" rel="noopener"
&gt;moi j’utilise ça&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Deuxième blague, impossible de faire marcher ça avec un bridge open-vswich ce qui est pourtant vachement plus fun, notamment pour la possibilité d’ajouter des liens GRE entre nodes et ainsi avoir un LAN virtuel unifié dans tout le cluster.&lt;/p&gt;
&lt;p&gt;J’ai donc dû REFAIRE tout mon fichier &lt;strong&gt;/etc/network/interfaces&lt;/strong&gt;…&lt;/p&gt;
&lt;h2 id="le-réseau-du-coup"&gt;Le réseau, du coup
&lt;/h2&gt;&lt;p&gt;J’ai suivi sans succès plusieurs tutos (dont &lt;a class="link" href="https://www.reddit.com/r/ipv6/comments/fos6f3/ipv6_proxmox_56_block_dhcpv6_vm_and_ct/" target="_blank" rel="noopener"
&gt;celui-ci&lt;/a&gt;, &lt;a class="link" href="https://www.kiloroot.com/proxmox-kimsufi-ovh-soyoustart-ipv6-host-multiple-containers-and-virtual-machines-on-a-single-kimsufi-server-using-ipv6-and-proxmox/" target="_blank" rel="noopener"
&gt;celui-là&lt;/a&gt; et &lt;a class="link" href="https://howto.zw3b.fr/linux/reseaux/howto-ipv6-proxmox-online-net" target="_blank" rel="noopener"
&gt;celui-là&lt;/a&gt;). Le dernier était pourtant particulièrement prometteur puisque utilisant à la fois Online et Proxmox&amp;hellip; mais rien n’y a fait. Je me suis coupé la patte un nombre incalculable de fois&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2021/02/oneprovider_liveres.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;trolololololo lololo lololooooo&amp;lt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto enp0s20
iface enp0s20 inet manual
auto vmbr0
iface vmbr0 inet static
address VOTRE.IP.V.4/24
gateway GATEWAY.IP.V.4
bridge-ports enp0s20
bridge-stp off
bridge-fd 0
iface vmbr0 inet6 static
address VOTRE:IP:V:6::1/64
#ONLINE.NET specific throttling
post-up ip6tables -A OUTPUT -p udp --dport 547 -m limit --limit 10/min --limit-burst 5 -j ACCEPT
post-up ip6tables -A OUTPUT -p udp --dport 547 -j DROP
allow-ovs vmbr1
iface vmbr1 inet static
... blablabla
#La partie masquerading sur un Open vSwitch comme indiquée dans https://pve.proxmox.com/wiki/Network_Configuration#_masquerading_nat_with_tt_span_class_monospaced_iptables_span_tt
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On se retrouve avec un genre de monstre de Frankenstein avec une carte enp0s20 attaché à un bridge (vmbr0) qui sert aussi de bridge pour nos containers IPv6, et d’un bridge (vmbr1) open vswitch pour ce qui reste en v4 et les communications inter-nodes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Gavé bien !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Notez les iptables v6 en « post-up » dans la partie v6 du vmbr0.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#ONLINE.NET specific throttling
post-up ip6tables -A OUTPUT -p udp --dport 547 -m limit --limit 10/min --limit-burst 5 -j ACCEPT
post-up ip6tables -A OUTPUT -p udp --dport 547 -j DROP
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;D’expérience, ça ne sert à rien. Mais &lt;a class="link" href="https://documentation.online.net/en/dedicated-server/network/ipv6/prefix#traffic_limitation_of_your_client" target="_blank" rel="noopener"
&gt;c’est conseillé par Online dans son wiki sur IPv6&lt;/a&gt;. Personnellement je n’ai vu aucun impact positif en ajoutant ces lignes.&lt;/p&gt;
&lt;h2 id="et-ça-marche-maintenant-"&gt;Et ça marche maintenant ?
&lt;/h2&gt;&lt;p&gt;Ben non, bien sûr. Il va falloir modifier quelques options dans sysctl (notamment le forwarding pour IPv6)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;vi /etc/sysctl.conf
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.proxy_ndp = 1
net.ipv6.conf.default.proxy_ndp = 1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Sur les recommandations du &lt;a class="link" href="https://documentation.online.net/en/dedicated-server/network/ipv6/slaac" target="_blank" rel="noopener"
&gt;wiki d’Online (IPv6 SLAAC)&lt;/a&gt;, j’ai rajouté les paramètres suivants :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;#Online specific (SLAAC)
net.ipv6.conf.vmbr0.autoconf = 0
net.ipv6.conf.vmbr0.accept_ra = 2
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pas sûr que ce soit très efficace, j’ai vu d’autres procédures mettre &lt;strong&gt;accept_ra&lt;/strong&gt; à 1. Je vous laisse tester les deux.&lt;/p&gt;
&lt;p&gt;Mais ça ne suffit pas, parce que quelqu’un (pas trop sûr de qui) a décidé de rajouter des paramètres par défaut qui bloquent l’IPv6 sur ces serveurs. Malin !&lt;/p&gt;
&lt;p&gt;J’ai été sauvé par ce &lt;a class="link" href="https://gist.github.com/DonSYS91/03623c2b8270fd05a76a436c55b95c50" target="_blank" rel="noopener"
&gt;Gist de DonSYS91&lt;/a&gt; (MERCI !) qui indique une partie des pièces manquantes à mon puzzle.&lt;/p&gt;
&lt;p&gt;D’abord dans &lt;strong&gt;/etc/modprobe.d/local.conf&lt;/strong&gt;, il y a une ligne ipv6 disable à 1, qu’il faut passer à 0&amp;hellip; Si vous ne changez pas cette valeur, &lt;strong&gt;peu importe ce que vous mettrez dans votre sysctl.conf, IPv6 sera systématiquement désactivé au boot !&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat /etc/modprobe.d/local.conf
# Local module settings
# Created by the Debian installer
options ipv6 disable=0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Après reboot, tout fonctionne. Je ping bien (avec &lt;strong&gt;ping6&lt;/strong&gt;) des serveurs IPv6 only et j’ai pu affecter des IPv6 à mes containers LXC.&lt;/p&gt;
&lt;h2 id="ca-ma-pas-du-tout-détendu-cette-histoire-dipv6-"&gt;&lt;strong&gt;CA M’A PAS DU TOUT DÉTENDU CETTE HISTOIRE D’IPV6 !&lt;/strong&gt;
&lt;/h2&gt;&lt;p&gt;Et encore, j’ai même pas de DNS IPv6 car OVH ne sait pas le faire sur leurs DNS !&lt;/p&gt;
&lt;p&gt;Ni du fait que dans certains cas, 90% des requêtes sont perdues, mais uniquement sur les DC2/DC3 d’Online à Paris, ce que confirment a priori plusieurs personnes qui font aussi de l’IPv6 sur des machines hostées chez Online&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2021/02/statuscake.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;And that’s what we call « flapping »&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Mais je m’en fous, le blog est accessible en IPv6.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2021/02/ipv6-ready-1.avif"
loading="lazy"
&gt;&lt;/p&gt;</description></item><item><title>Ma plateforme de travail collaboratif Nextcloud en 5 minutes</title><link>https://blog.zwindler.fr/2020/04/27/ma-plateforme-de-travail-collaboratif-nextcloud-en-5-minutes/</link><pubDate>Mon, 27 Apr 2020 06:45:00 +0000</pubDate><guid>https://blog.zwindler.fr/2020/04/27/ma-plateforme-de-travail-collaboratif-nextcloud-en-5-minutes/</guid><description>&lt;img src="https://blog.zwindler.fr/2020/04/Nextcloud_Logo.svg_.webp" alt="Featured image of post Ma plateforme de travail collaboratif Nextcloud en 5 minutes" /&gt;&lt;h2 id="cest-quoi-nextcloud-"&gt;C’est quoi Nextcloud ?
&lt;/h2&gt;&lt;p&gt;Par où commencer ? Nextcloud, c’est tellement de choses ;-)&lt;/p&gt;
&lt;p&gt;Historiquement, &lt;a class="link" href="https://nextcloud.com/" target="_blank" rel="noopener"
&gt;Nextcloud&lt;/a&gt; est un fork du projet &lt;a class="link" href="https://owncloud.org/" target="_blank" rel="noopener"
&gt;Owncloud&lt;/a&gt;, qui visait à fournir un service en ligne de stockage de fichier via une interface web. Un peu comme Dropbox, mais hébergé par vous, chez vous, et donc respectueux de votre vie privée !&lt;/p&gt;
&lt;p&gt;Mais aujourd’hui, Nextcloud c’est bien plus que ça. C’est une véritable plateforme de travail collaboratif avec certes un service de gestion, de partage et de synchronisation de fichiers entre plusieurs devices/utilisateurs, mais aussi un serveur libreoffice/collabora de l’édition de fichiers collaboratifs (Office 365/Google Docs), un serveur Talk (visioconférence), calendrier, gestion de notes et bien plus encore.&lt;/p&gt;
&lt;p&gt;La solution s’est même nettement étoffée depuis la version 18 qui vient de sortir, avec de très nombreuses extensions.&lt;/p&gt;
&lt;h2 id="pourquoi-attendre-si-longtemps-pour-en-parler-"&gt;Pourquoi attendre si longtemps pour en parler ?
&lt;/h2&gt;&lt;p&gt;La première fois que j’ai testé Owncloud, c’était en 2014 lorsque j’ai créé (sans succès) une entreprise d’infogérence spécialisée dans les outils open source. Le but était de fournir, entre autre, un service autohébergé pour justement remplacer Dropbox. Cette annecdote fera peut être sourire certains de mes lecteurs, très impliqués dans Nextcloud :-p.&lt;/p&gt;
&lt;p&gt;A l’époque, je n’avais pas du tout aimé Owncloud, que j’avais trouvé moyen en terme d’ergonomie, très lent, etc.&lt;/p&gt;
&lt;p&gt;Récemment cependant, Nextcloud a gagné beaucoup de traction et c’est tant mieux, car ça m’a forcé à rester l’outil, qui a vraiment évolué pour le mieux.&lt;/p&gt;
&lt;h2 id="et-comment-on-va-faire-pour-le-déployer-si-vite-"&gt;Et comment on va faire pour le déployer si vite ?
&lt;/h2&gt;&lt;p&gt;Ahah ! En voilà une bonne question&amp;hellip; Grosse surprise, on va déployer tout ça avec un playbook, bien sûr !&lt;/p&gt;
&lt;p&gt;Pour ceux qui ne savent pas, à chaque fois que j’installe un soft, j’automatise ça avec ansible, car j’automatise TOUT avec ansible.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/04/automate_all_the_things.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Je vous met à disposition sur &lt;a class="link" href="https://github.com/zwindler/ansible-nextcloud" target="_blank" rel="noopener"
&gt;Github&lt;/a&gt; cet ensemble de playbooks qui vous permettront d’installer un serveur Nextcloud de A à Z en partant d’un serveur Ubuntu 18.04 sur lequel vous avez un accès SSH.&lt;/p&gt;
&lt;p&gt;Et pour ceux qui n’ont pas de serveur à disposition, je vous ai également mis un playbook permettant de déployer une machine sur le cloud provider français Scaleway.&lt;/p&gt;
&lt;p&gt;Pourquoi Scaleway ? Pas parce que j’ai le moindre partenariat avec eux (pas pour l’instant en tout cas), mais parce :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ils sont français&lt;/li&gt;
&lt;li&gt;ils ont une super API et des modules Ansible qui marchent très très bien (j’ai même fais un live coding avec) avec l’inventaire ansible dynamique (ce que d’autres n’ont pas forcément)&lt;/li&gt;
&lt;li&gt;ils proposent des instances à moins de 4€ par mois, payable à l’heure, ce qui est parfait pour des petits tests&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mais n’importe quelle autre machine sous Ubuntu 18.04 fera l’affaire !&lt;/p&gt;
&lt;h2 id="créer-une-vm-sur-scaleway"&gt;Créer une VM sur Scaleway
&lt;/h2&gt;&lt;p&gt;Je ne détaillerai pas l’instanciation de la VM sur Scaleway si vous choisissez cette option, car tout est expliqué en détail sur le &lt;a class="link" href="https://github.com/zwindler/ansible-nextcloud/blob/master/README.md" target="_blank" rel="noopener"
&gt;README.md du dépôt Github&lt;/a&gt;. J’ai également abondamment parlé de &lt;a class="link" href="https://blog.zwindler.fr/recherche/?keyword=scaleway" &gt;ce sujet à l’occasion d’autres articles&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/04/scaleway_vm.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="préparer-linstallation-de-nextcloud"&gt;Préparer l’installation de Nextcloud
&lt;/h2&gt;&lt;p&gt;Avant de pouvoir installer Nextcloud sur notre nouveau serveur Ubuntu 18.04 tout neuf, il est important de choisir un nom de domaine pour notre futur service Nextcloud. Ajoutez un CNAME permettant de mapper ce nom de domaine sur l’adresse IP de votre machine virtuelle Ubuntu.&lt;/p&gt;
&lt;p&gt;Maintenant que le serveur Ubuntu 18.04 est disponible et que le futur service est résolvable, on dispose de 2 méthodes pour installer Nextcloud. Soit on lance le playbook ansible en local sur la machine Nextcloud, soit on l’installe à distance via ansible.&lt;/p&gt;
&lt;h3 id="si-on-le-lance-en-local"&gt;Si on le lance en local
&lt;/h3&gt;&lt;p&gt;Récupérer le repository &lt;a class="link" href="https://github.com/zwindler/ansible-nextcloud" target="_blank" rel="noopener"
&gt;zwindler/ansible-nextcloud&lt;/a&gt; directement sur le serveur via un &lt;code&gt;git clone&lt;/code&gt;. Nous utiliserons le paramètre &amp;ldquo;-i hosts_local&amp;rdquo; quand on exécutera &lt;code&gt;ansible-playbook&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="si-on-a-généré-une-vm-avec-scaleway"&gt;Si on a généré une VM avec Scaleway
&lt;/h3&gt;&lt;p&gt;Dans ce cas, on profitera de la fonctionnalité d’inventaire dynamique fournie par Scaleway. Nous utiliserons le paramètre &amp;ldquo;-i dynamic_inventory.yml&amp;rdquo; quand on exécutera &lt;code&gt;ansible-playbook&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="si-vous-voulez-installer-à-distance"&gt;Si vous voulez installer à distance
&lt;/h3&gt;&lt;p&gt;Il sera nécessaire de pouvoir se connecter en SSH à la machine distante mais aussi de générer un inventaire pour qu’ansible sache sur quel machine il doit se connecter. Pour le faire on créera un fichier texte avec l’IP du serveur distant, et nous utiliserons &amp;ldquo;-i hosts_distant&amp;rdquo; quand on exécutera &lt;code&gt;ansible-playbook&lt;/code&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;echo &amp;#34;IP_of_the_server&amp;#34; &amp;gt; hosts_distant
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="installer-nextcloud"&gt;Installer Nextcloud
&lt;/h2&gt;&lt;p&gt;En partant du principe que vous avez utilisé la méthode Scaleway avec l’inventaire dynamique, voilà ce que vous devrez faire :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;ansible-playbook -i dynamic_inventory.yml -u root nextcloud_install.yml
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Le playbook vous promptera pour renseigner un certain nombre de variables qui correspondent à votre installation :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;MariaDB root password: awesome_mariadb_password
Nextcloud MariaDB password: awesome_mariadb_user_password
Your domain: example.org
Nextcloud HTTPS port [8443]: 443
Nextcloud instance name (URL will be https://thisvalue.example.org) [nextcloud]: nextcloudscw
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/04/nextcloud_ansible_prompt.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;A l’issue du playbook, vous devriez pouvoir vous connecter sur votre instance pour finaliser l’installation. Lorsque vous vous connecterez pour la première fois, vous tomberez sur un écran qui vous demandera une partie des informations rentrées préalablement&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/04/nextcloudscw.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="et-la-sécurité-"&gt;Et la sécurité ?
&lt;/h2&gt;&lt;p&gt;Et oui, la sécurité pour un outil aussi sensible que vos documents, c’est important.&lt;/p&gt;
&lt;p&gt;Heureusement, Nextcloud est un outil bien packagé et un projet pour lequel la sécurité est au cœur du développement.&lt;/p&gt;
&lt;p&gt;Nextcloud met à disposition un scan de sécurité (&lt;a class="link" href="https://scan.nextcloud.com/" target="_blank" rel="noopener"
&gt;scan.nextcloud.com&lt;/a&gt;) qui vous permettra de vous tester contre un certain nombre d’attaques connues.&lt;/p&gt;
&lt;p&gt;Comme vous pouvez le voir, ça se passe plutôt bien ;-)&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/04/nextcloudscw_scan.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;De même, la configuration nginx (le frontal de notre serveur) coté TLS est elle aussi sécurisée. Par défaut, je désactive TLS 1.0 et 1.1, ce qui peut poser des soucis pour les plus vieux appareil mais permet d’obtenir un joli A+ chez SSL Labs&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/04/nextcloudscw_ssllabs_a.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Dans le cas où vous souhaiteriez les réactiver, c’est possible (il y a un flag dans le playbook) mais dans ce cas là la note sera rétrogradée à B.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2020/04/nextcloudscw_ssllabs.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Et c’est fini ! 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>