Ce projet vise à déployer une application PHP Playground (my-php-app) qui apres un click fournie les credentiels pour utiliser les services prometheus et grafana à l’utilisateur.
Cela tourne dans un cluster kubernetes qui expose les services de monitoring Prometheus et Grafana, via l'accès via des tunnels Ngrok. Le déploiement implique l'utilisation de plusieurs fichiers de configuration Kubernetes pour les déploiements et services, ainsi que l'intégration de scripts PHP pour automatiser la création d'utilisateurs dans Grafana.
- php-configmap.yaml
- php-deployment.yaml
- php-service.yaml
- web-content-configmap.yaml
- grafana-deployment.yaml
- grafana-service.yaml
- prometheus-deployment.yaml
- prometheus-service.yaml
- ngrok-config.yaml
Les fichiers php-configmap.yaml
, php-deployment.yaml
, php-service.yaml
, et web-content-configmap.yaml
sont utilisés pour configurer et déployer l'application PHP.
- php-configmap.yaml : Définit les configurations pour l'application PHP.
- php-deployment.yaml : Déploie l'application PHP dans le cluster Kubernetes.
- php-service.yaml : Expose l'application PHP comme un service dans le cluster.
Les fichiers de configuration prometheus-deployment.yaml
, prometheus-service.yaml
, grafana-deployment.yaml
et grafana-service.yaml
sont utilisés pour déployer et exposer Prometheus et Grafana.
Ngrok est utilisé pour exposer les services en local et sur Internet via des tunnels sécurisés.
-
Déploiement des ressources:
shCopier le code kubectl apply -f prometheus-deployment.yaml kubectl apply -f prometheus-service.yaml kubectl apply -f grafana-deployment.yaml kubectl apply -f grafana-service.yaml kubectl apply -f web-content-configmap.yaml kubectl apply -f php-deployment.yaml kubectl apply -f php-service.yaml
-
Port-forwarding des services pour accès local:
shCopier le code kubectl port-forward -n default svc/prometheus-server 9090 kubectl port-forward -n default svc/my-php-app 8082 kubectl port-forward -n default svc/grafana 3000
-
Liste de toutes les ressources dans tous les namespaces:
shCopier le code kubectl get all --all-namespaces
-
Accéder à une ressource en bash:
shCopier le code kubectl exec -it <nom_de_la_ressource> -- /bin/bash
-
Suppression d'un pod spécifique:
shCopier le code kubectl delete pod -n <nom_du_namespace> <nom_de_la_ressource>
-
Copier un fichier depuis un pod:
shCopier le code kubectl cp <nom_de_la_ressource>:/etc/grafana/grafana.ini ./grafana.ini
-
Afficher les logs d'une ressource:
shCopier le code kubectl logs <nom_de_la_ressource> | grep error
Le fichier de configuration Ngrok (ngrok-config.yaml
) permet d'exposer les services PHP, Prometheus et Grafana sur Internet. Le contenu typique est le suivant :
yamlCopier le code
version: "2"
authtoken: <votre_authtoken>
web_addr: localhost:4040
tunnels:
prometheus:
addr: 9090
proto: http
grafana:
addr: 3000
proto: http
my-php-app:
addr: 8082
proto: http
Le script PHP suivant est utilisé pour créer des utilisateurs dans Grafana :
phpCopier le code
<?php
// Variables
$grafanaUrl = "https://<votre_ngrok_url>";
$adminUser = "admin";
$adminPassword = "admin";
// Générer un nom d'utilisateur aléatoire
$username = "user" . time(); // Utilisation de time() pour générer un nom unique
// Générer un mot de passe aléatoire
$password = "password";
// Données à envoyer sous forme JSON
$postData = array(
"name" => $username,
"email" => $username . "@example.com",
"login" => $username,
"password" => $password,
"OrgId" => 1
);
$postDataJson = json_encode($postData);
// Configuration de la requête cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $grafanaUrl . "/api/admin/users");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postDataJson);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-Type: application/json",
"Content-Length: " . strlen($postDataJson))
);
curl_setopt($ch, CURLOPT_USERPWD, "$adminUser:$adminPassword");
// Exécution de la requête
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// Fermeture de la session cURL
curl_close($ch);
// Vérification de la réponse de l'API
if ($httpCode == 200 || $httpCode == 201) {
echo "Utilisateur créé avec succès : $username\n";
echo "Mot de passe créé avec succès : $password\n";
} else {
echo "Erreur lors de la création de l'utilisateur : $response\n";
}
?>
Ce script envoie une requête POST à Grafana pour créer un nouvel utilisateur avec un nom et un mot de passe aléatoires.