8.1 KiB
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 - Kubernetes IN Docker
- kubectl - CLI Kubernetes
- ArgoCD CLI (optionnel)
- Kustomize (optionnel)
🚀 Déploiement rapide
1. Créer le cluster KIND
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=truepour Ingress Controller
2. Installer ArgoCD
# 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
# 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
# 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
# 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
# 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é dansapps/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 uniquetitle: Titre affiché dans l'UIdescription: Description du graphiquegraphType: 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
# Lister toutes les applications
kubectl get applications -n argocd
# Voir les détails d'une application
kubectl describe application <app-name> -n argocd
# Forcer une synchronisation
kubectl patch application <app-name> -n argocd --type merge -p '{"operation":{"sync":{}}}'
# Voir les logs d'ArgoCD
kubectl logs -n argocd deployment/argocd-server -f
Prometheus
# 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
# 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
- Vérifier que Prometheus collecte les métriques :
kubectl port-forward -n monitoring svc/kube-prometheus-stack-prometheus 9090:9090
# Ouvrir http://localhost:9090 et tester les requêtes PromQL
- Vérifier que le metrics server est accessible :
kubectl get svc -n argocd argocd-metrics-server
kubectl logs -n argocd deployment/argocd-metrics-server
- Vérifier la configuration ArgoCD :
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"
# Forcer une synchronisation
kubectl patch application <app-name> -n argocd --type merge -p '{"operation":{"sync":{}}}'
# Ou via ArgoCD CLI
argocd app sync <app-name>
Prometheus ne démarre pas
Vérifiez les ressources disponibles :
kubectl describe pod -n monitoring -l app.kubernetes.io/name=prometheus
Si problème de ressources, ajustez dans apps/prometheus.yaml :
resources:
requests:
cpu: 100m # Réduire si nécessaire
memory: 256Mi # Réduire si nécessaire
📚 Ressources
🔐 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 à :
- Fork le projet
- Créer une branche pour votre feature
- Commiter vos changements
- Pousser vers la branche
- Ouvrir une Pull Request
📝 License
MIT License