L'autoscaling de pods multidimensionnels vous évite d'avoir à choisir un seul moyen pour le scaling de vos clusters. Avec l'autoscaling de pods multidimensionnels, vous pouvez utiliser le scaling horizontal basé sur le processeur et le scaling vertical basé sur la mémoire en même temps.
Un objet MultidimPodAutoscaler
modifie les demandes de mémoire et ajoute des instances dupliquées de sorte que
l'utilisation moyenne du processeur de chaque instance dupliquée corresponde à votre utilisation cible.
Prérequis
- Cluster GKE version 1.19.4-gke.1700 ou ultérieure.
- Pour les clusters standards, activez l'autoscaling vertical des pods de votre cluster. L'autoscaling vertical des pods est déjà activé dans les clusters Autopilot.
Utiliser l'autoscaling de pods multidimensionnels
Cet exemple vous montre comment créer un objet Deployment et un objet MultidimPodAutoscaler
pour procéder à l'autoscaling de votre objet Deployment.
Créer un déploiement
Avant de pouvoir créer un MultidimPodAutoscaler
, vous devez créer la charge de travail
qu'il surveille. Le fichier suivant, php-apache.yaml
, spécifie une valeur pour les
requêtes de processeur :
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 1
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
ports:
- containerPort: 80
resources:
# Since MPA does not specify CPU requests, you must specify a request in
# the Deployment
limits:
cpu: 500m
requests:
cpu: 200m
Pour créer le déploiement, appliquez le manifeste php-apache.yaml
:
kubectl apply -f php-apache.yaml
Créer un objet MultidimPodAutoscaler
Une fois l'objet Deployment créé, vous pouvez créer un objet
MultidimPodAutoscaler
. Le fichier manifeste MultidimPodAutoscaler
suivant ajuste automatiquement
le nombre d'instances dupliquées et de demandes de mémoire en fonction des valeurs spécifiées.
Pour en savoir plus sur les champs de cet exemple, consultez la section Documentation de référence de l'API.
apiVersion: autoscaling.gke.io/v1beta1
kind: MultidimPodAutoscaler
metadata:
name: php-apache-autoscaler
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
goals:
metrics:
- type: Resource
resource:
# Define the target CPU utilization request here
name: cpu
target:
type: Utilization
averageUtilization: 60
constraints:
global:
minReplicas: 1
maxReplicas: 5
containerControlledResources: [ memory ]
container:
- name: '*'
# Define boundaries for the memory request here
requests:
minAllowed:
memory: 1Gi
maxAllowed:
memory: 2Gi
policy:
updateMode: Auto
Pour créer l'objet MultidimPodAutoscaler
, appliquez le manifeste
php-apache-autoscaler.yaml
:
kubectl apply -f php-apache-autoscaler.yaml
Afficher un objet MultidimPodAutoscaler
Affichez tous les objets MultidimPodAutoscaler
à l'aide de la commande kubectl get
:
kubectl get mpa
Supprimer un objet MultidimPodAutoscaler
Supprimez un objet MultidimPodAutoscaler
à l'aide de la commande kubectl delete
:
kubectl delete -f php-apache-autoscaler.yaml
Documentation de référence de l'API
Les sections suivantes fournissent des informations sur les champs que vous pouvez ajouter
à votre objet MultidimPodAutoscaler
.
Tous les champs concernent apiVersion
v1beta1 autoscaling.gke.io
.
MultidimPodAutoscaler
MultidimPodAutoscaler
correspond à la configuration pour un autoscaler de pods
multidimensionnels, qui gère automatiquement les ressources du pod et leur nombre en fonction de
l'utilisation des ressources historiques et en temps réel.
Champ | Type | Description |
---|---|---|
metadata |
ObjectMeta |
Métadonnées d'objet standards. |
spec |
MultidimPodAutoscalerSpec |
Comportement souhaité de l'autoscaler de pods multidimensionnels. |
status |
MultidimPodAutoscalerStatus |
Dernier état observé de l'autoscaler de pods multidimensionnels. |
MultidimPodAutoscalerSpec
MultidimPodAutoscalerSpec
est la spécification qui définit le comportement de
l'autoscaler.
Champ | Type | Description |
---|---|---|
ScaleTargetRef |
autoscaling.CrossVersionObjectReference |
Une référence qui pointe vers une ressource cible pour effectuer le scaling (avec la sous-ressource Scale). |
Goals |
*MultidimGoals |
Objectifs que l'autoscaler de pods multidimensionnels tente d'atteindre et de maintenir. |
Constraints |
*MultidimConstraints |
Décrit les contraintes de l'autoscaling. Les contraintes dépassent les objectifs. Si des contraintes bloquent un objectif, l'objectif ne sera pas atteint. Par exemple, atteindre le nombre maximal d'instances dupliquées empêche un scaling plus élevé, même si le nombre d'instances dupliquées peut nécessiter un scaling. |
Policy |
*MultidimPolicy |
Une règle vous permet de spécifier la manière dont les recommandations sont appliquées. |
MultidimGoals
MultidimGoals
sont des objectifs que l'autoscaler de pods multidimensionnels tente
d'atteindre.
Champ | Type | Description |
---|---|---|
Metrics |
[]MetricSpec |
Contient la liste des métriques ainsi que la valeur souhaitée. L'autoscaler de pods multidimensionnels tente de rester proche des valeurs souhaitées. |
MultidimConstraints
MultidimConstraints
décrivent les contraintes de l'autoscaling. Les contraintes
prévalent sur les objectifs.
Champ | Type | Description |
---|---|---|
Global |
*GlobalConstraints |
Contraintes qui s'appliquent à l'application avec autoscaling dans sa globalité. |
Pod |
*PodConstraints |
Contraintes qui s'appliquent à un seul pod de l'application ciblée. |
ContainerControlledResources |
[]ResourceName |
Ressources de conteneur qui doivent être contrôlées par l'autoscaler. memory est la seule valeur acceptée. |
Container |
[]ContainerConstraints |
Contraintes qui s'appliquent aux conteneurs de pods. |
ResourceConstraints
ResourceConstraints
définit la quantité minimale et maximale de ressources que
vous pouvez attribuer à un conteneur, à un pod ou à une application.
Champ | Type | Description |
---|---|---|
MinAllowed |
ResourceList |
Quantité minimale de ressources que vous pouvez attribuer. Si non spécifiée, 0 est utilisé. |
MaxAllowed |
ResourceList |
Quantité maximale de ressources que vous pouvez attribuer. Si cet argument n'est pas fourni, la quantité maximale de ressources n'est pas limitée. |
GlobalConstraints
Les GlobalConstraints
définissent les contraintes qui s'appliquent à l'application dans son ensemble. Ces contraintes incluent le nombre d'instances dupliquées ou la quantité totale de ressources.
Champ | Type | Description |
---|---|---|
MinReplicas |
*Int32 |
Nombre minimal d'instances dupliquées que l'application peut avoir. Si cette valeur n'est pas spécifiée, 1 est utilisé. |
MaxReplicas |
*Int32 |
Nombre maximal d'instances dupliquées que l'application peut avoir. Si cette valeur n'est pas spécifiée, le nombre maximal d'instances dupliquées n'est pas limité. |
Requests |
*ResourceConstraints |
Quantités minimale et maximale de ressources qu'une application peut demander, additionnées pour tous les pods. |
PodConstraints
PodConstraints
définit les quantités minimale et maximale de ressources qu'un même pod peut demander, additionnées pour tous les conteneurs appartenant au pod.
Champ | Type | Description |
---|---|---|
Requests |
*ResourceConstraints |
Quantités minimale et maximale de ressources qu'un même pod peut demander, additionnées pour tous les conteneurs appartenant au pod. |
ContainerConstraints
ContainerConstraints
sont des contraintes qui s'appliquent aux conteneurs de pods.
Champs | Type | Description |
---|---|---|
Name |
String |
Nom du conteneur pour lequel les contraintes sont spécifiées. Vous pouvez également utiliser * pour spécifier des contraintes pour tous les conteneurs d'un pod. |
Requests |
*ResourceConstraints |
Nombre minimal et maximal de ressources que le conteneur spécifié peut demander. |
UpdateMode
Utilisez UpdateMode
pour contrôler l'application des recommandations calculées.
Champs | Type | Description |
---|---|---|
AutoUpdates |
UpdateMode = "Auto" |
AutoUpdates signifie que toutes les recommandations de l'autoscaler peuvent être appliquées à tout moment. |
AutoUpdates |
UpdateMode = "Off" |
AutoUpdates signifie que les recommandations de l'autoscaler ne sont pas appliquées du tout. |
MultidimPolicy
Champs | Type | Description |
---|---|---|
Update |
UpdateMode |
Définit la façon dont les recommandations doivent être appliquées. Une valeur vide fait échouer la validation. |
MultidimPodAutoscalerStatus
MultidimPodAutoscalerStatus
décrit l'état d'exécution de l'autoscaler.
Champs | Type | Description |
---|---|---|
ObservedGeneration |
*Int64 |
Dernière génération observée par cet autoscaler. |
RecommendedPodResources |
*RecommendedPodResources |
Dernière quantité de ressources recommandée par l'autoscaler pour les pods contrôlés. |
CurrentReplicas |
Int32 |
CurrentReplicas correspond au nombre actuel d'instances dupliquées de pods gérés par cet autoscaler, comme vu la dernière fois par l'autoscaler. |
DesiredReplicas |
Int32 |
DesiredReplicas correspond au nombre d'instances dupliquées de pods gérés par cet autoscaler, comme calculé la dernière fois par l'autoscaler. |
CurrentMetrics |
[]autoscaling.MetricStatus |
Dernier état lu pour les métriques utilisées par cet autoscaler. |
Conditions |
[]metav1.Condition |
Conditions correspond à l'ensemble des conditions requises pour que cet autoscaler effectue le scaling de sa cible et indique si ces conditions sont remplies. |
Étape suivante
- Découvrez comment configurer l'autoscaling horizontal des pods.
- Découvrez comment configurer l'autoscaling vertical des pods.