Aller au contenu principal
Sommaire de la formation

DaemonSet

coolibra323 vues

DaemonSet

Un DaemonSet est un type de ressource Kubernetes qui garantit qu'un pod s'exécute sur chaque nœud (node) du cluster. Cela signifie qu'il crée automatiquement un pod sur chaque nœud, et si de nouveaux nœuds sont ajoutés au cluster, il crée également des pods sur ces nœuds. Les DaemonSets sont couramment utilisés pour des tâches système ou réseau qui doivent s'exécuter sur chaque nœud, tels que des agents de surveillance ou des proxies réseau.

Sschéma pour illustrer les composants clés :

Exemple de DaemonSet node info:

Créer un DaemonSet qui va créer un répertoire nommé /node-info sur chaque nœud, avec un fichier contenant le nom du nœud (par exemple, node-name.txt) à l’intérieur de ce répertoire. Ce fichier sera créé grâce à un script Bash qui s'exécutera lorsque le pod du DaemonSet sera lancé sur chaque nœud.

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-info
  namespace: default
spec:
  selector:
    matchLabels:
      app: node-info
  template:
    metadata:
      labels:
        app: node-info
    spec:
      containers:
        - name: node-info
          image: busybox
          command: ["/bin/sh", "-c"]
          args:
            - "mkdir -p /node-info && echo $(NODE_NAME) > /node-info/node-name.txt && sleep 3600"
          env:
            - name: NODE_NAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
          volumeMounts:
            - name: node-info
              mountPath: /node-info
      volumes:
        - name: node-info
          hostPath:
            path: /node-info
            type: DirectoryOrCreate
      restartPolicy: Always

 

Explications des Sections du Manifeste YAML

  1. Image : Utilise busybox, une image légère, qui permet d'exécuter des commandes simples en shell.

  2. Commande et Arguments :

    • La commande mkdir -p /node-info && echo $(NODE_NAME) > /node-info/node-name.txt && sleep 3600 :
      • mkdir -p /node-info : Crée le répertoire /node-info sur chaque nœud.
      • echo $(NODE_NAME) > /node-info/node-name.txt : Écrit le nom du nœud dans le fichier node-name.txt.
      • sleep 3600 : Garde le pod en cours d’exécution pendant une heure, permettant au DaemonSet de rester actif.
  3. Variable d’Environnement :

    • NODE_NAME : Définit la variable avec le nom du nœud actuel en utilisant spec.nodeName.
  4. Volumes :

    • hostPath : Monte le répertoire /node-info sur le nœud hôte. DirectoryOrCreate crée le répertoire s’il n'existe pas.
  5. RestartPolicy : Always assure le redémarrage du pod si le processus s’arrête.

 

Déploiement

Pour appliquer le DaemonSet, enregistrez le manifeste YAML dans un fichier (par exemple, node-info-daemonset.yaml) et exécutez :

kubectl apply -f node-info-daemonset.yaml

 

 

Vérification

Pour vérifier que le fichier a bien été créé sur chaque nœud, vous pouvez accéder aux nœuds et vérifier le contenu du répertoire /node-info :

kubectl get pods -o wide  # Récupère les noms des pods et les nœuds sur lesquels ils tournent

Ensuite, vous pouvez utiliser SSH pour vous connecter aux nœuds et vérifier :

# Sur chaque nœud
cat /node-info/node-name.txt

 

 

Exemple de DaemonSet node exporter:

Déployer Node Exporter de Prometheus sur chaque nœud de votre cluster Kubernetes. Node Exporter est un outil de monitoring qui collecte les métriques système (CPU, mémoire, disque, réseau) des nœuds et les expose pour qu'ils soient scrappés par Prometheus. Un service de type ClusterIP pour rendre les métriques accessibles.

apiVersion: v1
kind: Namespace
metadata:
  name: monitoring
  
---

apiVersion: v1
kind: Service
metadata:
  name: node-exporter
  namespace: monitoring
  labels:
    app: node-exporter
spec:
  ports:
    - port: 9100
      name: metrics
  selector:
    app: node-exporter
  clusterIP: None  # Utilisé pour un service de type "headless"

---

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter
  namespace: monitoring
  labels:
    app: node-exporter
spec:
  selector:
    matchLabels:
      app: node-exporter
  template:
    metadata:
      labels:
        app: node-exporter
    spec:
      containers:
        - name: node-exporter
          image: prom/node-exporter:latest
          args:
            - "--path.rootfs=/host"
          ports:
            - containerPort: 9100
              name: metrics
          volumeMounts:
            - name: root
              mountPath: /host
              readOnly: true
      hostNetwork: true
      hostPID: true
      securityContext:
        runAsUser: 65534 # nobody user
      terminationGracePeriodSeconds: 30
      volumes:
        - name: root
          hostPath:
            path: /

 

Explication du Manifeste YAML

  1. Namespace : Le DaemonSet est déployé dans le namespace monitoring. Assurez-vous que ce namespace existe, ou remplacez-le par default si nécessaire.

  2. VolumeMounts :

    • root: Monté depuis / sur l'hôte, permettant à Node Exporter de collecter des métriques système en lisant directement depuis le système de fichiers de l'hôte.
  3. hostNetwork et hostPID :

    • hostNetwork : Permet à Node Exporter d’utiliser le réseau de l’hôte, ce qui le rend accessible sur l’IP de chaque nœud.
    • hostPID : Permet d’accéder à tous les processus de l’hôte pour une collecte de métriques plus approfondie.
  4. ContainerPort : Le port 9100 est ouvert pour exposer les métriques Node Exporter.

  5. SecurityContext :

    • runAsUser: 65534 : Exécute le container avec l'utilisateur "nobody" pour des raisons de sécurité.
  6. Volumes :

    • hostPath: Utilisé pour monter le système de fichiers de l’hôte afin de lire les informations directement depuis celui-ci.
  7. Le service permet à Prometheus de découvrir tous les pods Node Exporter sans load balancing, car chaque pod expose directement les métriques de son nœud via un endpoint unique

 

Appliquer le ficher node-exporter:

kubectl apply -f node-exporter-daemonset.yaml

 

 

Un port-forward pour voir les metrics des nodes:

kubectl -n monitoring port-forward svc/node-exporter 9100:9100

Acceder dans le navigateur  pour voir la version du node-export : http://127.0.0.1:9100/

 

Pour voir les metrics: http://127.0.0.1:9100/metrics

Commentaires

Connectez-vous pour rejoindre la discussion.

Aucun commentaire pour le moment.