Kubernetes的Pod自动化扩缩容及HPA原理

在实际的业务场景中,咱们常常会遇到某个服务须要扩容的场景(例如:测试压测、电商秒杀、大促、或因为资源紧张、工做负载下降等等都须要对服务实例数进行扩缩容操做)。在Kubernetes中,能够对Deployment/RC的Scale机制来方便的进行自动化扩缩容操做。html

Kubernetes扩缩容node

Kubernetes对Pod的扩缩容分为:手动和自动两种nginx

1.手动模式apache

手动模式经过kubectl scale命令对一个Deployment/RC进行Pod副本数量的设置。便可一键完成。api

示例:app

cat scale.yamlide

---工具

apiVersion: apps/v1性能

kind: Deployment测试

metadata:

 name: ops-nginx

 namespace: ops

spec:

 selector:

   matchLabels:

     app: ops-nginx

 replicas: 1

 template:

   metadata:

     labels:

       app: ops-nginx

   spec:

     imagePullSecrets:

     - name: cd-registry

     containers:

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

       name: ops-nginx

kubectl apply -f scale.yaml

kubectl get po -n ops

1.png

#进行扩容

kubectl scale deployment ops-nginx -n ops --replicas 5

2.png

#缩容操做

kubectl scale deployment ops-nginx -n ops --replicas 2

kubectl get po -n ops

3.png

2.自动模式

须要经过用户根据某个性能指标或者基于Prometheus自定义指标来进行扩缩容,系统会自动在这个范围内根据性能指标进行变化调整。

HAP简介

 HPA(Horizontal Pod Autoscaler,Pod水平自动伸缩) 是从Kubernetes V1.1版本引入。用于实现基于CPU使用率进行自动Pod扩缩容的功能。 HPA控制器基于Master的kube-controller-manager服务启动参数 --horizontal-pod-autoscaler-sync-period定义的时长,周期性的检测目标Pod的CPU使用率,并在知足条件时对RC或Deployment中的Pod副本数量进行调整,以符合用户定义的平均Pod CPU使用率。

HPA的版本演进:

目前HPA已经支持三大版本:autoscaling/v一、autoscaling/v2beta1和autuscaling/v2beta2 三个大版本。

哪这个三个版本有何区别呢?

autoscaling/v1版本,只支持CPU一个指标的Pod水平伸缩。

而autoscaling/v2beta1增长了支持自定义指标,除了cadvisor暴露的指标外,还支持自定义指标,好比像第三方提供的QPS,或者基于其余的一些资源进行扩容,就是支持一些第三方的一些组件了。

autoscaling/v2beta2又额外增长了外部指标支持

HPA自动扩缩容原理?

 Kubernetes中的Metrics Server持续采集全部Pod副本的指标数据。HPA控制器经过Metrics Server的API(Heapster的API或聚合API,已经慢慢废弃了,使用metrice Server)获取这些数据,基于用于定义的扩缩容规则进行计算,获得目标Pod副本数量。当目标Pod副本数量与当前副本数量不一样时,HPA控制器向Pod的副本控制器(RC/Deployment)发起scale操做,调整Pod的副本数量,完成扩缩容操做。

4.png

思考:

若某个Pod的CPU使用率在在必定时间内,忽然升高其后立马下降,这样Pod岂不是频繁的扩缩容。也便是副本的数量不断的调整。这里就会有冷却周期。每次在扩缩容后,冷却时间是多少。

在HPA中,默认的扩容冷却周期是3min,缩容冷却周期是5min。

能够经过调整kube-controller-manager组件启动参数设置冷却时间:

--horizontal-pod-autoscaler-downscale-delay  扩容冷却

--horizontal-pod-autoscaler-upscale-delay 缩容冷却

示例:

下面经过一个示例,而后对pod进行施压,进行自动扩缩容。

cat auto_scale.yaml

---

apiVersion: apps/v1

kind: Deployment

metadata:

 name: auto-nginx

 namespace: ops

spec:

 selector:

   matchLabels:

     app: auto-nginx

 replicas: 1

 template:

   metadata:

     labels:

       app: auto-nginx

   spec:

     imagePullSecrets:

     - name: cd-registry

     containers:

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

       name: auto-nginx

       resources:

         requests:

           cpu: 200m

       ports:

       - containerPort: 80

---

#Service

apiVersion: v1

kind: Service

metadata:

 name: auto-nginx

 namespace: ops

spec:

 type: NodePort

 ports:

 - port: 8088

   protocol: 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指标进行相除。

例如:当前CPU指标为200m,所需指标值为100m,则副本数量将增长一倍,由于200.0/100.0=2。

若是当前值为50m,会将副本数量减半,因50.0/100.0 = 0.5。

11.png

具体可参见官网解释:

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

问题:

1.在进行HPA自动伸缩Pod,没法进行自动伸缩

须要安装metrics-server组件

可参见<<Ansbile部署Kubernetes 1.16.10 集群>>中的5.安装metrics-server

配置步骤

【参考资料】

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

相关文章
相关标签/搜索