Goldilocks est un outil développé par Fairwinds qui résout un problème fréquent : définir les requests et limits CPU/mémoire de ses pods à tâtons. Il installe des objets VPA (Vertical Pod Autoscaler) en mode Off - collecte des métriques sans autoscaler automatiquement - et expose via un dashboard web les recommandations calculées par le VPA pour chaque workload. Le résultat : des valeurs basées sur l'usage réel, pas des estimations.
Informations essentielles
Origine : Fairwinds · Licence : Apache 2.0 · Architectures : x86_64, ARM64
Liens : Documentation · GitHub · Releases
Support : Projet actif maintenu par Fairwinds.
Stack par défaut
| Composant | Valeur |
|---|---|
| Mécanisme | VPA en mode Off (collecte sans modification) |
| Interface | Dashboard web (port-forward ou Ingress) |
| Déploiement | Helm |
| Prérequis cluster | VPA (Vertical Pod Autoscaler) installé |
| Export | Recommandations en YAML prêt à appliquer |
Prérequis
| Ressource | Valeur |
|---|---|
| Kubernetes | 1.16+ |
| VPA | Installé dans le cluster (metrics-server requis par VPA) |
| Helm | 3.x |
Installer le VPA (si absent)
# VPA depuis le repo officiel
git clone https://github.com/kubernetes/autoscaler.git
cd autoscaler/vertical-pod-autoscaler
./hack/vpa-up.sh
# Vérifier
kubectl get pods -n kube-system | grep vpa
Installation
helm repo add fairwinds-stable https://charts.fairwinds.com/stable
helm repo update
helm install goldilocks fairwinds-stable/goldilocks \
--namespace goldilocks --create-namespace
kubectl rollout status deploy/goldilocks-controller -n goldilocks
kubectl rollout status deploy/goldilocks-dashboard -n goldilocks
Activer Goldilocks sur un namespace
# Ajouter le label sur les namespaces à surveiller
kubectl label namespace production goldilocks.fairwinds.com/enabled=true
kubectl label namespace staging goldilocks.fairwinds.com/enabled=true
# Goldilocks crée automatiquement un VPA par Deployment dans ce namespace
kubectl get vpa -n production
Accéder au dashboard
kubectl port-forward svc/goldilocks-dashboard 8080:80 -n goldilocks
# Ouvrir http://localhost:8080
Vérification de l'installation
# 1. Pods Goldilocks
kubectl get pods -n goldilocks
# goldilocks-controller-* et goldilocks-dashboard-* Running
# 2. VPA créés sur le namespace activé
kubectl get vpa -n production
# Un VPA par Deployment - mode Off
# 3. Recommandations disponibles (attendre ~10-15 min de données)
kubectl get vpa <nom-deployment> -n production -o yaml | grep -A10 recommendation
Lire les recommandations
Le dashboard web présente pour chaque workload :
- Lower Bound : minimum recommandé (requests conservatrices)
- Target : cible optimale basée sur l'usage observé
- Upper Bound : maximum recommandé (limits)
Exemple de recommandation affichée dans le dashboard :
Container: my-app
CPU Request: 50m → 120m (cible)
Memory Request: 64Mi → 180Mi (cible)
CPU Limit: 500m → 400m (upper bound)
Memory Limit: 256Mi → 320Mi (upper bound)
Exporter les recommandations en YAML
Le dashboard affiche les YAML prêts à copier. Pour une extraction programmatique, interroger directement les objets VPA créés par Goldilocks :
# Obtenir les recommandations brutes d'un VPA spécifique
kubectl get vpa <nom-deployment>-goldilocks-vpa -n production -o yaml
# Extraire toutes les recommandations d'un namespace
kubectl get vpa -n production -o yaml
# Voir la recommandation Target (cible optimale)
kubectl get vpa <nom>-goldilocks-vpa -n production \
-o jsonpath='{.status.recommendation.containerRecommendations}'
Mise à jour
helm repo update
helm upgrade goldilocks fairwinds-stable/goldilocks \
--namespace goldilocks \
--reuse-values
Troubleshooting
# Logs du controller (crée les VPA)
kubectl logs -n goldilocks -l app.kubernetes.io/name=goldilocks-controller --tail=50
# Logs du dashboard
kubectl logs -n goldilocks -l app.kubernetes.io/name=goldilocks-dashboard --tail=50
# VPA sans recommandations
# Attendre 10-15 min après l'activation du namespace
# Vérifier que metrics-server collecte des métriques :
kubectl top pods -n production
Commandes utiles
# Activer un namespace
kubectl label namespace <ns> goldilocks.fairwinds.com/enabled=true
# Désactiver un namespace
kubectl label namespace <ns> goldilocks.fairwinds.com/enabled-
# Voir les VPA créés
kubectl get vpa -n <ns>
# Voir les recommandations brutes
kubectl get vpa <nom> -n <ns> -o yaml
Ressources
- Documentation officielle : https://goldilocks.docs.fairwinds.com/
- GitHub : https://github.com/FairwindsOps/goldilocks
- Releases : https://github.com/FairwindsOps/goldilocks/releases
- VPA (prérequis) : https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler