TP - Kubernetes, Infra & Observability Stack¶
Abstract
Ce projet a pour but de mettre en place une plateforme complète d’observabilité sur un cluster Kubernetes managé. Vous déploierez une stack metrics et logs, configurerez des dashboards Grafana, des alertes, et exposerez vos services de manière sécurisée via la Gateway API.
Objectifs¶
Partie 1 — Déploiement d'un Kubernetes managé¶
Déployez un cluster Kubernetes managé sur le cloud provider de votre choix (GKE, EKS, AKS, Scaleway Kapsule, etc.).
Contraintes :
- Le déploiement doit être entièrement as-code via Terraform
- Toute opération manuelle via une interface web (ClickOps) est interdite
- Le code Terraform doit être propre, lisible et idempotent (modules, variables, outputs) et sans apparation de credentials en clair.
Partie 2 — Stack de monitoring — Métriques¶
Choix de la solution¶
Effectuez un benchmark des solutions existantes (Prometheus, VictoriaMetrics, Thanos, Mimir, Cortex…) et justifiez votre choix final.
Contraintes :
- Installation via Helm uniquement
- L'utilisation de stacks all-in-one type
kube-prometheus-stackest interdite — chaque composant doit être installé séparément - La TSDB (Time Series Database) doit être correctement configurée (rétention, stockage persistant)
Exporters¶
Installez les deux charts suivants sur votre cluster, ils serviront de source de données pour vos dashboards :
Pipelines de collecte¶
Configurez les deux pipelines de scraping suivants :
NE → Agent (Prometheus Agent Mode ou VMAgent) → Vector → TSDB
└─ gère les ServiceMonitor / PodMonitor
Remarque
Pour le second pipeline, l'agent doit fonctionner en mode scrape-only (Prometheus Agent Mode ou équivalent). Les ServiceMonitor et PodMonitor doivent être correctement configurés.
Tip
Un peu de doc sur la partie Agent Mode : Article blog Prometheus et Doc Prometheus
Partie 3 — Dashboards Grafana¶
Installation¶
Installez Grafana via son chart Helm officiel et configurez les datasources pour pointer vers votre TSDB.
Dashboard — Métriques¶
Créez deux dashboards distincts (aucune utilisation de la Marketplace Grafana) :
Dashboard kube-state-metrics :
- Variable de dashboard permettant de filtrer sur un ou plusieurs namespaces Kubernetes
- Histogramme CPU : consommation, limits et requests des pods
- Histogramme Memory : consommation, limits et requests des pods
- Bar chart TOP 10 des plus gros consommateurs de ressources
Dashboard node-exporter :
- Métriques système issues exclusivement de
node-exporter(CPU, RAM, disque, réseau)
Dashboard — Logs¶
Créez un dashboard dédié aux logs (aucune utilisation de la Marketplace Grafana) :
- Listing de l'ensemble des logs
- Filtres sur les champs pertinents :
log_level,service_name, contenu du message, etc.
Attention à la cardinalité
L'indexation de champs à haute cardinalité (ex. UUIDs, IPs, timestamps) est coûteuse en ressources. Choisissez vos labels avec soin.
Partie 4 — AlertManager¶
Installation et configuration générale¶
Installez AlertManager via Helm et configurez au minimum un sink de notification (SMS, e-mail, Slack, Discord, PagerDuty…).
Exigences sur les templates d'alertes :
- Utilisation des Go templates pour enrichir le contenu des notifications
- Titre précis et description détaillée (exploitation de
.Labels,.Annotations,.Value…) - Variables utilisées pour rendre les templates réutilisables
Alertes — Métriques¶
Implémentez les quatre règles PromQL suivantes, chacune devant être déclenchable en démo orale :
| # | Alerte | Description |
|---|---|---|
| 1 | PodHighRAMUsage | Pod dépassant un seuil critique de consommation RAM |
| 2 | PodHighCPUUsage | Pod dépassant un seuil critique de consommation CPU |
| 3 | HPAAtMaxReplicas | HPA ayant atteint son nombre maximum de réplicas |
| 4 | UnhealthyPods | Pods unhealthy ou pourcentage de pods en ImagePullBackOff / CrashLoopBackOff |
Alertes — Logs¶
Développez un service applicatif dédié à la génération de logs :
- Le service émet des logs de niveaux variés en continu (
INFO,DEBUG,WARN, etc.) - Il expose un endpoint ou utilise un mécanisme (ex.
randomInteger, appel API) pour déclencher à la demande un log de niveauWARN,ERRORouFATALsur stdout - Une règle d'alerte doit se déclencher sur un niveau de log précis (
ERRORouFATAL)
Partie 5 — Stack de monitoring — Logs¶
Choix de la solution¶
Effectuez un benchmark des solutions de collecte de logs (Loki + Promtail, Loki + Alloy, OpenTelemetry Collector…) et justifiez votre choix.
Configuration¶
- Remontez tous les logs, à l'exception des niveaux
DEBUGet assimilés (trop verbeux, sans valeur opérationnelle) - Configurez le parsing des logs applicatifs côté Vector afin d'extraire des champs structurés (
log_level,service_name, etc.) - Ces champs doivent être filtrables depuis Grafana (LogQL ou équivalent)
Tip
Le filtrage des niveaux DEBUG et le parsing structuré doivent être gérés dans la configuration Vector, pas côté Grafana.
Partie 6 — Gateway API & Exposition HTTPS¶
Objectif¶
Exposez Grafana publiquement en passant par la Gateway API Kubernetes — à ne pas confondre avec une API Gateway applicative.
Routing¶
Instanciez les ressources Gateway API nécessaires :
GatewayClass(si requis par votre implémentation — Cilium, Traefik, Envoy Gateway, NGINX Gateway Fabric…)GatewayHTTPRouteconfigurée depuis le chart Grafana pour router le trafic entrant
Sécurité TLS¶
- Configurez le TLS sur la Gateway (pas de HTTP exposé en clair)
- Obtenez un certificat valide via l'une des deux options suivantes :
- Le certificate manager natif de votre cloud provider
- Le chart cert-manager avec une
ClusterIssuerLet's Encrypt (ACME) - La rotation automatique des certificats doit être configurée et documentée
Grille d’évaluation¶
Barème sur 20 points¶
| Partie | Critère évalué | Description | Points |
|---|---|---|---|
| P1 | Cluster K8s managé fonctionnel | Cluster accessible, nodes ready, contexte kubeconfig valide | 0.5 |
| P1 | Infra 100% as-code via Terraform | Providers configurés, state propre, plan idempotent | 1 |
| P1 | Qualité du code Terraform | Modules, variables, outputs, README, peu de magic strings | 0.5 |
| P2 | Benchmark solutions métriques | Comparaison Prometheus / VictoriaMetrics / Thanos / Mimir, choix justifié | 0.5 |
| P2 | Installation TSDB + exporters | TSDB + node-exporter + kube-state-metrics via Helm séparé | 1 |
| P2 | Pipeline KSM → Vector → TSDB | Métriques kube-state-metrics présentes dans TSDB | 1 |
| P2 | Pipeline NE → Agent → Vector → TSDB | ServicePodMonitor configuré, agent en mode correct, relabeling | 1.5 |
| P3 | Grafana fonctionnel | Datasource TSDB configurée, queries OK | 0.5 |
| P3 | Dashboard kube-state-metrics | CPU/RAM, filtres namespace, top 10, variables | 1.5 |
| P3 | Dashboard node-exporter | Métriques système cohérentes (CPU, RAM, disk, net) | 1 |
| P3 | Dashboard logs | Liste logs, filtres pertinents, cardinalité maîtrisée | 1 |
| P4 | AlertManager configuré | Alertes reçues (mail/Slack/etc.), routing OK | 0.5 |
| P4 | Templates d’alertes | Labels, annotations, messages enrichis | 0.5 |
| P4 | 4 PromQL opérationnelles | RAM, CPU, HPA max, pods unhealthy | 2 |
| P4 | Logs + alerting | Génération logs + alerte déclenchée | 1 |
| P5 | Benchmark stack logs | Loki / Promtail / Alloy / OTEL, choix justifié | 0.5 |
| P5 | Collecte logs filtrée | Drop DEBUG/TRACE via Vector | 1 |
| P5 | Parsing structuré logs | Extraction log_level, filtres Grafana | 1.5 |
| P6 | Gateway API | GatewayClass + Gateway + HTTPRoute fonctionnels | 1 |
| P6 | TLS actif | Certificat valide, HTTPS + redirection | 1 |
| P6 | Certificats automatisés | cert-manager + ACME ou équivalent | 1 |
Barème Bonus¶
| Partie | Critère évalué | Description | Points |
|---|---|---|---|
| Bonus 1 | GitOps & Deploiement | Automatisation de deploiement des charts via GitOps pattern (FluxCD ou ArgoCD) | +1 |
| Bonus 1-2 | GitOps & Deploiement | Automatisation de deploiement des charts via provider terraform ArgoCD par exemple | +1 |
| Bonus 2 - 1 | Automatisation & Terraform | Réaliser une pipeline & workflow pour le deploiement de votre infra | +1 |
| Bonus 2 - 2 | Automatisation & Terraform | Mise en place d'outils comme Atlantis ou Terrateam pour le travail collaboratif pour l'infra | +1 |
Récapitulatif des points¶
| Partie | Intitulé | Points |
|---|---|---|
| P1 | Infrastructure | 2 |
| P2 | Métriques | 4 |
| P3 | Dashboards | 4 |
| P4 | Alerting | 4 |
| P5 | Logs | 3 |
| P6 | Gateway & HTTPS | 3 |
| Total | 20 |
Notes importantes¶
- Type : Une démonstration orale (10-20 minutes) où vous montrerez le fonctionnement de l’ensemble : dashboards, alertes, exposition HTTPS...
- Travail: Par groupe de 3
- Rendu : Un rapport ou un README détaillé expliquant les choix techniques, les benchmarks, et les étapes de déploiement ou tout autre informations qui vous semble importants. Obligation de donner l'accès du repository Git en amont de la soutenance
- Notation : /20