🧩 Suite du projet Kubernetes :
Ce mini-projet de supervision s'appuie sur le cluster déjà déployé dans le dépôt :
👉 https://github.com/MEVENGUE/K8S
L'objectif est d'ajouter une brique de supervision complète autour du cluster Kubernetes en utilisant Zabbix :
- Supervision de l'hôte maître (
k8s-master) et des nœuds (k8s-workerX) - Détection d'anomalies (CPU / réseau / disponibilité des nœuds)
- Surveillance d'une application Kubernetes via un scénario web
- Production de tableaux de bord et de schémas pour le rapport
Tout est réalisé dans un contexte Hyper-V sur des VMs Ubuntu.
-
Poste physique Windows
- Hyper-V activé
- Accès à l'interface Zabbix via un navigateur (Firefox/Chrome)
-
VM 1 –
k8s-master- Ubuntu Server 22.04
- Rôle :
- Master du cluster Kubernetes (voir dépôt K8S)
- Zabbix Server
- Base de données MySQL/MariaDB dédiée à Zabbix
- Apache2 + frontend web Zabbix
- Agent Zabbix local
-
VM 2 –
k8s-worker1- Ubuntu Server 22.04
- Nœud de travail Kubernetes
- Agent Zabbix
-
VM 3 –
k8s-worker2(optionnel)- Même rôle que
k8s-worker1
- Même rôle que
Les VMs sont sur le même réseau privé Hyper-V.
Dans ce README, on utilisera des variables génériques :
IP_ZABBIX: adresse IP de la VMk8s-masterZABBIX_DB_PASSWORD: mot de passe du compte MySQLzabbixNODEPORT_APP: NodePort exposant l'application de test (ex. 30080)
Le schéma suivant illustre la topologie réseau complète du projet avec les connexions entre les différents composants :
Note : Le fichier source
.pktest disponible dans le dossierZabbix schéma Cisco/pour une visualisation interactive dans Cisco Packet Tracer.
-
Cluster Kubernetes fonctionnel déployé selon le projet :
https://github.com/MEVENGUE/K8S -
Accès à
k8s-masteren SSH avec un utilisateur sudo. -
kubectlconfiguré surk8s-masteret capable de parler au cluster :kubectl get nodes
-
Ports ouverts sur le réseau privé uniquement :
- 80/TCP (Apache Zabbix GUI)
- 10051/TCP (Zabbix server)
- 10050/TCP (Zabbix agent)
sudo apt update && sudo apt upgrade -ysudo apt install -y mysql-server
sudo systemctl enable --now mysqlCréation de la base et de l'utilisateur Zabbix :
sudo mysqlCREATE DATABASE zabbix
CHARACTER SET utf8mb4
COLLATE utf8mb4_bin;
CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'ZABBIX_DB_PASSWORD';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';
FLUSH PRIVILEGES;
EXIT;Remplace
ZABBIX_DB_PASSWORDpar un mot de passe fort non publié.
wget https://repo.zabbix.com/zabbix/6.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.4-1+ubuntu22.04_all.deb
sudo dpkg -i zabbix-release_6.4-1+ubuntu22.04_all.deb
sudo apt updatesudo apt install -y \
zabbix-server-mysql \
zabbix-frontend-php \
zabbix-apache-conf \
zabbix-sql-scripts \
zabbix-agentZabbix crée des fonctions stockées ⇒ besoin d'autoriser les créateurs de fonctions :
sudo mysql -e "SET GLOBAL log_bin_trust_function_creators = 1;"Import du schéma :
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | \
mysql -uzabbix -p zabbix(entrer ZABBIX_DB_PASSWORD lorsqu'il est demandé)
sudo nano /etc/zabbix/zabbix_server.confModifier les lignes suivantes :
DBName=zabbix
DBUser=zabbix
DBPassword=ZABBIX_DB_PASSWORD
Sauvegarder puis redémarrer :
sudo systemctl restart zabbix-server zabbix-agent apache2
sudo systemctl enable zabbix-server zabbix-agent apache2Vérification :
sudo systemctl status zabbix-server
sudo systemctl status zabbix-agentDepuis le PC Windows :
-
Ouvrir un navigateur et accéder à :
http://IP_ZABBIX/zabbix -
Suivre l'assistant d'installation :
- Choisir la langue (FR)
- Vérifier les prérequis PHP
- Renseigner les paramètres MySQL :
- Hôte :
localhost - Base :
zabbix - Utilisateur :
zabbix - Mot de passe :
ZABBIX_DB_PASSWORD
- Hôte :
- Nom du serveur Zabbix (ex :
Zabbix – Cluster K8s)
-
Connexion avec le compte par défaut (à modifier immédiatement) :
- Utilisateur :
Admin - Mot de passe :
zabbix
- Utilisateur :
Changer le mot de passe de Admin et créer un compte perso pour l'usage quotidien.
Sur chaque worker (k8s-worker1, k8s-worker2, etc.) :
sudo apt update
sudo apt install -y zabbix-agentÉditer /etc/zabbix/zabbix_agentd.conf :
sudo nano /etc/zabbix/zabbix_agentd.confAdapter ces lignes :
Server=IP_ZABBIX
ServerActive=IP_ZABBIX
Hostname=k8s-worker1 # ou k8s-worker2, etc.
Redémarrer l'agent :
sudo systemctl restart zabbix-agent
sudo systemctl enable zabbix-agentDans la GUI Zabbix :
-
Configuration → Hôtes → Créer un hôte
-
Exemple pour
k8s-worker1:- Nom :
k8s-worker1 - Groupes :
Kubernetes Cluster(à créer si nécessaire) - Interfaces :
- Type : Agent
- IP :
IP_k8s_worker1 - Port :
10050
- Nom :
-
Onglet Modèles :
- Ajouter le modèle :
Linux by Zabbix agent
- Ajouter le modèle :
-
Sauvegarder.
Répéter pour k8s-workerX et pour l'hôte Zabbix server (k8s-master) si ce n'est pas déjà fait.
- Hôte :
Zabbix server - Modèle utilisé :
Linux by Zabbix agent
Dans la GUI :
-
Aller dans Configuration → Hôtes → Zabbix server → Déclencheurs.
-
Créer un nouveau déclencheur :
- Nom :
CPU: utilisation > 80% pendant 5 minutes - Sévérité :
Moyen
- Nom :
-
Expression (via le constructeur) :
- Élément :
System: CPU utilization(ou équivalent) - Fonction :
min(5m) - Condition :
> - Valeur :
80
- Élément :
-
Enregistrer.
Effet : dès que la charge CPU moyenne > 80 % pendant 5 minutes, un problème apparaît dans Surveiller → Problèmes.
Sur k8s-master :
sudo mkdir -p /var/lib/zabbix/.kube
sudo cp /root/.kube/config /var/lib/zabbix/.kube/config
sudo chown -R zabbix:zabbix /var/lib/zabbix/.kube
sudo -u zabbix kubectl get nodes # vérificationÉditer /etc/zabbix/zabbix_agentd.conf sur k8s-master :
sudo nano /etc/zabbix/zabbix_agentd.confAjouter/adapter :
#DenyKey=system.run[*]
AllowKey=system.run[kubectl get nodes --no-headers | grep -v " Ready " | wc -l]
Puis :
sudo systemctl restart zabbix-agentDans la GUI → Configuration → Hôtes → Zabbix server → Éléments → Créer :
-
Nom :
noeuds_k8s_not_ready -
Type :
Agent Zabbix -
Clé :
system.run[kubectl get nodes --no-headers | grep -v " Ready " | wc -l] -
Type d'information :
Numérique (entier non signé) -
Intervalle d'actualisation :
60s
Enregistrer.
Toujours sur Zabbix server :
-
Nom :
Cluster: au moins un nœud n'est pas Ready -
Sévérité :
Haut -
Expression :
{Zabbix server:noeuds_k8s_not_ready.last()}>0
Test : arrêter le kubelet d'un worker ou éteindre la VM → le déclencheur passe en PROBLÈME.
Lorsque tout repasse en Ready, le problème est résolu.
Sur k8s-master :
kubectl create deployment demo-nginx --image=nginx
kubectl expose deployment demo-nginx \
--type=NodePort \
--port=80 \
--name=demo-nginx-service
kubectl get svc demo-nginx-serviceNotez :
NODEPORT_APP= NodePort affiché (ex. 30080)- L'IP d'un nœud (ex.
IP_k8s-worker1)
Test :
curl http://IP_k8s-worker1:NODEPORT_APP/Dans la GUI Zabbix :
-
Configuration → Hôtes → Zabbix server → Scénarios web → Créer un scénario
-
Nom :
K8s_app_demo -
Intervalle :
1m
Ajouter une étape :
-
Nom :
page_principale -
URL :
http://IP_k8s-worker1:NODEPORT_APP/ -
Méthode :
GET
Enregistrer.
Sur Zabbix server → Déclencheurs → Créer :
-
Nom :
K8s app demo: indisponible -
Sévérité :
Moyen -
Expression :
{Zabbix server:web.test.rspcode[K8s_app_demo,page_principale].last()}<>200
Test :
kubectl scale deployment demo-nginx --replicas=0
# ou kubectl delete deployment demo-nginxL'alerte apparaît lorsque l'application n'est plus accessible.
Créé via Surveiller → Tableaux de bord :
- Widget "Problèmes par sévérité" filtré sur le groupe
Kubernetes Cluster - Widget "Disponibilité des hôtes" (status des VMs)
- Graphiques simples CPU / RAM par hôte
- Widget "Problèmes" filtré par tag
role=worker
Les graphiques permettent de visualiser l'évolution des métriques dans le temps :
Exemple de détection d'erreurs lorsque les pods ne sont pas disponibles :
-
Ne jamais publier :
- mots de passe (MySQL, Zabbix, comptes système),
- clés privées,
- IP publiques ou infos d'infra réelles.
-
Restreindre autant que possible l'usage de
system.run(cléAllowKey). -
Protéger l'accès à l'interface Zabbix (compte
Admindésactivé ou mot de passe robuste). -
Zabbix doit idéalement être accessible uniquement depuis le réseau d'admin interne.
- Ajout d'alertes par e-mail ou webhook (Slack, Teams, etc.)
- Création de modèles Zabbix spécifiques aux nœuds Kubernetes
- Monitoring approfondi des pods via l'API Kubernetes
- Intégration avec Grafana pour des dashboards avancés
Projet réalisé dans le cadre du mini-projet "Kubernetes + Supervision Zabbix", en continuité du dépôt :










.jpg)



