Installer K3d

Découvrons ensemble K3d, un mix entre K3s et Docker, idéal pour déployer facilement vos pods en local.

Installer K3d
kubernetes k3s docker

Au sommaire :

  • 1-Qu'est-ce que K3d ?
  • 2-Prérequis
  • 3-Installation

1-Qu'est-ce que K3d ?

K3d est un wrapper qui permet d’exécuter non pas un mais plusieurs clusters K3s dans des conteneur Docker.

Il existe bien Kind et Minikube pour du développement local mais K3d surclasse haut la main ces deux outils.

C'est l'outil rêvé pour manipuler Kubernetes en local et ce, sans laisser de traces

K3d est composé d'un binaire se logeant dans /usr/local/bin et se sert de Docker pour créer et détruire des clusters avec une simplicité enfantine.

2-Prérequis

Il vous faudra une machine virtuelle sous Ubuntu Server 22.04 LTS.

Voici le guide pour ceux qui veulent repartir de zéro.

Virtualiser Ubuntu Server 22.04 LTS sur Proxmox VE
Guide d’installation de Ubuntu Server 22.04 LTS sur Proxmox VE avec mes meilleurs réglages.

Si vous voulez gagner du temps, utilisez un template cloud-init.

Initialiser vos machines virtuelles avec Cloud-init sur Proxmox VE
Guide d’installation de Cloud-Init qui va vous permettre d’automatiser vos déploiements

Optionnel mais si vous avez une instance Pi-Hole à domicile et que Unbound est activé, pensez à ajouter les entrées DNS pour vos nœuds K3s, cela vous évitera d'indiquer les adresses IP.

Installer Pi-hole avec LXC
Gui d’installation de pi-hole dans un conteneur LXC

3-Installation

Installez le binaire de K3d sur votre poste avec la commande "wget"

wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash

Ou bien avec la commande "curl"

curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash

Il sera installé dans /usr/local/bin donc pas besoin de la commande "sudo" pour pouvoir l'utiliser.

Vérifiez la version de K3d.

k3d version

Contrairement à K3s, nul besoin d'exporter une configuration.

Par contre, kubectl n'est pas fournis donc il vous faudra l'installer manuellement.

Installer kubectl

Avec la commande "curl", récupérez le binaire de kubectl.

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

C'est optionnel mais vous pouvez également vérifier le checksum du binaire (c'est une bonne habitude à prendre en compte).

Récupérez le checksum.

curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"

Et vérifiez si cela correspond.

echo "$(cat kubectl.sha256)  kubectl" | sha256sum --check

Enfin, appliquez les droits 755 au fichier (lecture/écriture/exécution pour l'utilisateur root, lecture/écriture pour les personnes du groupe et les personnes extérieures).

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

Désormais vous avez K3d et kubectl installé sur votre poste.

Créer et détruire un cluster

Pour créer un cluster, voici la marche à suivre :

  • Indiquez un nom à votre cluster (tech2rue pour l'exemple)
  • Exposer le port 6443 de l'API
  • Créer un control plane et cinq agents
  • Créer une plage de ports comprise entre 30700 et 30800 sur le control plane (server:0)

Note : si vous avez ajouter votre utilisateur au groupe "docker" (voir prérequis), pas besoin d'utiliser la commande "sudo" pour manipuler K3d.

k3d cluster create tech2rue --api-port 6443 -s=1 -a=5 -p "30700-30800:30700-30800@server:0"

Note : si Docker est absent, voici le message qui s'affichera (le d de K3d signifie Docker, logique).

Si vous tapez la commande "docker ps", vous verrez qu'ils apparaîtrons bien comme des conteneurs.

Pour détruire le cluster, rien de plus simple.

k3d cluster delete tech2rue

Quand on pense à la complexité d'un K8s "from scratch".

Pour visualiser tout les pods, services, namespace et custom ressources, tapez la commande suivante.

kubectl get pods,svc,ns,crd --all-namespaces

Déployer une application

Vous allez déployer l'application Jellyfin. Créez un fichier "jelly-deploy.yml" en indiquant les informations suivantes.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jellyfin 
spec:
  replicas: 3 
  selector: 
    matchLabels: 
      app: jellyfin
  template: 
    metadata:
      labels:
        app: jellyfin
    spec: 
      containers:
      - name: jellyfin
        image: linuxserver/jellyfin
        ports:
        - containerPort: 8096

Puis déployez-le.

kubectl apply -f jelly-deploy.yml

Ensuite, exposez le pod avec le fichier service "jelly-svc.yml" en indiquant dans "nodePort" un port compris dans la plage entre 30700 et 30800 (30796 pour l'exemple).

apiVersion: v1
kind: Service
metadata:
  name: jellyfin
spec:
  selector:
    app: jellyfin
  type: NodePort
  ports:
  - port: 8096
    targetPort: 8096
    nodePort: 30796

Déployez le fichier.

kubectl apply -f jelly-svc.yml

Tapez "localhost:30796" et vous devriez accéder à l'application.

Vous pouvez également d'une simple commande déployer Portainer à partir d'un lien web.

kubectl apply -n portainer -f https://downloads.portainer.io/ce2-16/portainer.yaml

Tapez "localhost:30779" et vous devriez accéder à l'application.

Amusez-vous à lire la documentation et à expérimenter Kubernetes en local. Clairement, vous n'avez aucune excuse pour ne pas apprendre davantage. Entre la documentation, les outils, l'écosystème et le nombre d'applications conteneurisés qu'on peux trouver dans les différents registry, il y a de quoi faire.

Sources :

k3d
Little helper to run Rancher Lab’s k3s in Docker
K3s vs K3d
K3s and k3d are lightweight Kubernetes distributions that allow you to quickly deploy production-level Kubernetes in your local environments without much storage or network requirements.
K3d - gérer les clusters k3s avec k3d.
Qu’est-ce que K3s ?k3s est une distribution Kubernetes légère qui est optimisée pour les périphériques périphériques. À mon avis, il est également parfait pour le développement local de vos microservices k8s. Mais est-il vraiment léger? OUI! Les gens de rancher labs ont fait un excellent travail.…
Install and Set Up kubectl on Linux
Before you begin You must use a kubectl version that is within one minor version difference of your cluster. For example, a v1.26 client can communicate with v1.25, v1.26, and v1.27 control planes. Using the latest compatible version of kubectl helps avoid unforeseen issues. Install kubectl on Linux…
Exposing Services - k3d
Little helper to run Rancher Lab’s k3s in Docker