Lab 7.2 - DaemonSet pour Monitoring
Objectifs du Lab
À la fin de ce lab, vous serez capable de:
- Comprendre le concept de DaemonSet.
- Créer un DaemonSet pour déployer un agent de monitoring.
- Vérifier que le DaemonSet s'exécute sur tous les nœuds.
- Comprendre les cas d'usage des DaemonSets.
- Gérer les DaemonSets (mise à jour, suppression).
Durée Estimée
45-60 minutes
Prérequis
- kubectl installé et configuré.
- Cluster Kubernetes local fonctionnel (minikube ou kind).
- Connaissances sur les DaemonSets (Chapitre 7.2).
Partie 1: Comprendre les DaemonSets
Un DaemonSet garantit qu'une copie d'un Pod s'exécute sur chaque nœud (ou sur un sous-ensemble de nœuds). C'est idéal pour:
- Agents de monitoring (ex: node-exporter)
- Agents de logging (ex: Fluentd, Fluent Bit)
- Agents de sécurité
- Collecteurs de métriques
Étape 1.1: Vérifier les Nœuds
Vérifiez les nœuds de votre cluster:
kubectl get nodes
Pour un cluster local (minikube/kind), vous aurez généralement un seul nœud.
Partie 2: Création d'un DaemonSet Simple
Nous allons créer un DaemonSet qui simule un agent de monitoring simple.
Étape 2.1: Créer le DaemonSet
Créez un fichier daemonset-monitoring.yaml:
# daemonset-monitoring.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-monitor
labels:
app: node-monitor
spec:
selector:
matchLabels:
app: node-monitor
template:
metadata:
labels:
app: node-monitor
spec:
containers:
- name: monitor-agent
image: busybox:1.35
command: ["/bin/sh", "-c"]
args:
- |
while true; do
echo "$(date): Node $(hostname) - CPU: $(cat /proc/loadavg | awk '{print $1}') - Memory: $(free -m | grep Mem | awk '{print $3}')MB used"
sleep 30
done
resources:
requests:
cpu: 100m
memory: 64Mi
limits:
cpu: 200m
memory: 128Mi
volumeMounts:
- name: proc
mountPath: /proc
readOnly: true
- name: sys
mountPath: /sys
readOnly: true
volumes:
- name: proc
hostPath:
path: /proc
- name: sys
hostPath:
path: /sys
Explication:
- Le DaemonSet crée un Pod sur chaque nœud.
- Le conteneur monte
/procet/sysdu nœud pour accéder aux métriques système. - Le conteneur affiche périodiquement des informations sur le nœud.
Appliquez le DaemonSet:
kubectl apply -f daemonset-monitoring.yaml
Partie 3: Vérification du DaemonSet
Étape 3.1: Vérifier les Pods Créés
Vérifiez que les Pods sont créés:
kubectl get pods -l app=node-monitor
Vous devriez voir un Pod par nœud. Pour un cluster avec un seul nœud, vous verrez un Pod.
Vérifiez sur quels nœuds les Pods s'exécutent:
kubectl get pods -l app=node-monitor -o wide
Étape 3.2: Vérifier le Statut du DaemonSet
Vérifiez le statut du DaemonSet:
kubectl get daemonset node-monitor
# ou
kubectl get ds node-monitor
Vous devriez voir:
DESIRED: Nombre de nœuds où le Pod devrait s'exécuterCURRENT: Nombre de Pods actuellement créésREADY: Nombre de Pods prêtsUP-TO-DATE: Nombre de Pods à jour avec le templateAVAILABLE: Nombre de Pods disponibles
Étape 3.3: Vérifier les Logs
Vérifiez les logs d'un Pod pour voir les métriques collectées:
kubectl logs -l app=node-monitor --tail=10
Vous devriez voir des messages périodiques avec les informations du nœud.
Partie 4: Test d'Ajout de Nœud (Simulation)
Si vous aviez plusieurs nœuds, le DaemonSet créerait automatiquement un Pod sur chaque nouveau nœud. Pour un cluster local, nous allons simuler cela en vérifiant le comportement.
Étape 4.1: Vérifier le Comportement
Le DaemonSet surveille automatiquement les nœuds. Si un nouveau nœud est ajouté au cluster, un Pod sera automatiquement créé sur ce nœud.
Vérifiez la description du DaemonSet pour voir les détails:
kubectl describe daemonset node-monitor
Partie 5: Mise à Jour du DaemonSet
Étape 5.1: Mettre à Jour l'Image
Modifiez le DaemonSet pour changer la fréquence de collecte:
# daemonset-monitoring-updated.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-monitor
labels:
app: node-monitor
spec:
selector:
matchLabels:
app: node-monitor
template:
metadata:
labels:
app: node-monitor
spec:
containers:
- name: monitor-agent
image: busybox:1.35
command: ["/bin/sh", "-c"]
args:
- |
while true; do
echo "$(date): [UPDATED] Node $(hostname) - Monitoring actif"
sleep 10 # Changé de 30 à 10 secondes
done
resources:
requests:
cpu: 100m
memory: 64Mi
limits:
cpu: 200m
memory: 128Mi
Appliquez la mise à jour:
kubectl apply -f daemonset-monitoring-updated.yaml
Étape 5.2: Observer la Mise à Jour
Les Pods du DaemonSet sont mis à jour de manière rolling (un par un):
kubectl get pods -l app=node-monitor -w
Vous verrez les anciens Pods être supprimés et les nouveaux être créés.
Vérifiez les nouveaux logs:
kubectl logs -l app=node-monitor --tail=5
Vous devriez voir les messages avec "[UPDATED]" et une fréquence plus élevée.
Partie 6: Node Selectors et Taints
Étape 6.1: Utiliser un Node Selector (Optionnel)
Vous pouvez limiter les nœuds où le DaemonSet s'exécute avec un nodeSelector:
spec:
template:
spec:
nodeSelector:
kubernetes.io/os: linux # S'exécute uniquement sur les nœuds Linux
containers:
# ...
Étape 6.2: Tolérer les Taints (Optionnel)
Si certains nœuds ont des taints, vous pouvez ajouter des tolerations au DaemonSet:
spec:
template:
spec:
tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"
containers:
# ...
Partie 7: Nettoyage
Supprimez le DaemonSet:
kubectl delete daemonset node-monitor
# ou
kubectl delete -f daemonset-monitoring.yaml
Tous les Pods créés par le DaemonSet seront automatiquement supprimés.
Résumé du Lab
Dans ce lab, vous avez exploré les DaemonSets pour le monitoring. Vous avez appris à créer un DaemonSet qui s'exécute sur tous les nœuds, à vérifier son comportement, à le mettre à jour, et à comprendre les cas d'usage typiques (monitoring, logging, sécurité).
Prochaines Étapes
Le prochain lab vous montrera comment utiliser les Jobs et CronJobs pour exécuter des tâches ponctuelles et planifiées.
Lab 7.3: Jobs et CronJobs
Lab créé le: Décembre 2024