# 🇫🇷 Kit de survie Kubernetes pour les développeurs (avec K3S)
Découvrir Kubernetes avec K3S avec une vision de développeur
Nous allons voir comment créer un cluster K3S (voyez ça comme un "petit" kube - mais j'y reviens plus loin) et comment l'utiliser en tant que développeur (c'est à dire, comment déployer des applications dessus pour expérimenter avec un véritable cluster).
Tout ce qui va suivre est une compilation de ce que j'ai pu comprendre, demander, expérimenter, etc... Ne prenez pas ces textes pour argent comptant: tout ce que j'ai fait fonctionne (en tous les cas sur ma machine 😉) et j'ai réussi à faire ce que je voulais.
J'ajouterais des chapitres au fur et à mesure de mon apprentissage.
Bonne Lecture.
# Kube c'est dur! ... ou pas?
A chaque fois que j'ai essayé de me mettre à Kubernetes, j'ai rapidement abandonné car je n'arrivais pas à mettre en oeuvre mes workflows de développement habituels. J'ai souvent trouvé la documentation indigeste (est-ce que c'est parce que ça ne s'adresse pas à des développeurs? ... Ou que je suis vraiment mauvais?).
Je ne crois pas être le seul dans ce cas là. On entend souvent dire par des bien pensants de l'IT que "Kubernetes c'est de la 💩 en 🥫" et une solution pratique est de se réfugier derrière ce courant de pensées non argumentées mais bien pratique (ce que j'ai fait un moment).
Cependant (à travers mon métier, mes clients, des conférences, ...) j'ai rencontré (et rencontre encore) énormément de gens qui ont l'air d'apprécier énormément cette "chose en boîte", et qui ont même des projets qui fonctionnent bien. Il était donc temps de m'y remettre et de ne pas lâcher l'affaire.
Après une consommation excessive de livres (jamais terminés), de présentations dans des conférences, de tutos qui vous expliquent comment "monter" un cluster Kube mais c'est tout, ou d'autres comment déployer une 1ère fois votre application mais jamais comment le faire une deuxième fois, quelques trainings vidéos (dont certains plutôt pas mal), je suis arrivé aux conclusion suivantes:
- Le principe de base d'orchestrateur ultime (une application qui fait tout) de containers avec la promesse de gommer le côté "vendor lockin" des Amazon, Google, Azure, ... c'est plutôt pas mal du tout (Horacio Gonzalez @lostinbrittany a fait un très bon talk sur le sujet Multicloud ou comment ne pas mettre tous les oeufs dans le même cloud (opens new window))
- Kubernetes (managé ou pas) c'est bien d'avoir une équipe qui sait s'en servir
- Ce n'est pas aux développeurs de gérer le cluster Kube (précision du point précédent)
Par contre en tant que développeur, j'aime bien comprendre le minimume vital pour avoir la garantie que mes applications vont se déployer correctement sur la plateforme cible (Kube donc). Donc sans pour autant devenir un spécialiste, je voudrais pouvoir être capable:
- D'installer un "petit cluster" sur ma machine (et de savoir reproduire l'installation à volonté)
- De jouer un peu avec (vous savez, cette impression d'être comme en prod, mais sans le risque de tout pêter)
- De pouvoir déployer mes applications habituelles sur le cluster
- De pouvoir jouer un workflow complet de "développement" à partir de mes projets:
- je déploie une 1ère fois
- je fais des modifications, et les déploie en production
- je fais des modifications et je les déploie dans un environnement "bac à sable"
- etc ...
J'ai eu la chance de tomber sur les bonnes personnes (1) (sachantes) qui ont eu la patience de répondre à mes questions, et à toutes mes questions (c'est à dire, sans me répondre: "mais pourquoi tu veux faire ça? C'est complètement con!"). J'ai pris des notes, j'ai expérimenté (dès fois tard), pour finalement avoir des résultats. Donc, l'objectif de ce long article (en plusieurs parties) est de vous expliquer étape par étape comment arriver au même résultat que moi.
Attention: mes expérimentations ne sont pas forcément faites pour aller en production (je le répète: Ce n'est pas aux développeurs de gérer le cluster Kube) faites donc bien valider par les experts. Ce que je vous offre c'est un terrain de jeux qui j'espère vous aidera à progresser.
Remarques:
- Vous avez bien sûr le droit de n'être pas d'accord ou de poser des questions, vous pouvez le faire grâce aux issues par ici: https://gitlab.com/learn-k3s/documentation/issues (opens new window)
- Vous pouvez aussi contribuer https://gitlab.com/learn-k3s/documentation/-/merge_requests (opens new window)
(1) Remerciements pour diverses choses de valeurs qui ont contribuées fortement à mes explorations:
# Déployer son propre cluster Kube (avec plusieurs nodes) en local grâce à K3S
Pour ceux qui me connaissent, je suis partisan de tout faire en local quand c'est possible. L'objectif de cette partie et de vous expliquer comment créer un cluster Kube sur votre propre machine et ceci de la manière la plus simple possible. Et il faut que cela soit le plus reproductible possible (pourvoir se planter et recommencer rapidement facilite le cycle d'apprentissage). Je vous livre donc ma méthode (libre à vous de l'adapter, d'en choisr une autre, ...)
Pour mon cas personnel, j'ai choisi d'utiliser le projet K3S (opens new window) de chez Rancher qui est une distribution "allégée" de Kubernetes, mais complètement fonctionnelle et largement suffisante pour mes besoins (décrits en introduction). L'avantage de K3S, c'est qu'il ne demande que très peu de ressource, vous pourre donc l'utiliser même sur des machines peu puissantes (mais si vous avez 8Go de RAM c'est bien)
Je ferais "tourner" mon cluster dans une VM grâce à Multipass (opens new window) de chez Canonical qui est un orchestrateur de VM Ubuntu existant pour OSX, Windows 10 et certaines distributions Linux.
Le script shell que j'utilise n'a été testé que sur Mac, mais les étapes sont faciles à reproduire à la main pour Windows (j'accepte toute contribution d'utilisateur Windows bien sûr pour compléter cet article 😉)
# Pré-requis
Il faut installer Multipass (opens new window). Vous trouverez toutes les informations nécessaires ici:
- Pour Linux: https://multipass.run/docs/installing-on-linux
- Pour Mac: https://multipass.run/docs/installing-on-macos (la bersion la plus simple étant d'utiliser
brew
) - Pour Windows: https://multipass.run/docs/installing-on-windows
Vous devez aussi installer la CLI Kubernetes KubeCtl (opens new window) sur votre poste: https://cloud.google.com/kubernetes-engine/docs/quickstart
# Installation du Cluster
Je me suis largement inspiré de l'excellent article Local K3s Cluster Made Easy With Multipass (opens new window) de Luc Juggery (opens new window), donc je vous livre mon script (pour les explications détaillées, l'article de Luc est très bien)
Commencez par céer un répertoire, et dans ce répertoire, ajoutez un fichier de configuration cluster.config
(c'est ma façon de faire, mais vous pouvez bien sûr faire autrement):
node1_name="basestar";
node2_name="raider-one";
node3_name="raider-two";
Et au même endroit, créez un fichier create.cluster.sh
(et donnez lui les droits d'exécution: chmod +x create.cluster.sh
):
#!/bin/sh
eval $(cat cluster.config)
multipass launch -n ${node1_name} --cpus 2 --mem 2G
multipass launch -n ${node2_name} --cpus 2 --mem 2G
multipass launch -n ${node3_name} --cpus 2 --mem 2G
# Initialize K3s on node1
echo "👋 Initialize 📦 K3s on ${node1_name}..."
multipass --verbose exec ${node1_name} -- sh -c "
curl -sfL https://get.k3s.io | sh -
"
TOKEN=$(multipass exec ${node1_name} sudo cat /var/lib/rancher/k3s/server/node-token)
IP=$(multipass info ${node1_name} | grep IPv4 | awk '{print $2}')
echo "😃 📦 K3s initialized on ${node1_name} ✅"
echo "🤫 Token: ${TOKEN}"
echo "🖥 IP: ${IP}"
# Join node2 and node3 to the Cluster
echo "👋 Join ${node2_name} and ${node3_name} to the Cluster"
# Joining node2
multipass --verbose exec ${node2_name} -- sh -c "
curl -sfL https://get.k3s.io | K3S_URL='https://$IP:6443' K3S_TOKEN='$TOKEN' sh -
"
echo "😃 ${node2_name} has joined the Cluster ✅"
# Joining node3
multipass --verbose exec ${node3_name} -- sh -c "
curl -sfL https://get.k3s.io | K3S_URL='https://$IP:6443' K3S_TOKEN='$TOKEN' sh -
"
echo "😃 ${node3_name} has joined the Cluster ✅"
multipass exec ${node1_name} sudo cat /etc/rancher/k3s/k3s.yaml > k3s.yaml
sed -i '' "s/127.0.0.1/$IP/" k3s.yaml
Il ne vous reste plus qu'à lancer ./create.cluster.sh
🖐 Attention les 2 lignes ci-dessous du script:
multipass exec ${node1_name} sudo cat /etc/rancher/k3s/k3s.yaml > k3s.yaml
sed -i '' "s/127.0.0.1/$IP/" k3s.yaml
vont permettre de copier la configuration kubernetes de la VM vers votre poste ainsi que de modifier l'adresse IP avec la valeur de l'IP de de la VM. Ainsi lorsque de votre poste (donc à l'extérieur de la VM) vous voudrez passer des commandes avec KubeCtl vous devrez:
- passez cette commande:
export KUBECONFIG=$PWD/k3s.yaml
(modifiez le chemin vers le fichieryaml
si vous n'êtes pas dans le même répertoire) - puis vous pourrez passer votre commande
kubectl
comme par exemplekubectl top nodes
👋 Vous trouverez tous les scripts nécessaires ici: https://gitlab.com/learn-k3s/create-cluster
# Le cluster "tourne"
Si tout c'est bien passé (normalement, si votre connexion internet est bonne, vous en avez pour 3 à 5 minutes), vous devriez trouver le fichier de configuration de votre cluster à la racine de votre répertoire: k3s.yaml
(qui va permettre à kubectl
) de se connecter au cluster.
Et si vous n'avez pas oublié d'installer kubectl
sur votre machine hôte, si vous tapez les commandes suivantes:
export KUBECONFIG=./k3s.yaml
kubectl top nodes
Vous allez obtenir la liste des nodes(noeuds) de votre cluster:
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
basestar 101m 2% 702Mi 8%
raider-one 15m 0% 267Mi 6%
raider-two 19m 0% 265Mi 6%
Remarque: si vous obtenez le message
error: metrics not available yet
c'est que le cluster n'a pas fini de démarrer. Attendez 2,3 minutes avant de re-essayer.
Vous avez donc fait un grand pas, vous avec un (petit) cluster kube qui tourne sur votre machine
# Arrêter, Démarrer le cluster
Vous trouverez les scripts nécessaires dans ce repository: https://gitlab.com/learn-k3s/create-cluster
# Outillage: K9S
K3S n'embarque pas de dashboard (même s'il est possible de l'installer), mais pour la suite nous n'en n'aurons pas besoin. A la place nous allons utiliser un outil smilaire mais en mode texte, dont vous ne pourrez plus vous passer, je veux parler de K9S: https://github.com/derailed/k9s
K9S va vous permettre de vous "promener" dans votre cluster, de voir l'état de vos déploiements, et beaucoup d'autres choses. La procédure d'installation est simple (vous trouverez tout ce qu'il fauut dans le README
du projet).
Tapez les commandes suivantes:
export KUBECONFIG=./k3s.yaml
k9s --all-namespaces
Vous obtiendrez ceci:
Maintenant vous êtes prêts à déployer 🚀 des 🌍 webapps 😉
Last Articles
- 🇫🇷 Type Result en Kotlin | 2020-10-31 | Kotlin
- 🇫🇷 Type Result en Kotlin | 2020-10-31 | Kotlin
- 🇬🇧 Every GitLab Page deserves a real CI/CD | 2020-07-23 | GitLab CI
- 🇫🇷 Lit-Element, commencer doucement | 2020-07-20 | WebComponent
- 🇬🇧 Build quickly and host easily your Docker images with GitLab and GitLab CI | 2020-06-02 | GitLab CI
- 🇬🇧 Deploy quickly on Clever Cloud with GitLab CI | 2020-05-31 | GitLab CI
- 🇫🇷 Borg Collective, mes jouets pour apprendre Knative | 2020-05-30 | Knative
- 🇬🇧 Borg Collective, Toys to learn Knative | 2020-05-30 | Knative
- 🇫🇷 M5Stack, une petit device IOT bien sympathique, programmable en Python | 2020-05-09 | IOT
- 🇫🇷 Knative, l'outil qui rend Kubernetes sympathique | 2020-05-02 | kubernetes