Page cover

K3s

K3s est une distribution de Kubernetes conçue pour être légère et simple à installer, ce qui la rend particulièrement adaptée pour les environnements avec des ressources limitées.

Qu'est-ce que K3s ?

K3s est une distribution de Kubernetes allégée développée par Rancher Labs (désormais faisant partie de SUSE). Elle est conçue pour être rapide à installer, ne nécessitant qu'un seul binaire de moins de 100 Mo. K3s supprime les pilotes non essentiels et des fonctionnalités facultatives pour simplifier son installation. Une autre solution aurait été d'installer RKE2 qui est une autre distribution de Kubernetes par Rancher et qui est une évolution de K3s conçue pour etre plus stricts dans les environnements de productions et plus complet.

Préparation du serveur Ubuntu

Notre serveur sera une serveur Ubuntu 24.04 LTS.

Ajouter une ip fixe au serveur:

sudo nano /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        eth0:
            dhcp4: no
            addresses: [192.168.245.100/24]
            gateway4: "192.168.245.1"
            optional: true
            nameservers:
               addresses: [8.8.8.8,8.8.4.4]
    version: 2

Appliquer la configuration avec la commande

sudo netplan apply

Nous devons maintenant créer un fichier de configuration qui sert à modifier les paramètres du noyau linux.

cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
EOF
  • net.bridge.bridge-nf-call-iptables = 1: Active le filtrage des paquets IP à travers les ponts réseau (bridges) par iptables. Cela permet à iptables de filtrer et de manipuler le trafic des conteneurs gérés par Kubernetes, essentiel pour implémenter des politiques de sécurité au niveau du réseau.

  • net.ipv4.ip_forward = 1: Active le routage IP, permettant au serveur de fonctionner comme un routeur pour transmettre le trafic IP entre les interfaces réseau. C'est crucial pour le fonctionnement des environnements de réseau dans Kubernetes, où différents pods et services peuvent avoir besoin de communiquer à travers diverses interfaces et réseaux.

Si vous faites de l'IPV6 vous pouvez rajouter

net.bridge.bridgr-nf-call-ip6tables = 1

Appliquer votre fichier

sudo sysctl --system

Installer les dépendances et packages nécessaires.

sudo apt-get update && sudo apt-get install -y net-tools apt-transport-https ca-certificates curl
sudo apt install nfs-common # Pour les montages NFS

Installation de K3s

Nous allons suivre l'installation de base qui se trouve sur le site de documentation K3s

Serveur unique

Voici la ligne de commande pour lancer l'installation.

curl -sfL https://get.k3s.io | sh -

Cela installation le service K3s qui sera lancé automatiquement au boot, ainsi que les utilitaires comme kubectl, crictl, ctr, k3s-killall.sh et k3s-uninstall.sh

Votre kubeconfig se trouvera dans /etc/rancher/k3s/k3s.yaml

Serveur cluster

Si vous devez ajouter d'autres nœuds comme des agents vous devrez récupérer le token sur votre server master dans ce fichier /var/lib/rancher/k3s/server/node-token

Pour configurer d'autres serveurs vous devrez utiliser cette commande:

curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -

Cela définira l'url du cluster ainsi que le token qui sera partager entre tous.

Configuration de base

local-patch directory

Le local-path dans le contexte de Kubernetes, et plus spécifiquement dans des distributions comme K3s, se réfère à un type de provisionneur de stockage persistant. Ce provisionneur permet aux clusters Kubernetes de facilement utiliser le stockage disponible sur les nœuds locaux pour stocker des données de manière persistante, sans nécessiter des solutions de stockage externes ou réseau complexes

Par défaut le répertoire par défaut est /var/lib/rancher/k3s/storage, si comme moi vous voulez le déplacer sur un autre répertoire comme /opt/local-path voici comment faire:

  • Création du répertoire

sudo mkdir -p /opt/local-path
sudo chown -R root:root /opt/local-path
sudo chmod -R 755 /opt/local-path
  • Modification du ConfigMap

kubectl edit configmap local-path-config -n kube-system

et remplacer

{
  "nodePathMap":[
    {
      "node":"DEFAULT_PATH_FOR_NON_LISTED_NODES",
      "paths":["/var/lib/rancher/k3s/storage"]
    }
  ]
}

par

{
  "nodePathMap":[
    {
      "node":"DEFAULT_PATH_FOR_NON_LISTED_NODES",
      "paths":["/opt/local-path"]
    }
  ]
}
  • Trouver le pod local-path-provisioner

# kubectl get pods -n kube-system
NAME                                      READY   STATUS      RESTARTS      AGE
coredns-6799fbcd5-nrdl5                   1/1     Running     0             52m
helm-install-traefik-crd-4npw2            0/1     Completed   0             52m
helm-install-traefik-wtqx9                0/1     Completed   1             52m
metrics-server-54fd9b65b-gz96d            1/1     Running     0             52m
svclb-traefik-4c86d401-lzvtn              2/2     Running     0             51m
traefik-7d5f6474df-n4nbf                  1/1     Running     0             51m
  1/1     Running     4 (31m ago)   32m
  • Relancer le pod

kubectl delete pod local-path-provisioner-6c86858495-bkbvv -n kube-system

pout tester vous pouvez créer le fichier pvc.yaml et pod.yaml puis les exécuter sur le noeud en question

Vous pouvez utiliser ces commandes pour vérifier:

kubectl get pv
kubectl get pvc

MetalLB

Si vous comptez installer MetalLB sur K3s, vous devrez désactiver le service loadbalancer nommé Klipper puis suivre mon installation.

deux méthodes s'offre à vous, soit le désactiver lors de l'installation ou alors modifier le fichier de service k3s.service tous les deux avec la commande --disable=servicelb

Editez le fichier /etc/systemd/system/k3s.service

remplacer

...
ExecStart=/usr/local/bin/k3s \
    server \

par

...
ExecStart=/usr/local/bin/k3s \
    server --disable servicelb \

une fois fait relancer le service avec la commande:

sudo systemctl daemon-reload && sudo systemctl restart k3s

Fin

Je ne vais pas m'étaler sur toutes les configurations mais vous retrouver tout le nécessaire ici

Mis à jour