đŸ‡«đŸ‡· 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)
  • 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:

(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 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 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. 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 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 de Luc Juggery, 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 fichier yaml si vous n'ĂȘtes pas dans le mĂȘme rĂ©pertoire)
  • puis vous pourrez passer votre commande kubectl comme par exemple kubectl 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:

alt k9s

Maintenant vous ĂȘtes prĂȘts Ă  dĂ©ployer 🚀 des 🌍 webapps 😉

Last Articles

Last Updated: 24/02/2020 Ă  03:03:34