Extension et rétrécissement automatiques du pod de Kubernetes et principe HPA

Dans les scénarios commerciaux réels, nous rencontrons souvent des scénarios dans lesquels un service doit être étendu (par exemple: test de stress test, pic de commerce électronique, grande promotion, ou en raison de contraintes de ressources, réduction de la charge de travail, etc., nous devons vérifier le nombre d'instances de service. Opérations d'extension). Dans Kubernetes, le mécanisme de mise à l'échelle de Deployment / RC peut être utilisé pour faciliter les opérations de mise à l'échelle automatisées.

Mise à l'échelle de Kubernetes

L'expansion et la contraction du pod de Kubernetes sont divisées en deux types: manuel et automatique

1. Mode manuel

En mode manuel, le nombre de copies de pod est défini pour un déploiement / RC via la commande kubectl scale. Cela peut être fait en un seul clic.

Exemple:

chat scale.yaml

---

apiVersion: apps / v1

genre: déploiement

métadonnées:

 nom: ops-nginx

 espace de noms: ops

spec:

 sélecteur:

   matchLabels:

     application: ops-nginx

 répliques: 1

 modèle:

   métadonnées:

     Étiquettes:

       application: ops-nginx

   spec:

     imagePullSecrets:

     - nom: cd-registry

     conteneurs:

     - image: port.ttsingops.com/nginx/nginx:1.16.0

       nom: ops-nginx

kubectl applique -f scale.yaml

kubectl obtenir po -n ops

1.png

#Développer

déploiement à l'échelle kubectl ops-nginx -n ops --replicas 5

2.png

# Opération de rétrécissement

déploiement à l'échelle kubectl ops-nginx -n ops --replicas 2

kubectl obtenir po -n ops

3.png

2. Mode automatique

L'utilisateur doit se développer et se contracter selon un certain indice de performance ou basé sur un index personnalisé Prometheus, et le système changera et s'ajustera automatiquement en fonction de l'indice de performance dans cette plage.

Introduction à HAP

 HPA (Horizontal Pod Autoscaler, Pod horizontal autoscaler) a été introduit à partir de Kubernetes V1.1. Il est utilisé pour réaliser la fonction d'expansion et de contraction automatique du pod en fonction de l'utilisation du processeur. Le contrôleur HPA est basé sur la durée définie par le paramètre de démarrage du service kube-controller-manager du maître - horizontal-pod-autoscaler-sync-period, détecte périodiquement l'utilisation du processeur du pod cible et vérifie le RC ou le déploiement lorsque les conditions sont remplies. Le nombre de copies de pod est ajusté pour correspondre à l'utilisation moyenne du processeur du pod définie par l'utilisateur.

Evolution de la version de HPA:

HPA prend actuellement en charge trois versions principales: autoscaling / v1, autoscaling / v2beta1 et autuscaling / v2beta2.

Quelle est la différence entre ces trois versions?

La version autoscaling / v1 prend uniquement en charge la mise à l'échelle horizontale des pods avec un indicateur de processeur.

L'autoscaling / v2beta1 ajoute la prise en charge des indicateurs personnalisés. Outre les indicateurs exposés par cadvisor, il prend également en charge les indicateurs personnalisés, tels que QPS fourni par un tiers, ou l'expansion basée sur d'autres ressources, qui doit prendre en charge certains composants tiers. .

autoscaling / v2beta2 ajoute la prise en charge des indicateurs externes

Le principe de l'expansion et de la contraction automatiques HPA?

 Le serveur de métriques de Kubernetes collecte en permanence les données métriques de toutes les copies de pod. Le contrôleur HPA obtient ces données via l'API Metrics Server (l'API de Heapster ou l'API d'agrégation, qui est lentement obsolète et utilise Metrice Server) et calcule en fonction des règles de mise à l'échelle définies pour obtenir le nombre de copies de pod cible. Lorsque le nombre de copies du pod cible est différent du nombre de copies actuelles, le contrôleur HPA lance une opération de mise à l'échelle vers le contrôleur de copie du pod (RC / déploiement) pour ajuster le nombre de copies du pod pour terminer l'opération de mise à l'échelle.

