[fr] translate task run-application/horizontal-pod-autoscale-walkthrough.md
parent
7adb15dfef
commit
e2a75f4623
|
@ -0,0 +1,527 @@
|
||||||
|
---
|
||||||
|
|
||||||
|
title: Découverte de l'HorizontalPodAutoscaler
|
||||||
|
content_type: task
|
||||||
|
weight: 100
|
||||||
|
min-kubernetes-server-version: 1.23
|
||||||
|
---
|
||||||
|
|
||||||
|
<!-- overview -->
|
||||||
|
|
||||||
|
Un [HorizontalPodAutoscaler](/docs/tasks/run-application/horizontal-pod-autoscale/) (HPA pour faire court)
|
||||||
|
met à jour automatiquement une ressource de charge de travail
|
||||||
|
(comme un {{< glossary_tooltip text=Deployment term_id=deployment >}}
|
||||||
|
ou un {{< glossary_tooltip text=StatefulSet term_id=statefulset >}}),
|
||||||
|
dans le but de faire évoluer automatiquement la charge de travail en fonction
|
||||||
|
de la demande.
|
||||||
|
|
||||||
|
L'évolutivité horizontale signifie que la réponse à une
|
||||||
|
augmentation de la charge est de déployer plus de {{< glossary_tooltip text=Pods term_id=pod >}}.
|
||||||
|
Cela diffère de l'évolutivité _verticale_, qui pour Kubernetes
|
||||||
|
signifierait attribuer plus de ressources (par exemple : mémoire ou CPU)
|
||||||
|
aux Pods qui sont déjà en cours d'exécution pour la charge de travail.
|
||||||
|
|
||||||
|
Si la charge diminue et que le nombre de Pods est supérieur au minimum configuré,
|
||||||
|
le HorizontalPodAutoscaler indique à la ressource de charge de travail
|
||||||
|
(le Deployment, le StatefulSet ou une autre ressource similaire)
|
||||||
|
de réduire son échelle.
|
||||||
|
|
||||||
|
Ce document vous guide à travers un exemple d'activation de HorizontalPodAutoscaler pour gérer
|
||||||
|
automatiquement l'échelle d'une application web d'exemple.
|
||||||
|
Cette charge de travail d'exemple est Apache httpd exécutant du code PHP.
|
||||||
|
|
||||||
|
## {{% heading prerequisites %}}
|
||||||
|
{{< include task-tutorial-prereqs.md >}} {{< version-check >}} Si vous utilisez
|
||||||
|
une version plus ancienne de Kubernetes,
|
||||||
|
consultez la version de la documentation correspondante
|
||||||
|
(voir [versions de documentation disponibles](/docs/home/supported-doc-versions/)).
|
||||||
|
|
||||||
|
Pour suivre ce guide, vous devez également utiliser un cluster qui dispose d'un
|
||||||
|
[Metrics Server](https://github.com/kubernetes-sigs/metrics-server#readme) déployé et configuré.
|
||||||
|
|
||||||
|
Le Metrics Server Kubernetes collecte les métriques des ressources des
|
||||||
|
{{<glossary_tooltip term_id=kubelet text=kubelets>}} de votre cluster et expose
|
||||||
|
ces métriques via l'[API Kubernetes](/docs/concepts/overview/kubernetes-api/),
|
||||||
|
en utilisant un [APIService](/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/)
|
||||||
|
pour ajouter de nouveaux types de ressources représentant
|
||||||
|
les lectures de métriques.
|
||||||
|
|
||||||
|
Pour apprendre comment déployer le Metrics Server, consultez la [documentation du metrics-server](https://github.com/kubernetes-sigs/metrics-server#deployment).
|
||||||
|
|
||||||
|
<!-- steps -->
|
||||||
|
|
||||||
|
## Exécutez et exposez le serveur php-apache
|
||||||
|
Pour démontrer un HorizontalPodAutoscaler, vous commencerez par démarrer un
|
||||||
|
déploiement qui exécute un conteneur utilisant l'image `hpa-example`
|
||||||
|
et l'expose en tant que {{< glossary_tooltip term_id=service>}} en utilisant le
|
||||||
|
manifeste suivant: {{< codenew file=application/php-apache.yaml >}}
|
||||||
|
|
||||||
|
Pour créer les ressources, exécutez la commande suivante:
|
||||||
|
```shell
|
||||||
|
kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
deployment.apps/php-apache created
|
||||||
|
service/php-apache created
|
||||||
|
```
|
||||||
|
|
||||||
|
## Créer le HorizontalPodAutoscaler {#create-horizontal-pod-autoscaler}
|
||||||
|
|
||||||
|
Maintenant que le serveur est en cours d'exécution, créez l'autoscaler
|
||||||
|
à l'aide de `kubectl`. Il existe une sous-commande
|
||||||
|
[`kubectl autoscale`](/docs/reference/generated/kubectl/kubectl-commands#autoscale), faisant partie de `kubectl`, qui vous aide à le faire.
|
||||||
|
|
||||||
|
Vous allez bientôt exécuter une commande qui crée un HorizontalPodAutoscaler
|
||||||
|
qui maintient entre 1 et 10 répliques des Pods contrôlés par le déploiement
|
||||||
|
php-apache que vous avez créé à la première étape de ces instructions.
|
||||||
|
|
||||||
|
En gros, le HPA ({{<glossary_tooltip text="contrôleur" term_id="controller">}})
|
||||||
|
augmentera ou diminuera le nombre de répliques (en mettant à jour le déploiement)
|
||||||
|
pour maintenir une utilisation moyenne de l'UC de 50% sur l'ensemble des Pods.
|
||||||
|
|
||||||
|
Ensuite, le déploiement met à jour le ReplicaSet - cela fait partie du
|
||||||
|
fonctionnement de tous les déploiements dans Kubernetes - puis le ReplicaSet
|
||||||
|
ajoute ou supprime des Pods en fonction des modifications apportées à son champ `.spec`.
|
||||||
|
|
||||||
|
Étant donné que chaque pod demande 200 milli-cores via `kubectl run`,
|
||||||
|
cela signifie une utilisation moyenne de l'UC de 100 milli-cores.
|
||||||
|
Consultez les détails de l'algorithme pour plus d'informations sur l'algorithme.
|
||||||
|
|
||||||
|
Créez le HorizontalPodAutoscaler :
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
horizontalpodautoscaler.autoscaling/php-apache autoscaled
|
||||||
|
```
|
||||||
|
|
||||||
|
Vous pouvez visualiser le statut actuel du HPA avec la commande:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# Vous pouvez utiliser "hpa" ou "horizontalpodautoscaler"; les deux appelations fonctionnent.
|
||||||
|
kubectl get hpa
|
||||||
|
```
|
||||||
|
|
||||||
|
Le résultat sera similaire à celui-ci:
|
||||||
|
```
|
||||||
|
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
|
||||||
|
php-apache Deployment/php-apache/scale 0% / 50% 1 10 1 18s
|
||||||
|
```
|
||||||
|
|
||||||
|
(Si vous voyez d'autres HorizontalPodAutoscalers avec des noms différents,
|
||||||
|
cela signifie qu'ils existaient déjà et ce n'est généralement pas un problème).
|
||||||
|
|
||||||
|
Veuillez noter que la consommation actuelle de CPU est de 0 %
|
||||||
|
car il n'y a pas de clients envoyant des requêtes au serveur
|
||||||
|
(la colonne "TARGET" montre la moyenne de tous les Pods
|
||||||
|
contrôlés par le déploiement correspondant).
|
||||||
|
|
||||||
|
## Augmenter la charge {#increase-load}
|
||||||
|
|
||||||
|
Ensuite, voyons comment l'autoscaler réagit à une augmentation de la charge.
|
||||||
|
|
||||||
|
Pour cela, vous allez démarrer un autre Pod pour agir en tant que client.
|
||||||
|
Le conteneur à l'intérieur du Pod client
|
||||||
|
s'exécute dans une boucle infinie, envoyant des requêtes au service php-apache.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# Exécutez ceci dans un terminal séparé
|
||||||
|
# pour que la montée en charge s'applique pendant que vous continuez les étapes suivantes
|
||||||
|
kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
|
||||||
|
```
|
||||||
|
|
||||||
|
Maintenant exécutez:
|
||||||
|
```shell
|
||||||
|
# Entrez Ctrl+C pour terminer lorsque c'est ok
|
||||||
|
kubectl get hpa php-apache --watch
|
||||||
|
```
|
||||||
|
|
||||||
|
Après environ une minute, vous devriez constater une augmentation de la charge
|
||||||
|
CPU, comme ceci:
|
||||||
|
|
||||||
|
```
|
||||||
|
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
|
||||||
|
php-apache Deployment/php-apache/scale 305% / 50% 1 10 1 3m
|
||||||
|
```
|
||||||
|
|
||||||
|
en réponse, une augmentation du nombre de réplicas, comme ceci:
|
||||||
|
```
|
||||||
|
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
|
||||||
|
php-apache Deployment/php-apache/scale 305% / 50% 1 10 7 3m
|
||||||
|
```
|
||||||
|
|
||||||
|
Dans ce cas, la consommation CPU a atteint 305% de ce qui était demandé.
|
||||||
|
Ainsi, le nombre de réplicas du Deployment a été augmenté à 7:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl get deployment php-apache
|
||||||
|
```
|
||||||
|
|
||||||
|
Vous devriez voir le nombre de réplicas être égal à la valeur du HorizontalPodAutoscaler
|
||||||
|
```
|
||||||
|
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||||
|
php-apache 7/7 7 7 19m
|
||||||
|
```
|
||||||
|
|
||||||
|
{{< note >}}
|
||||||
|
La stabilisation du nombre de réplicas peut prendre quelques minutes.
|
||||||
|
Comme la charge est incontrollée, le nombre final de réplicas
|
||||||
|
peut varier par rapport à l'exemple présenté.
|
||||||
|
{{< /note >}}
|
||||||
|
|
||||||
|
## Arrêt de la charge {#stop-load}
|
||||||
|
|
||||||
|
Pour finir cet exemple, nous allons arrêter d'envoyer des requètes.
|
||||||
|
|
||||||
|
Dans le terminal utilisé pour créer le Pod qui exécute une image `busybox`, arrêtez la charge en entrant `<Ctrl> +C`.
|
||||||
|
|
||||||
|
Puis vérifiez le résultat après un temps d'attente:
|
||||||
|
```shell
|
||||||
|
# entrez Ctrl+C pour terminer lorsque c'est ok
|
||||||
|
kubectl get hpa php-apache --watch
|
||||||
|
```
|
||||||
|
|
||||||
|
Le résultat sera similaire à:
|
||||||
|
|
||||||
|
```
|
||||||
|
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
|
||||||
|
php-apache Deployment/php-apache/scale 0% / 50% 1 10 1 11m
|
||||||
|
```
|
||||||
|
|
||||||
|
et le nombre de réplicas du Deployment aura descendu:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl get deployment php-apache
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
NAME READY UP-TO-DATE AVAILABLE AGE
|
||||||
|
php-apache 1/1 1 1 27m
|
||||||
|
```
|
||||||
|
|
||||||
|
Une fois que la consommation CPU atteindra 0, le HPA ajustera automatiquement le nombre de réplicas à 0.
|
||||||
|
|
||||||
|
Cette étape peut prendre quelques minutes.
|
||||||
|
|
||||||
|
<!-- discussion -->
|
||||||
|
|
||||||
|
## L'auto-ajustement basé sur des métriques multiples ou personnalisées
|
||||||
|
|
||||||
|
Vous pouvez ajouter de nouvelles métriques à utiliser pour l'auto-ajustement du Deployment `php-apache` en utilisant l'api `autoscaling/v2`.
|
||||||
|
|
||||||
|
Pour commencer, récupérez le YAML de votre HorizontalPodAutoscaler en format `autoscaling/v2`:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl get hpa php-apache -o yaml > /tmp/hpa-v2.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
Ouvrez le fichier `/tmp/hpa-v2.yaml` avec votre éditeur, le YAML devrait ressembler à ceci:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: autoscaling/v2
|
||||||
|
kind: HorizontalPodAutoscaler
|
||||||
|
metadata:
|
||||||
|
name: php-apache
|
||||||
|
spec:
|
||||||
|
scaleTargetRef:
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
name: php-apache
|
||||||
|
minReplicas: 1
|
||||||
|
maxReplicas: 10
|
||||||
|
metrics:
|
||||||
|
- type: Resource
|
||||||
|
resource:
|
||||||
|
name: cpu
|
||||||
|
target:
|
||||||
|
type: Utilization
|
||||||
|
averageUtilization: 50
|
||||||
|
status:
|
||||||
|
observedGeneration: 1
|
||||||
|
lastScaleTime: <some-time>
|
||||||
|
currentReplicas: 1
|
||||||
|
desiredReplicas: 1
|
||||||
|
currentMetrics:
|
||||||
|
- type: Resource
|
||||||
|
resource:
|
||||||
|
name: cpu
|
||||||
|
current:
|
||||||
|
averageUtilization: 0
|
||||||
|
averageValue: 0
|
||||||
|
```
|
||||||
|
|
||||||
|
Veuillez noter que le champ `targetCPUUtilizationPercentage` a été remplacé par un tableau appelé `metrics`.
|
||||||
|
La métrique d'utilisation du processeur (CPU) est une *métrique de ressource*, car elle est représentée en pourcentage
|
||||||
|
d'une ressource spécifiée sur les conteneurs de pod.
|
||||||
|
Notez que vous pouvez spécifier d'autres métriques de ressource en plus du CPU.
|
||||||
|
Par défaut, la seule autre métrique de ressource prise en charge est la mémoire.
|
||||||
|
Ces ressources ne changent pas de nom d'un cluster à l'autre et devraient
|
||||||
|
toujours être disponibles tant que l'API `metrics.k8s.io` est disponible.
|
||||||
|
|
||||||
|
Vous pouvez également spécifier des métriques de ressource en termes de valeurs directes,
|
||||||
|
au lieu de pourcentages de la valeur demandée,
|
||||||
|
en utilisant un `target.type` de `AverageValue` au lieu de `Utilization`,
|
||||||
|
et en définissant le champ correspondant `target.averageValue` au lieu de `target.averageUtilization`.
|
||||||
|
|
||||||
|
Il existe deux autres types de métriques, tous deux considérés comme des *métriques personnalisées* :
|
||||||
|
les métriques de pod et les métriques d'objet.
|
||||||
|
Ces métriques peuvent avoir des noms spécifiques au cluster et
|
||||||
|
nécessitent une configuration de surveillance de cluster plus avancée.
|
||||||
|
|
||||||
|
Le premier de ces types de métriques alternatifs est les *métriques de pod*.
|
||||||
|
Ces métriques décrivent les pods et sont regroupées en moyenne sur l'ensemble des pods,
|
||||||
|
puis comparées à une valeur cible pour déterminer le nombre de réplicas.
|
||||||
|
Elles fonctionnent de manière similaire aux métriques de ressource,
|
||||||
|
à la différence qu'elles ne prennent en charge *seulement* le type de `target` `AverageValue`.
|
||||||
|
|
||||||
|
Les métriques de pod sont spécifiées à l'aide d'un bloc métrique comme suit :
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
type: Pods
|
||||||
|
pods:
|
||||||
|
metric:
|
||||||
|
name: packets-per-second
|
||||||
|
target:
|
||||||
|
type: AverageValue
|
||||||
|
averageValue: 1k
|
||||||
|
```
|
||||||
|
|
||||||
|
Le deuxième type de métrique alternative est *les métriques d'objet*.
|
||||||
|
Ces métriques décrivent un objet différent dans le même espace de noms,
|
||||||
|
au lieu de décrire des Pods.
|
||||||
|
Les métriques ne sont pas nécessairement récupérées à partir de l'objet ;
|
||||||
|
elles le décrivent simplement.
|
||||||
|
Les métriques d'objet prennent en charge
|
||||||
|
les types de `cible` `Value` et `AverageValue`.
|
||||||
|
Avec `Value`, la cible est comparée directement à la métrique renvoyée par l'API.
|
||||||
|
Avec `AverageValue`, la valeur renvoyée par l'API de métriques
|
||||||
|
personnalisées est divisée par le nombre de Pods avant
|
||||||
|
d'être comparée à la cible.
|
||||||
|
L'exemple suivant est la représentation YAML de la métrique `requests-per-second`.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
type: Object
|
||||||
|
object:
|
||||||
|
metric:
|
||||||
|
name: requests-per-second
|
||||||
|
describedObject:
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
name: main-route
|
||||||
|
target:
|
||||||
|
type: Value
|
||||||
|
value: 2k
|
||||||
|
```
|
||||||
|
|
||||||
|
Si vous fournissez plusieurs blocs de métriques similaires,
|
||||||
|
le HorizontalPodAutoscaler examinera chaque métrique à tour de rôle.
|
||||||
|
Le HorizontalPodAutoscaler calculera les nombres de répliques proposés pour chaque métrique,
|
||||||
|
puis choisira celle avec le nombre de répliques le plus élevé.
|
||||||
|
Par exemple, si votre système de surveillance collecte des métriques sur le trafic réseau,
|
||||||
|
vous pouvez mettre à jour la définition ci-dessus en utilisant `kubectl edit` pour qu'elle ressemble à ceci :
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: autoscaling/v2
|
||||||
|
kind: HorizontalPodAutoscaler
|
||||||
|
metadata:
|
||||||
|
name: php-apache
|
||||||
|
spec:
|
||||||
|
scaleTargetRef:
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
name: php-apache
|
||||||
|
minReplicas: 1
|
||||||
|
maxReplicas: 10
|
||||||
|
metrics:
|
||||||
|
- type: Resource
|
||||||
|
resource:
|
||||||
|
name: cpu
|
||||||
|
target:
|
||||||
|
type: Utilization
|
||||||
|
averageUtilization: 50
|
||||||
|
- type: Pods
|
||||||
|
pods:
|
||||||
|
metric:
|
||||||
|
name: packets-per-second
|
||||||
|
target:
|
||||||
|
type: AverageValue
|
||||||
|
averageValue: 1k
|
||||||
|
- type: Object
|
||||||
|
object:
|
||||||
|
metric:
|
||||||
|
name: requests-per-second
|
||||||
|
describedObject:
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
name: main-route
|
||||||
|
target:
|
||||||
|
type: Value
|
||||||
|
value: 10k
|
||||||
|
status:
|
||||||
|
observedGeneration: 1
|
||||||
|
lastScaleTime: <some-time>
|
||||||
|
currentReplicas: 1
|
||||||
|
desiredReplicas: 1
|
||||||
|
currentMetrics:
|
||||||
|
- type: Resource
|
||||||
|
resource:
|
||||||
|
name: cpu
|
||||||
|
current:
|
||||||
|
averageUtilization: 0
|
||||||
|
averageValue: 0
|
||||||
|
- type: Object
|
||||||
|
object:
|
||||||
|
metric:
|
||||||
|
name: requests-per-second
|
||||||
|
describedObject:
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
name: main-route
|
||||||
|
current:
|
||||||
|
value: 10k
|
||||||
|
```
|
||||||
|
|
||||||
|
Ensuite, votre HorizontalPodAutoscaler tenterait de s'assurer
|
||||||
|
que chaque pod consomme environ 50% de sa CPU demandée,
|
||||||
|
en traitant 1000 paquets par seconde,
|
||||||
|
et que tous les pods derrière l'Ingress `main-route`
|
||||||
|
servent un total de 10000 requêtes par seconde.
|
||||||
|
|
||||||
|
### Autoscaling sur des métriques plus spécifiques
|
||||||
|
|
||||||
|
De nombreux pipelines de métriques vous permettent de décrire les métriques soit par leur nom,
|
||||||
|
soit par un ensemble de descripteurs supplémentaires appelés _labels_.
|
||||||
|
Pour tous les types de métriques autres que les ressources (pod, objet et externe, décrits ci-dessous),
|
||||||
|
vous pouvez spécifier un sélecteur de label supplémentaire qui est transmis à votre pipeline de métriques.
|
||||||
|
Par exemple, si vous collectez une métrique `http_requests` avec le label `verb`,
|
||||||
|
vous pouvez spécifier le bloc de métrique suivant pour ne faire varier l'échelle que sur les requêtes de type GET:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
type: Object
|
||||||
|
object:
|
||||||
|
metric:
|
||||||
|
name: http_requests
|
||||||
|
selector: {matchLabels: {verb: GET}}
|
||||||
|
```
|
||||||
|
|
||||||
|
Ce sélecteur utilise la même syntaxe que les sélecteurs d'étiquettes complets de Kubernetes.
|
||||||
|
La chaine de surveillance détermine comment regrouper plusieurs séries en une seule valeur,
|
||||||
|
si le nom et le sélecteur correspondent à plusieurs séries.
|
||||||
|
Le sélecteur est additif et ne peut pas sélectionner des métriques qui décrivent des objets qui ne sont **pas** l'objet cible
|
||||||
|
(les pods cibles dans le cas du type `Pods`, et l'objet décrit dans le cas du type `Object`).
|
||||||
|
|
||||||
|
### Autoscaling sur des métriques non liées aux objets Kubernetes
|
||||||
|
|
||||||
|
Les applications s'exécutant sur Kubernetes peuvent avoir besoin de
|
||||||
|
s'auto-adapter en fonction de métriques qui n'ont pas de relation évidente
|
||||||
|
avec un objet dans le cluster Kubernetes,
|
||||||
|
telles que des métriques décrivant un service hébergé sans corrélation directe avec les espaces de noms Kubernetes.
|
||||||
|
À partir de Kubernetes 1.10, vous pouvez répondre à ce cas d'utilisation avec des *métriques externes*.
|
||||||
|
|
||||||
|
L'utilisation de métriques externes nécessite une connaissance de votre système de surveillance ;
|
||||||
|
la configuration est similaire à celle requise lors de l'utilisation de métriques personnalisées.
|
||||||
|
Les métriques externes vous permettent de mettre à l'échelle automatiquement
|
||||||
|
votre cluster en fonction de n'importe quelle métrique disponible dans votre
|
||||||
|
système de surveillance.
|
||||||
|
Fournissez un bloc `metric` avec un `name` et un `selector`, comme ci-dessus,
|
||||||
|
et utilisez le type de métrique `External` au lieu de `Object`.
|
||||||
|
Si plusieurs séries temporelles correspondent au `metricSelector`,
|
||||||
|
la somme de leurs valeurs est utilisée par le HorizontalPodAutoscaler.
|
||||||
|
Les métriques externes prennent en charge les types de cible `Value` et `AverageValue`, qui fonctionnent exactement de la même manière que lorsque vous utilisez le type `Object`.
|
||||||
|
|
||||||
|
Par exemple, si votre application traite des tâches à partir d'un service de file de messages hébergé,
|
||||||
|
vous pouvez ajouter la section suivante à votre déclaration de
|
||||||
|
HorizontalPodAutoscaler pour spécifier que vous avez besoin
|
||||||
|
d'un travailleur par tranche de 30 tâches en attente.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- type: External
|
||||||
|
external:
|
||||||
|
metric:
|
||||||
|
name: queue_messages_ready
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
queue: "worker_tasks"
|
||||||
|
target:
|
||||||
|
type: AverageValue
|
||||||
|
averageValue: 30
|
||||||
|
```
|
||||||
|
|
||||||
|
Lorsque possible, il est préférable d'utiliser les types de cible métrique personnalisés plutôt que des métriques externes,
|
||||||
|
car cela facilite la sécurisation de l'API des métriques personnalisées pour les administrateurs de cluster.
|
||||||
|
L'API des métriques externes permet potentiellement l'accès à n'importe quelle métrique,
|
||||||
|
il est donc nécessaire que les administrateurs de cluster fassent attention lors de son exposition.
|
||||||
|
|
||||||
|
## Annexe : Conditions d'état du Pod Autoscaler horizontal
|
||||||
|
|
||||||
|
Lorsque vous utilisez la forme `autoscaling/v2` du Pod Autoscaler horizontal,
|
||||||
|
vous pourrez voir les *conditions d'état* définies par Kubernetes sur le Pod
|
||||||
|
Autoscaler horizontal. Ces conditions d'état indiquent si le Pod Autoscaler
|
||||||
|
horizontal est capable de se mettre à l'échelle et s'il est actuellement
|
||||||
|
restreint de quelque manière que ce soit. Les conditions apparaissent dans le
|
||||||
|
champ `status.conditions`.
|
||||||
|
|
||||||
|
Pour voir les conditions affectant un Pod Autoscaler horizontal, nous pouvons utiliser la commande `kubectl describe hpa`.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl describe hpa cm-test
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
Name: cm-test
|
||||||
|
Namespace: prom
|
||||||
|
Labels: <none>
|
||||||
|
Annotations: <none>
|
||||||
|
CreationTimestamp: Fri, 16 Jun 2017 18:09:22 +0000
|
||||||
|
Reference: ReplicationController/cm-test
|
||||||
|
Metrics: ( current / target )
|
||||||
|
"http_requests" on pods: 66m / 500m
|
||||||
|
Min replicas: 1
|
||||||
|
Max replicas: 4
|
||||||
|
ReplicationController pods: 1 current / 1 desired
|
||||||
|
Conditions:
|
||||||
|
Type Status Reason Message
|
||||||
|
---- ------ ------ -------
|
||||||
|
AbleToScale True ReadyForNewScale the last scale time was sufficiently old as to warrant a new scale
|
||||||
|
ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from pods metric http_requests
|
||||||
|
ScalingLimited False DesiredWithinRange the desired replica count is within the acceptable range
|
||||||
|
Events:
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour ce HorizontalPodAutoscaler, vous pouvez voir plusieurs conditions dans un état sain.
|
||||||
|
La première, `AbleToScale`, indique si le HPA est capable de récupérer et de mettre à jour les échelles,
|
||||||
|
ainsi que si des conditions liées à la limitation sont susceptibles d'empêcher le redimensionnement.
|
||||||
|
La deuxième, `ScalingActive`, indique si le HPA est activé (c'est-à-dire que le nombre de répliques de la cible n'est pas nul) et est capable de calculer les échelles souhaitées.
|
||||||
|
Lorsqu'il est `False`, cela indique généralement des problèmes de récupération des métriques.
|
||||||
|
Enfin, la dernière condition, `ScalingLimited`, indique que l'échelle souhaitée a été limitée par le maximum ou le minimum du HorizontalPodAutoscaler.
|
||||||
|
Cela indique que vous souhaiterez peut-être augmenter ou diminuer les contraintes de nombre de répliques minimum ou maximum de votre HorizontalPodAutoscaler.
|
||||||
|
|
||||||
|
## Quantités
|
||||||
|
|
||||||
|
Toutes les métriques dans le HorizontalPodAutoscaler et les API de métriques
|
||||||
|
sont spécifiées à l'aide d'une notation spéciale en nombres entiers connue dans Kubernetes sous le nom de {{< glossary_tooltip term_id=quantity text=quantité >}}.
|
||||||
|
Par exemple, la quantité `10500m` serait écrite comme `10.5` en notation décimale.
|
||||||
|
Les API de métriques renverront des nombres entiers sans suffixe lorsque cela est possible, et renverront généralement des quantités en milli-unités sinon.
|
||||||
|
Cela signifie que vous pouvez voir la valeur de votre métrique fluctuer entre `1` et `1500m`, ou `1` et `1.5` lorsqu'elle est écrite en notation décimale.
|
||||||
|
|
||||||
|
## Autres scénarios possibles
|
||||||
|
|
||||||
|
### Création du autoscaler de manière déclarative
|
||||||
|
|
||||||
|
Au lieu d'utiliser la commande `kubectl autoscale` pour créer un HorizontalPodAutoscaler de manière impérative,
|
||||||
|
nous pouvons utiliser le manifeste suivant pour le créer de manière déclarative :
|
||||||
|
|
||||||
|
{{< codenew file=application/hpa/php-apache.yaml >}}
|
||||||
|
|
||||||
|
Ensuite, créez l'autoscaler en exécutant la commande suivante :
|
||||||
|
|
||||||
|
```shell
|
||||||
|
kubectl create -f https://k8s.io/examples/application/hpa/php-apache.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
horizontalpodautoscaler.autoscaling/php-apache created
|
||||||
|
```
|
|
@ -0,0 +1,35 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: php-apache
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
run: php-apache
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
run: php-apache
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: php-apache
|
||||||
|
image: registry.k8s.io/hpa-example
|
||||||
|
ports:
|
||||||
|
- containerPort: 80
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: 500m
|
||||||
|
requests:
|
||||||
|
cpu: 200m
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: php-apache
|
||||||
|
labels:
|
||||||
|
run: php-apache
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- port: 80
|
||||||
|
selector:
|
||||||
|
run: php-apache
|
Loading…
Reference in New Issue