À la fin de ce tutoriel, vous aurez un cluster k3s mono-nœud, une app démo derrière Traefik, des manifests versionnés, un snapshot de sauvegarde et un pitch entretien clair — un lab qui prouve des skills, pas une pile de screenshots.
Niveau : Intermédiaire débutant · Temps estimé : 55–75 min · Versions cibles : k3s stable · API Kubernetes 1.29+ · Linux (Ubuntu/Debian) · kubectl · Dernière vérification : 2026-09-11 · Region cloud (portfolio AWS) :
ca-central-1Slug :
wow-homelab-k3s· Série : WOW (42/50) · Mot-clé SEO : homelab k3s · Publish : HOLD← Précédent : Dev Containers + remote SSH · → Suivant : FinOps AWS · Aussi : Architecture Kubernetes · kubeadm · Argo CD
Prérequis
- Machine Linux lab (NUC, VM, Pi 4/5 8 Go, laptop Ubuntu) avec
sudoet réseau pour pull d’images - Bases conteneurs + K8s — Docker vs Kubernetes · Architecture Kubernetes
- Compte GitHub pour un dépôt public de manifests
- Optionnel : profil AWS
labenca-central-1pour un projet cloud à côté — Démarrer avec AWS - Coût : ~0 € hors électricité. Aucun EKS « pour tester »
uname -a && free -h && df -h /
# 2 vCPU / 4 Go RAM recommandés
Ce que nous allons construire
Homelab k3s (WOW 42/50)
├── Install mono-nœud + kubeconfig user
├── Traefik + Ingress HTTP lab
├── App : Deployment + Service + Ingress
├── Repo Git (manifests + README pitch)
├── Snapshot backup léger
└── Check-list entretien + teardown
(Schéma — alt : « Homelab k3s : nœud Linux, Traefik, app Ingress, repo Git portfolio ».)
Objectif : un artefact racontable — architecture, trade-offs, incident simulé, preuves Git. Gardez ce fil conducteur : chaque commande du lab doit pouvoir devenir une phrase d’entretien.
Étape 1 — Pourquoi k3s pour un homelab ?
Un recruteur cherche de la pratique : API K8s, networking, ingress, day-2, et des choix assumés.
| Option | Idéal pour | Limite entretien |
|---|---|---|
| kind / k3d | CI, labs jetables | Peu de « vrai » OS sous le cluster |
| minikube | Découverte | Moins persistant |
| kubeadm | CKA / multi-nœuds | Plus lourd en solo — guide |
| k3s | Homelab durable, ARM/x86 | Distro opinionated (Traefik, datastore léger) |
k3s : Kubernetes certifié léger, un binaire, Traefik inclus. Idéal pour un lab qui reste allumé et que vous savez décrire trois mois plus tard.
Pitch : « k3s pour un control plane léger mono-nœud, API standard, Ingress Traefik out-of-the-box. »
Étape 2 — Installer k3s (mono-nœud)
curl -sfL https://get.k3s.io | sh -
sudo systemctl status k3s --no-pager
sudo k3s kubectl get nodes
sudo k3s kubectl get pods -A
Attendu : nœud Ready, pods système (coredns, traefik, local-path…) Running. Vérifiez toujours l’URL/docs officielles avant un usage semi-prod.
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown "$USER:$USER" ~/.kube/config
chmod 600 ~/.kube/config
export KUBECONFIG=~/.kube/config
kubectl get nodes -o wide
k3d reste utile en CI (k3s dans Docker). En entretien : outil jetable, pas le substitut unique d’un homelab serveur.
Étape 3 — Durcir le minimum
Homelab ouvert sur Internet = anti-pattern. Sur LAN :
- Firewall : SSH + 80/443 seulement si besoin ; clés SSH only
- kubeconfig
chmod 600— jamais commit du fichier réel - Pas de ServiceAccount admin dans le repo portfolio
- Traefik en HTTP lab / TLS local tant que le nœud n’est pas volontairement public
- Channel stable + reboots contrôlés
Documentez dans le README : hypothèses réseau, version k3s, ce qui n’est pas exposé. La conscience du risque compte en entretien.
Étape 4 — App démo entretien-ready
kubectl create namespace demo
# manifests/demo-app.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: whoami
namespace: demo
labels: { app: whoami, owner: homelab, env: lab }
spec:
replicas: 2
selector:
matchLabels: { app: whoami }
template:
metadata:
labels: { app: whoami }
spec:
containers:
- name: whoami
image: traefik/whoami:v1.10.2
ports: [{ containerPort: 80 }]
resources:
requests: { cpu: 50m, memory: 64Mi }
limits: { cpu: 200m, memory: 128Mi }
readinessProbe:
httpGet: { path: /, port: 80 }
initialDelaySeconds: 3
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: whoami
namespace: demo
spec:
selector: { app: whoami }
ports: [{ port: 80, targetPort: 80 }]
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: whoami
namespace: demo
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
spec:
rules:
- host: whoami.lab.local
http:
paths:
- path: /
pathType: Prefix
backend:
service: { name: whoami, port: { number: 80 } }
kubectl apply -f manifests/demo-app.yaml
kubectl -n demo rollout status deploy/whoami
kubectl -n demo get deploy,svc,ingress,pods
# /etc/hosts : whoami.lab.local → IP du nœud
curl -sH 'Host: whoami.lab.local' http://127.0.0.1/ | head
Ajoutez ConfigMap + Secret placeholder (jamais de vrai secret dans Git) pour montrer la séparation config/secrets — pont vers Vault / SOPS plus tard.
Étape 5 — GitOps léger et portfolio
homelab-k3s/
├── README.md
├── manifests/demo-app.yaml
├── docs/architecture.md
└── scripts/snapshot.sh
Versionnez les manifests, pas le kubeconfig. README : schéma, commandes de vérif, section « Ce que j’ai appris » (CrashLoop, Host Ingress manquant, rollback).
Niveau suivant : Argo CD sur ce repo. Phrase clé : « mon lab est déclaratif ; revert Git = rollback ».
Option cloud : un mini projet en ca-central-1 (S3 + OIDC) à côté — FinOps — sans mélanger les factures.
Étape 6 — Snapshot et day-2
sudo k3s etcd-snapshot save --name lab-$(date +%Y%m%d) 2>/dev/null ||
sudo tar -C /var/lib/rancher/k3s -czf ~/k3s-lab-$(date +%Y%m%d).tgz server/db
À pratiquer et raconter : kubectl rollout undo, probes/resources, upgrade channel k3s (lisez les notes). Drain/uncordon si second nœud.
Étape 7 — Pitch entretien (30–45 s)
- Contexte — k3s mono-nœud, API standard, Traefik inclus
- Preuve — whoami ×2, Ingress, Git, snapshot
- Trade-off — k3s footprint ; kubeadm/EKS si multi-nœuds / managé
- Incident — mauvais tag →
describe/logs→ rollback - Suite — GitOps, OPA, ou obs selon le poste
Lien GitHub + 1 schéma. Évitez « j’ai suivi YouTube » sans artefacts. Voir Entretien DevOps 2026 et Portfolio GitHub.
Nettoyage
kubectl delete ns demo --ignore-not-found
# /usr/local/bin/k3s-uninstall.sh # reset lab complet
Toute ressource AWS portfolio : delete le jour même en ca-central-1 (tags Owner=homelab).
Coûts
| Poste | Ordre de grandeur |
|---|---|
| k3s local | ~0 € (électricité) |
| EKS « pour comparer » | ~0,10 USD/h — éviter ici |
| S3 portfolio optionnel | cents si vide + lifecycle |
Erreurs fréquentes
| Symptôme | Cause | Correction |
|---|---|---|
| connection refused | kubeconfig / k3s down | systemctl status k3s ; KUBECONFIG |
| Ingress 404 | Host / hosts | Aligner Host: et règle ; curl -H |
| Pods Pending | CPU/disk | describe pod ; baisser requests |
| Permission denied | kubeconfig root | Copie ~/.kube/config + chmod 600 |
| Secrets dans Git | Fuite | Rotate ; placeholders only |
| Exposé 0.0.0.0/0 | Risque | LAN + firewall |
Quiz (5 questions)
1. k3s en homelab sert surtout à :
– A. Remplacer Git
– B. Un Kubernetes léger, footprint bas
– C. Facturer AWS
2. Dans le repo portfolio on versionne :
– A. Le kubeconfig admin
– B. Manifests + README sans secrets
– C. Les clés SSH
3. Traefik sur k3s sert typiquement à :
– A. Compiler Go
– B. L’Ingress / reverse-proxy
– C. Remplacer etcd
4. Region lab DEH pour extras AWS :
– A. us-east-1
– B. ca-central-1
– C. eu-west-3
5. Preuve entretien la plus forte :
– A. Une capture isolée
– B. Repo + architecture + incident/rollback
– C. « J’aime Kubernetes »
Réponses : 1‑B · 2‑B · 3‑B · 4‑B · 5‑B
FAQ
k3s suffit-il pour le CKA ?
Pour beaucoup de labs API, oui. Ajoutez kubeadm multi-nœuds — installer kubeadm.
kind/k3d ou k3s ?
kind/k3d : CI jetable. k3s : homelab persistant. Les deux se complètent.
HA etcd dès le jour 1 ?
Non. Mono-nœud + snapshots d’abord.
Exposer le lab sur Internet ?
Sans tunnel, auth forte et patching : non. Préférez LAN / VPN.
Pourquoi ca-central-1 ici ?
Standard DevOps Elastic Hayway pour le cloud. Le cluster k3s reste local.
Quelle taille de machine ?
4 Go RAM confortable ; 8 Go avec monitoring. Sur Pi, surveillez SD et thermals.
Pour aller plus loin
- Installer Kubernetes kubeadm
- Argo CD GitOps
- Docker Compose vs Kubernetes
- Dev Containers remote
- FinOps AWS
- Entretien DevOps 2026
- Portfolio GitHub DevOps
Maillage série WOW
| ← Précédent | Dev Containers + remote SSH (WOW 41) |
| → Suivant | FinOps AWS (WOW 43) |
| Aussi | Interview · Portfolio · Argo CD |
Meta publication (SEO) — Publish HOLD
- Title SEO : Homelab k3s : lab perso utile en entretien DevOps (guide FR)
- Meta description (≤ 160) : Montez un homelab k3s utile en entretien : install, Traefik, app Ingress, GitOps léger, backup et pitch. Lab local ~0 €, FAQ et quiz DEH.
- Focus keyword : homelab k3s
- Secondary : k3s homelab, k3s entretien DevOps, cluster k3s lab, Traefik k3s
- Image :
assets/web/devopelastichayway/cover-wow-homelab-k3s-1200x630.webp(à générer) - Cover alt : Homelab k3s avec Traefik et app démo pour portfolio DevOps
- Catégorie : WOW / Kubernetes · Niveau : Intermédiaire débutant
- Schema : HowTo + FAQPage + Article
- URL cible : https://devopelastichayway.com/tutoriels/wow-homelab-k3s/
- Statut : Publish HOLD — draft only, feu vert Maître requis
- Region lab (cloud optionnel) :
ca-central-1
Pour aller plus loin — hubs live
Retour parcours Catalogue Tutoriels — hub de la série et leçons sœurs.