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-apiservervalide et stocke la configuration dansetcd, puis la transmet aux composants concernés - Analyse des ressources: Le
VPA Recommenderlit la configuration VPA et les métriques d'utilisation des ressources - Recommandations: Le
VPA Recommenderfournit des recommandations de ressources pour les Pods - Mise à jour: Le
VPA Updaterlit 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 Controllerinjecte 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-systemConfiguration
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 |
