Le Kubernetes Vertical Pod Autoscaler (VPA) ajuste automatiquement les ressources (CPU et mémoire) allouées aux containers en fonction de leur utilisation. En analysant les données historiques, il augmente ou diminue les demandes de ressources et les limites pour optimiser la performance des applications.
⚠️ Ne pas utiliser VPA avec HPA
N'utilisez pas le VPA avec le HPA qui évolue en fonction des mêmes métriques de ressources, car ils peuvent entrer en conflit en se basant sur les mêmes métriques (CPU, mémoire), entraînant des effets secondaires indésirables.
Composants
Composant | Description |
---|---|
VPA Recommender | Surveille l'utilisation des ressources, examine l'historique et les spécifications de déploiement, puis propose des ajustements des ressources |
VPA Updater | Expulse les Pods pour appliquer les nouvelles recommandations de ressources si le mode updateMode est défini sur Auto |
VPA Admission Controler | Modifie les demandes de ressources des nouveaux Pods avant leur création, en fonction des recommandations du VPA Recommender |
WARNING
Le VPA peut recommander plus de ressources que disponibles, empêchant le Pod de démarrer. Définir un LimitRange
peut prévenir ce problème en limitant les ressources demandées.
Fonctionnement
- Définition du VPA: Un fichier YAML spécifie le VPA
- Création: kubectl traduit le fichier YAML en requêtes HTTP REST et les envoie au
kube-apiserver
- Traitement par le
kube-apiserver
: Lekube-apiserver
valide et stocke la configuration dansetcd
, puis la transmet aux composants concernés - Analyse des ressources: Le
VPA Recommender
lit la configuration VPA et les métriques d'utilisation des ressources - Recommandations: Le
VPA Recommender
fournit des recommandations de ressources pour les Pods - Mise à jour: Le
VPA Updater
lit les recommandations et lance la résiliation des Pods nécessitant de nouvelles ressources - Recréation des Pods: Le déploiement recrée les Pods avec les nouvelles ressources
- Injection des recommandations: Le
VPA Admission Controller
injecte les recommandations de ressources dans les nouveaux Pods lors de leur création - Exécution des Pods: Les nouveaux Pods s'exécutent avec les ressources mises à jour
Installation
- Installer avec Helm :
helm repo add cowboysysop https://cowboysysop.github.io/charts/
helm install vpa cowboysysop/vertical-pod-autoscaler --namespace kube-system
- Vérifier les pods déployés :
kubectl get pod -n kube-system
Configuration
apiVersion: autoscaling.k8s.io/v1beta2
kind: VerticalPodAutoscaler
metadata:
name: vpa
namespace: vpa
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: nginx
updatePolicy:
updateMode: "Auto"
resourcePolicy:
containerPolicies:
- containerName: "nginx"
minAllowed:
cpu: "250m"
memory: "100Mi"
maxAllowed:
cpu: "500m"
memory: "600Mi"
Exclure la mise à l'échelle d'un container
Utilisez le paramètre mode
avec la valeur Off
resourcePolicy:
containerPolicies:
- containerName: monitoring
mode: "Off"
Modes d'Update
Mode | Description |
---|---|
Off | Le VPA fournit des recommandations sans modifier automatiquement les ressources |
Initial | Le VPA attribue les ressources à la création du Pod sans les modifier ensuite |
Recreate | Le VPA met à jour les ressources des Pods en les supprimant et les recréant |
Auto | Le VPA recrée les Pods en fonction des recommandations |