Skip to content

Latest commit

 

History

History
78 lines (66 loc) · 3.06 KB

14.HorizontalPodAutoscaling.md

File metadata and controls

78 lines (66 loc) · 3.06 KB

Horizontal Pod Autoscaling

Horizontal Pod Autoscaling,Kubernetes会自动地根据观察到的CPU利用率(或者通过一些其他应用程序提供的自定义的指标)自动地缩放在replication controller、deployment或replica set上pod的数量。

Horizontal Pod Autoscaler是作为Kubernetes API resource(K8s API 资源)和controller(控制器)实现的。资源决定控制器的行为。控制器周期性的调整replication controller或deployment中的Pod副本数量,以便将获得的CPU利用率与用户指定的目标利用率匹配。

注意,Horizontal Pod Autoscaling并不适用于不能缩放的对象,例如“DaemonSet”。

Metrics支持

根据不同版本的API中,HPA autoscale时靠以下指标来判断资源使用率:

  • autoscaling/v1: CPU
  • autoscaling/v2alpha1
    • 内存
    • 自定义metrics
    • 多metrics组合: 根据每个metric的值计算出scale的值,并将最大的那个值作为扩容的最终结果

HPA 测试

配置HPA 需要在 kube-controller-manager.yaml 添加如下内容:

--horizontal-pod-autoscaler-use-rest-clients=true
--master=<apiserver-address>:<port>

本实验环境基于k8s 1.11,仅使用autoscaling/v1 版本API,注意确保k8s 集群插件 coredns 和 metrics-service 或 heapster(从k8s 1.11开始不建议使用) 工作正常。

# 创建deploy和service
$ kubectl run my-tomcat --image=tomcat:8.0.53-jre7 --requests=cpu=200m --expose --port=8080

# 创建autoscaler
$ kubectl autoscale deploy my-tomcat --cpu-percent=50 --min=1 --max=10
或
$ cat my-tomcat-hpa.yaml
apiVersion: autosacling/v2beta1
Kind: HorizontalPodAutoscaler
metadata:
  name: my-tomcat-hpa
spec:
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name:  my-tomcat
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resouce:
      name: cpu
      targetAverageUtilization: 80
  - type: Resource
    resource:
      name: memory
      targetAverageValue: 200Mi

# 等待3~5分钟查看hpa状态
$ kubectl get hpa my-tomcat
NAME        REFERENCE              TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
my-tomcat   Deployment/my-tomcat   1%/50%    1         10        1          2m

# 在任意主机访问  CLUSTER-IP 加端口
$ while true; do curl -I http://10.254.218.221:8080/; done;

# 等待约5分钟查看hpa显示负载增加,且副本数目增加为3
$ kubectl get hpa my-tomcat
NAME        REFERENCE              TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
my-tomcat   Deployment/my-tomcat   108%/50%   1         10        3          5m

# CTRL+C 结束上述循环程序,稍后副本数目变回1
$ kubectl get hpa my-tomcat
NAME        REFERENCE              TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
my-tomcat   Deployment/my-tomcat   1%/50%    1         10        3          11m
$ kubectl get hpa my-tomcat
NAME        REFERENCE              TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
my-tomcat   Deployment/my-tomcat   0%/50%    1         10        1          31m

# 清除测试环境
$ kubectl delete deployment my-tomcat
$ kubectl delete deployment my-tomcat