Installer un cluster Kubernetes avec sa version ultra-light K3S de Rancher

Introduction: Pourquoi K3S plutôt que K8S ? K3s est une version ultra-light de Kubernetes développée par Rancher. Il ne nécessite que 40MB d’espace disque et 512MB de RAM pour démarrer car il se destine avant tout pour les équipements légers comme ceux de l’IoT, des serveurs de transports edge, des RaspberryPi entre autre. .

Que contient cette distribution:

  • Tous les composants Kubernetes (kube-apiserver, kube-controller-manager, kube-scheduler, kubelet, kube-proxy
  • Docker est remplacé par containerd
  • Pour le réseau on retrouve Flannel, CoreDNS
  • Pour la gestion d’Ingress Traefik accompagné d’un simple loadBalancer
  • Par contre les plugins des cloud providers et de stockage ont été enlevés.
  • Sqlite3 remplace etcd.

Tester K3S sur un cluster de VM Ubuntu

Pour ce test je vais utiliser une machine hote ubuntu sur laquelle je vais provisionner 3 VM (1 master + 2 workers) avec Multipass. Personnellement je l’utilise sur 2 mini pc: 1 KODLIX GN41 équipé d’un céléron N41000 et un autre d’un Atom Z8350

En premier lieu il faut installer multipass et kubectl:

sudo snap install --beta --classic multipass
sudo snap install --classic kubectl

Ensuite provisionnons nos 3 VM (pour le serveur plus sage de mettre 1GB de Ram) :

multipass launch --name master --cpus 1 --mem 1024M --disk 5G
multipass launch --name worker1 --cpus 1 --mem 512M --disk 5G
multipass launch --name worker2 --cpus 1 --mem 512M --disk 5G

Installons le k3s en mode server sur le node master et récupérons son adresse et le Token:

multipass exec master -- /bin/bash -c "curl -sfL https://get.k3s.io | sh -"
export K3S_IP_SERVER="https://$(multipass info master | grep "IPv4" | awk -F’ ’ ’{print $2}’):6443"
export K3S_TOKEN="$(multipass exec master -- /bin/bash -c "sudo cat /var/lib/rancher/k3s/server/node-token")"

Maintenant installons l’agent k3s sur nos 2 nodes workers:

multipass exec worker1 -- /bin/bash -c "curl -sfL https://get.k3s.io | K3S_TOKEN=${K3S_TOKEN} K3S_URL=${K3S_IP_SERVER} sh -"
multipass exec worker2 -- /bin/bash -c "curl -sfL https://get.k3s.io | K3S_TOKEN=${K3S_TOKEN} K3S_URL=${K3S_IP_SERVER} sh -"

Un petit controle de l’état des nodes du cluster :

multipass exec master sudo kubectl get nodes

NAME STATUS ROLES AGE VERSION worker1 Ready worker 6m15s v1.15.4-k3s.1 master Ready master 8m9s v1.15.4-k3s.1 worker2 Ready worker 11s v1.15.4-k3s.1

Pour administrer nous allons copier la config sur le host :

multipass mount $HOME master
multipass exec master -- /bin/bash -c "sudo cp /etc/rancher/k3s/k3s.yaml /home/bob/.kube"
multipass umount master
export KUBECONFIG=${HOME}/.kube/k3s.yaml
sed -ie s,https://127.0.0.1:6443,${K3S_IP_SERVER},g ${HOME}/.kube/k3s.yaml

Maintenant vous pouvez utiliser les commandes classiques de kubectl:

kubectl get nodes
kubectl get pod --all-namespace -o wide
NAMESPACE     NAME                         READY   STATUS      RESTARTS   AGE   IP          NODE      NOMINATED NODE   READINESS GATES
kube-system   coredns-66f496764-vxsg2      1/1     Running     0          20m   10.42.0.3   master    <none>           <none>
kube-system   helm-install-traefik-8cc6s   0/1     Completed   0          20m   10.42.0.2   master    <none>           <none>
kube-system   svclb-traefik-bmx4q          3/3     Running     0          19m   10.42.0.4   master    <none>           <none>
kube-system   traefik-d869575c8-ln8fz      1/1     Running     0          19m   10.42.0.5   master    <none>           <none>
kube-system   svclb-traefik-26k57          3/3     Running     0          18m   10.42.1.2   worker1   <none>           <none>
kube-system   svclb-traefik-rjjvx          3/3     Running     0          12m   10.42.2.2   worker2   <none>           <none>

Vraiment light cette version de kubernetes ! On pourrait en plus virer helm qui n’est pas des plus secure !


Alimenter un blog comme celui-ci est aussi passionnant que chronophage. En passant votre prochaine commande (n'importe quel autre article) au travers des liens produits ci-contre, je touche une petite commission sans que cela ne vous coûte plus cher. Cela ne me permet pas de gagner ma vie, mais de couvrir les frais inhérents au fonctionnement du site. Merci donc à vous!

comments powered by Disqus