Installer K3d
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.
Si vous voulez gagner du temps, utilisez un template cloud-init.
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.
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 :