From fce3fd4ffd73edb0b8ca7bf32f1fae6f9f62e49d Mon Sep 17 00:00:00 2001 From: Mathod Date: Wed, 10 Dec 2025 20:28:14 +0100 Subject: [PATCH] update readme --- README.md | 268 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 268 insertions(+) diff --git a/README.md b/README.md index e69de29..8dc30dd 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,268 @@ +# ArgoCD GitOps Repository + +Ce dépôt contient une infrastructure GitOps complète basée sur ArgoCD avec monitoring intégré (Prometheus + Grafana) et extension de métriques. + +## 🏗️ Architecture + +Le projet utilise le pattern **App of Apps** d'ArgoCD pour gérer plusieurs applications de manière déclarative : + +- **Root App** : Application principale qui déploie toutes les autres applications +- **Podinfo** : Application de démonstration Kubernetes +- **Kube-Prometheus-Stack** : Stack de monitoring complet (Prometheus + Grafana) +- **ArgoCD Metrics Server** : Extension pour visualiser les métriques dans l'UI ArgoCD + +## 📋 Prérequis + +- [KIND](https://kind.sigs.k8s.io/) - Kubernetes IN Docker +- [kubectl](https://kubernetes.io/docs/tasks/tools/) - CLI Kubernetes +- [ArgoCD CLI](https://argo-cd.readthedocs.io/en/stable/cli_installation/) (optionnel) +- [Kustomize](https://kubectl.docs.kubernetes.io/installation/kustomize/) (optionnel) + +## 🚀 Déploiement rapide + +### 1. Créer le cluster KIND + +```bash +kind create cluster --config kind-config.yaml +``` + +Cette configuration crée un cluster avec : +- Port mappings pour HTTP (80), HTTPS (443) et services NodePort (30080) +- Label `ingress-ready=true` pour Ingress Controller + +### 2. Installer ArgoCD + +```bash +# Créer le namespace +kubectl create namespace argocd + +# Installer ArgoCD +kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml + +# Attendre que les pods soient prêts +kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=argocd-server -n argocd --timeout=300s +``` + +### 3. Configurer ArgoCD avec les extensions + +```bash +# Appliquer la configuration ArgoCD (extensions + RBAC) +kubectl apply -n argocd -f bootstrap/argocd-values.yaml + +# Activer le proxy extension +kubectl patch configmap argocd-cmd-params-cm -n argocd --type merge -p '{"data":{"server.enable.proxy.extension":"true"}}' + +# Redémarrer ArgoCD server pour appliquer les changements +kubectl rollout restart deployment argocd-server -n argocd +kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=argocd-server -n argocd --timeout=300s +``` + +### 4. Déployer l'App of Apps + +```bash +# Déployer la root application +kubectl apply -f apps/app-of-apps.yaml + +# Vérifier le déploiement +kubectl get applications -n argocd +``` + +### 5. Accéder à ArgoCD UI + +```bash +# Port-forward vers ArgoCD UI +kubectl port-forward svc/argocd-server -n argocd 8080:443 + +# Récupérer le mot de passe admin +kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d +``` + +Accédez à https://localhost:8080 avec : +- **Username**: `admin` +- **Password**: (celui récupéré ci-dessus) + +### 6. Accéder à Grafana + +```bash +# Port-forward vers Grafana +kubectl port-forward -n monitoring svc/kube-prometheus-stack-grafana 3000:80 +``` + +Accédez à http://localhost:3000 avec : +- **Username**: `admin` +- **Password**: `admin` (configuré dans `apps/prometheus.yaml`) + +## 📊 Métriques dans ArgoCD + +L'extension de métriques ajoute des onglets dans l'interface ArgoCD pour visualiser : + +### Pour les Pods +- **Golden Signal** : CPU et Memory usage +- **Resource Usage** : CPU throttling, Memory working set, Memory cache +- **Network** : Bytes/Packets reçus et transmis, Erreurs réseau +- **Storage** : I/O disque (lectures/écritures), Utilisation du filesystem + +### Pour les Deployments +- **Application Metrics** : HTTP latency, Error rates (4xx, 5xx), Traffic +- **Resource Usage** : CPU et Memory par deployment + +## 🗂️ Structure du dépôt + +``` +. +├── apps/ +│ ├── app-of-apps.yaml # Root application (App of Apps) +│ ├── metrics-server.yaml # ArgoCD metrics extension +│ ├── podinfo.yaml # Application de démo +│ └── prometheus.yaml # Stack Prometheus + Grafana +├── bootstrap/ +│ └── argocd-values.yaml # Configuration ArgoCD (extensions + RBAC) +├── manifests/ +│ └── metrics-server/ +│ ├── configmap.yaml # Configuration des graphiques de métriques +│ ├── deployment.yaml # Déploiement du metrics server +│ ├── service.yaml # Service du metrics server +│ └── kustomization.yaml # Kustomize config +├── kind-config.yaml # Configuration du cluster KIND +└── README.md # Ce fichier +``` + +## 🔧 Configuration + +### Modifier les métriques affichées + +Éditez `manifests/metrics-server/configmap.yaml` pour ajouter ou modifier les graphiques de métriques. + +Chaque graphique est défini par : +- `name` : Identifiant unique +- `title` : Titre affiché dans l'UI +- `description` : Description du graphique +- `graphType` : Type de graphique (`line`, `pie`) +- `queryExpression` : Requête PromQL + +### Personnaliser Prometheus + +Modifiez `apps/prometheus.yaml` pour : +- Ajuster les ressources (CPU, Memory) +- Changer la rétention des données +- Modifier le mot de passe Grafana +- Activer/désactiver Alertmanager + +## 🛠️ Commandes utiles + +### ArgoCD + +```bash +# Lister toutes les applications +kubectl get applications -n argocd + +# Voir les détails d'une application +kubectl describe application -n argocd + +# Forcer une synchronisation +kubectl patch application -n argocd --type merge -p '{"operation":{"sync":{}}}' + +# Voir les logs d'ArgoCD +kubectl logs -n argocd deployment/argocd-server -f +``` + +### Prometheus + +```bash +# Port-forward vers Prometheus +kubectl port-forward -n monitoring svc/kube-prometheus-stack-prometheus 9090:9090 + +# Vérifier les targets Prometheus +kubectl port-forward -n monitoring svc/kube-prometheus-stack-prometheus 9090:9090 +# Puis ouvrir http://localhost:9090/targets +``` + +### Metrics Server + +```bash +# Voir les logs du metrics server +kubectl logs -n argocd deployment/argocd-metrics-server -f + +# Tester l'endpoint du metrics server +kubectl port-forward -n argocd svc/argocd-metrics-server 9003:9003 +curl http://localhost:9003/health +``` + +## 🐛 Dépannage + +### Les métriques ne s'affichent pas + +1. Vérifier que Prometheus collecte les métriques : +```bash +kubectl port-forward -n monitoring svc/kube-prometheus-stack-prometheus 9090:9090 +# Ouvrir http://localhost:9090 et tester les requêtes PromQL +``` + +2. Vérifier que le metrics server est accessible : +```bash +kubectl get svc -n argocd argocd-metrics-server +kubectl logs -n argocd deployment/argocd-metrics-server +``` + +3. Vérifier la configuration ArgoCD : +```bash +kubectl get cm argocd-cm -n argocd -o yaml | grep -A 10 "extension.config" +kubectl get cm argocd-cmd-params-cm -n argocd -o yaml | grep proxy +``` + +### Applications en état "OutOfSync" + +```bash +# Forcer une synchronisation +kubectl patch application -n argocd --type merge -p '{"operation":{"sync":{}}}' + +# Ou via ArgoCD CLI +argocd app sync +``` + +### Prometheus ne démarre pas + +Vérifiez les ressources disponibles : +```bash +kubectl describe pod -n monitoring -l app.kubernetes.io/name=prometheus +``` + +Si problème de ressources, ajustez dans `apps/prometheus.yaml` : +```yaml +resources: + requests: + cpu: 100m # Réduire si nécessaire + memory: 256Mi # Réduire si nécessaire +``` + +## 📚 Ressources + +- [ArgoCD Documentation](https://argo-cd.readthedocs.io/) +- [ArgoCD Metrics Extension](https://github.com/argoproj-labs/argocd-extension-metrics) +- [Kube-Prometheus-Stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) +- [KIND Documentation](https://kind.sigs.k8s.io/) + +## 🔐 Sécurité + +⚠️ **Attention** : Cette configuration est destinée à un environnement de développement/test. + +Pour la production, pensez à : +- Changer les mots de passe par défaut (Grafana: `admin/admin`) +- Utiliser des Secrets Kubernetes au lieu de valeurs en clair +- Configurer TLS pour ArgoCD et Grafana +- Ajouter des NetworkPolicies +- Configurer des limites de ressources appropriées +- Activer l'authentification RBAC stricte + +## 🤝 Contribution + +Les contributions sont les bienvenues ! N'hésitez pas à : +1. Fork le projet +2. Créer une branche pour votre feature +3. Commiter vos changements +4. Pousser vers la branche +5. Ouvrir une Pull Request + +## 📝 License + +MIT License