UI & Management

Goldilocks

Recommandations automatiques de resource requests/limits Kubernetes via VPA. Dashboard web Fairwinds, analyse par namespace, export YAML. Apache 2.0.

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

ComposantValeur
MécanismeVPA en mode Off (collecte sans modification)
InterfaceDashboard web (port-forward ou Ingress)
DéploiementHelm
Prérequis clusterVPA (Vertical Pod Autoscaler) installé
ExportRecommandations en YAML prêt à appliquer

Prérequis

RessourceValeur
Kubernetes1.16+
VPAInstallé dans le cluster (metrics-server requis par VPA)
Helm3.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

Newsletter · 2 000+ abonnés

Reste au courant de ce qui bouge en prod

RudeOps veille devops hebdo, droit au but.

Gratuit · Sans spam · Désinscription en un clic