À 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-1

Slug : 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 sudo et 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 lab en ca-central-1 pour 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 :

  1. Firewall : SSH + 80/443 seulement si besoin ; clés SSH only
  2. kubeconfig chmod 600 — jamais commit du fichier réel
  3. Pas de ServiceAccount admin dans le repo portfolio
  4. Traefik en HTTP lab / TLS local tant que le nœud n’est pas volontairement public
  5. 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)

  1. Contexte — k3s mono-nœud, API standard, Traefik inclus
  2. Preuve — whoami ×2, Ingress, Git, snapshot
  3. Trade-off — k3s footprint ; kubeadm/EKS si multi-nœuds / managé
  4. Incident — mauvais tag → describe/logs → rollback
  5. 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

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

← Catalogue Tutoriels

Pour aller plus loin — hubs live

Retour parcours Catalogue Tutoriels — hub de la série et leçons sœurs.