Aller au contenu principal

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 /proc et /sys du 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écuter
  • CURRENT: Nombre de Pods actuellement créés
  • READY: Nombre de Pods prêts
  • UP-TO-DATE: Nombre de Pods à jour avec le template
  • AVAILABLE: 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