Mise à l'échelle automatique des pods
J'ai mentionné précédemment que l'expansion et la contraction peuvent être réalisées en exécutant manuellement kubectl scale
des commandes et Dashboard
en opérant sur Internet, mais après tout, elles doivent être actionnées manuellement une fois à chaque fois, et il n'est pas certain que le volume de demandes commerciales soit important, donc si il ne peut pas être automatisé Pod
C'est aussi une chose très gênante à agrandir et à rétrécir. Ce serait formidable si Kubernetes
le système pouvait Pod
augmenter et diminuer automatiquement en fonction des changements de charge actuels, car ce processus n'est pas fixe et se produit fréquemment, de sorte que la méthode manuelle n'est pas très réaliste.
Heureusement, Kubernetes
nous avons mis à notre disposition un tel objet ressource : Horizontal Pod Autoscaling
(Pod horizontal auto-scaling), abréviation HPA
. C'est le principe le plus fondamental pour déterminer si le nombre de répliques doit être ajusté HAP
en surveillant, analysant RC
ou Deployment
contrôlant tous Pod
les changements de charge .Pod
HPA
HPA
kubernetes
Il est conçu comme un seul dans le cluster , controller
nous pouvons simplement kubectl autoscale
créer un HPA
objet de ressource via la commande, HPA Controller
le temps d'interrogation par défaut est de 30 secondes (peut être défini par kube-controller-manager
le drapeau --horizontal-pod-autoscaler-sync-period
), interroger l'utilisation des ressources dans la ressource spécifiée (RC ou déploiement) Pod
, et Par rapport à la valeur et à l'index définis au moment de la création, la fonction de mise à l'échelle automatique peut être réalisée.
Après l'avoir créé HPA
, vous obtiendrez la valeur moyenne de chaque taux d'utilisation ou valeur d'origine HPA
à partir Heapster
du terminal défini par l'utilisateur , puis le comparerez avec les indicateurs qui y sont définis, puis calculerez la valeur spécifique qui doit être mise à l'échelle et effectuerez les opérations correspondantes. . Actuellement, les données peuvent être obtenues à partir de deux endroits :RESTClient
Pod
HPA
HPA
- Heapster : ne prend en charge que
CPU
l'utilisation - Surveillance personnalisée : Nous vous expliquerons comment utiliser cette partie dans l'article de surveillance suivant
Introduisons maintenant Heapster
la méthode d'expansion et de contraction automatique à partir de l'acquisition des données de surveillance, nous devons donc d'abord l'installer Heapster
. Dans l' kubeadm
article précédent sur la construction d'un cluster, nous avons en fait Heapster
tiré les images pertinentes vers les nœuds par défaut, donc Ensuite, nous n'avons qu'à déployer. Nous utilisons Heapster
ici la version 1.4.2. Allez Heapster
à github
la page :
https://github.com/kubernetes/heapster
Nous yaml
enregistrons les fichiers sous ce répertoire dans notre cluster, puis utilisons kubectl
l'outil de ligne de commande pour les créer. De plus, une fois la création terminée, si nous avons besoin d' Dashboard
y voir le graphique de surveillance, nous devons également Dashboard
y configurer notre heapster-host
.
De même, créons un pod Deployment
géré Nginx
et utilisons-le HPA
pour la mise à l'échelle automatique. Deployment
Le fichier défini YAML
est le suivant : (hap-deploy-demo.yaml)
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hpa-nginx-deploy
labels:
app: nginx-demo
spec:
revisionHistoryLimit: 15
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
Créez ensuite Deployment
:
$ kubectl create -f hpa-deploy-demo.yaml
Créons-en un maintenant HPA
, qui peut être kubectl autoscale
créé avec la commande :
$ kubectl autoscale deployment hpa-nginx-deploy --cpu-percent=10 --min=1 --max=10
deployment "hpa-nginx-deploy" autoscaled
···
$ kubectl get hpa
NAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGE
hpa-nginx-deploy Deployment/hpa-nginx-deploy 10% 0% 1 10 13s
Cette commande crée une ressource associée hpa-nginx-deploy HPA
, le nombre minimum de réplicas de pod est 1 et le maximum est 10. HPA
Le nombre de pods sera dynamiquement augmenté ou diminué en fonction du taux d'utilisation du processeur défini (10 %).
Bien sûr, en plus d'utiliser kubectl autoscale
des commandes pour créer, nous pouvons toujours YAML
créer HPA
des objets de ressource sous la forme de création de fichiers. Si nous ne savons pas comment l'écrire, nous pouvons vérifier le fichier créé par la HPA
ligne de commande ci-dessus YAML
:
$ kubectl get hpa hpa-nginx-deploy -o yaml
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
creationTimestamp: 2017-06-29T08:04:08Z
name: nginxtest
namespace: default
resourceVersion: "951016361"
selfLink: /apis/autoscaling/v1/namespaces/default/horizontalpodautoscalers/nginxtest
uid: 86febb63-5ca1-11e7-aaef-5254004e79a3
spec:
maxReplicas: 5 //资源最大副本数
minReplicas: 1 //资源最小副本数
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment //需要伸缩的资源类型
name: nginxtest //需要伸缩的资源名称
targetCPUUtilizationPercentage: 50 //触发伸缩的cpu使用率
status:
currentCPUUtilizationPercentage: 48 //当前资源下pod的cpu使用率
currentReplicas: 1 //当前的副本数
desiredReplicas: 2 //期望的副本数
lastScaleTime: 2017-07-03T06:32:19Z
YAML
Ok, maintenant nous pouvons créer un fichier de description basé YAML
sur le fichier ci-dessus HPA
.
Maintenant, augmentons la charge à tester, créons-en un busybox
et parcourons les services créés ci-dessus.
$ kubectl run -i --tty load-generator --image=busybox /bin/sh
If you don't see a command prompt, try pressing enter.
/ # while true; do wget -q -O- http://172.16.255.60:4000; done
Comme vous pouvez le voir sur la figure ci-dessous, HPA a commencé à fonctionner.
$ kubectl get hpa
NAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGE
hpa-nginx-deploy Deployment/hpa-nginx-deploy 10% 29% 1 10 27m
En même temps, nous vérifions le nombre de copies de la ressource associée hpa-nginx-deploy, et le nombre de copies est passé de 1 à 3.
$ kubectl get deployment hpa-nginx-deploy
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hpa-nginx-deploy 3 3 3 3 4d
Dans le même temps, vérifiez à nouveau HPA
, en raison de l'augmentation du nombre d'exemplaires, le taux d'utilisation est également resté aux alentours de 10 %.
$ kubectl get hpa
NAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGE
hpa-nginx-deploy Deployment/hpa-nginx-deploy 10% 9% 1 10 35m
En même temps, éteignons-le busybox
pour réduire la charge, puis attendons un moment pour observer HPA
et Deployment
objecter
$ kubectl get hpa
NAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGE
hpa-nginx-deploy Deployment/hpa-nginx-deploy 10% 0% 1 10 48m
$ kubectl get deployment hpa-nginx-deploy
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hpa-nginx-deploy 1 1 1 1 4d
Vous pouvez voir que le nombre de copies est passé de 3 à 1.
Cependant, l'indicateur actuel HPA
n'est que le taux d'utilisation, ce qui n'est pas très flexible. Dans les articles suivants, nous allons automatiquement étendre et réduire la capacité CPU
en fonction de notre suivi personnalisé .Pod