4.png

En pensant:

Si l'utilisation du processeur d'un pod augmente soudainement dans un certain laps de temps, puis diminue immédiatement, le pod ne se développera-t-il pas et ne rétrécira-t-il pas fréquemment? Autrement dit, le nombre de copies est constamment ajusté. Il y aura un cycle de refroidissement ici. Quel est le temps de refroidissement après chaque expansion et contraction.

Dans HPA, le cycle de refroidissement par extension par défaut est de 3 minutes et le cycle de refroidissement par rétraction est de 5 minutes.

Le temps de refroidissement peut être réglé en ajustant les paramètres de démarrage du composant kube-controller-manager:

- refroidissement d'expansion horizontal-pod-autoscaler-downscale-delay

- refroidissement horizontal-pod-autoscaler-upscale-delay shrink

Exemple:

Prenons un exemple, puis mettons la pression sur le pod pour une expansion automatique.

chat auto_scale.yaml

---

apiVersion: apps / v1

genre: déploiement

métadonnées:

 nom: auto-nginx

 espace de noms: ops

spec:

 sélecteur:

   matchLabels:

     application: auto-nginx

 répliques: 1

 modèle:

   métadonnées:

     Étiquettes:

       application: auto-nginx

   spec:

     imagePullSecrets:

     - nom: cd-registry

     conteneurs:

     - image: port.ttsingops.com/nginx/nginx:1.16.0

       nom: auto-nginx

       Ressources:

         demandes:

           processeur: 200m

       ports:

       - conteneurPort: 80

---

#Un service

apiVersion: v1

genre: Service

métadonnées:

 nom: auto-nginx

 espace de noms: ops

spec:

 type: NodePort

 ports:

 - port: 8088

   protocole: TCP

   targetPort: 80

   nodePort: 38088

 selector:

   app: auto-nginx

kubectl apply -f auto_scale.yaml

kubectl get svc,pod -n ops -o wide

5.png

cat auto_nginx_hpa.yaml

apiVersion: autoscaling/v1

kind: HorizontalPodAutoscaler

metadata:

 name: auto-nginx-hpa

 namespace: ops

spec:

 scaleTargetRef:

   apiVersion: apps/v1

   kind: Deployment

   name: auto-nginx

 minReplicas: 1

 maxReplicas: 8

 targetCPUUtilizationPercentage: 50

kubectl apply -f auto_nginx_hpa.yaml

kubectl get  hpa -n ops

6.png

使用apache的ab压测工具进行施压

可以在node任意节点安装ab工具

yum install -y httpd-tools

ab -n 10000000  -c 10000 http://192.168.1.211:38088/index.html

#因为我把Service映射到NodePort

#查看hpa情况

kubectl get hpa -n ops

7.png

#查看Pod情况

kubectl get pods -n ops

8.png

#查看events信息

kubectl get events -n ops

9.png

#等待几分钟后,再次查看Pod缩容情况

kubectl get po -n ops

10.png

思考:

Kubernetes是如何对Pod的副本数量进行扩缩容的呢?

官网已经有详细解释:就是根据当前CPU指标和所需CPU指标进行相除。

Par exemple: l'indice CPU actuel est de 200 m et la valeur d'index requise est de 100 m, le nombre de copies sera doublé, car 200,0 / 100,0 = 2.

Si la valeur actuelle est de 50 m, le nombre de copies sera divisé par deux, car 50,0 / 100,0 = 0,5.

11.png

Pour plus de détails, veuillez vous référer à l'explication du site officiel:

https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/

problème:

1. Lorsque le pod de mise à l'échelle automatique HPA est en cours, la mise à l'échelle automatique n'est pas possible.

Besoin d'installer le composant de serveur de métriques

Veuillez vous reporter à 5. Installer le serveur de métriques dans << Ansbile Deploying Kubernetes 1.16.10 Cluster >>

Etapes de configuration

【Matériel de référence】

https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/


Je suppose que tu aimes

Origine blog.51cto.com/3388803/2534750
conseillé
Classement