tnblog
首页
视频
资源
登录

Horizontal Pod Autoscaler (HPA) Pod动态扩容

5871人阅读 2020/4/19 12:07 总访问:3511468 评论:0 收藏:0 手机
分类: 容器编排

Kubernetes

Horizontal Pod Autoscaler (HPA) Pod动态扩容


HPA简介


我们都知道通过手工执行 kubectl scale 命令可以手工实现Pod的扩容于缩容。
而后谷歌又发布了一个动态扩容与缩容的功能就是(HPA)


检测方式


  • CPUUtilizationPercentage 通过运算Pod的平均值来进行动态
  • 通过应用自定义的度量来进行,比如Service在每秒内的相应请求数(TPSQPS


HAP define Yaml(v1)


  1. apiVersion: autoscaling/v1
  2. kind: HorizontalPodAutoscaler
  3. metadata:
  4. name: php-apache
  5. namespace: default
  6. spec:
  7. maxReplicas: 10
  8. minReplicas: 1
  9. scaleTargetRef:
  10. kind: Deployment
  11. name: php-apache
  12. targetCPUUtilizationPercentage: 90

等同于

  1. kubectl autoscale deployment php-apache --cpu-percent=90 --min=1 --max=10

解释一下

名称 定义
scaleTargetRef 监控目标
scaleTargetRef->kind 监控类型
scaleTargetRef->name 监控名称
maxReplicas 控制Pod最大副本数量
targetCPUUtilizationPercentage 当CPU的值超过 90% 将自动进行扩容

简单一句话:监控名为php-apache的Deployment控制器,当控制器中的 Pod CPU值超过 90% 将进行扩容 Pod 的副本数量,扩容数量范围在 1~10 之间。

注意:请提前预装Heapster组件或Metrics Server


Pod简单实现水平扩容方式


  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: k8s-demo
  5. namespace: netcore
  6. labels:
  7. name: k8s-demo
  8. spec:
  9. replicas: 2
  10. selector:
  11. matchLabels:
  12. name: k8s-demo
  13. template:
  14. metadata:
  15. labels:
  16. name: k8s-demo
  17. spec:
  18. containers:
  19. - name: k8s-demo
  20. image: aidasi/k8sdemoapi:v2
  21. resources:
  22. requests:
  23. cpu: 200m
  24. memory: 200Mi
  25. limits:
  26. cpu: 1
  27. memory: 500Mi
  28. ports:
  29. - containerPort: 80
  30. imagePullPolicy: Always
  31. livenessProbe:
  32. httpGet:
  33. path: /WeatherForecast/1
  34. port: 80
  35. timeoutSeconds: 5
  36. readinessProbe:
  37. httpGet:
  38. path: /WeatherForecast/1
  39. port: 80
  40. timeoutSeconds: 5
  41. ---
  42. kind: Service
  43. apiVersion: v1
  44. metadata:
  45. name: k8s-demo
  46. namespace: netcore
  47. spec:
  48. type: NodePort
  49. ports:
  50. - port: 80
  51. targetPort: 80
  52. selector:
  53. name: k8s-demo


HAP define Yaml(v2)


  1. apiVersion: autoscaling/v2beta2
  2. kind: HorizontalPodAutoscaler
  3. metadata:
  4. name: php-apache
  5. namespace: default
  6. spec:
  7. maxReplicas: 10
  8. minReplicas: 1
  9. scaleTargetRef:
  10. apiVersion: apps/v1
  11. kind: Deployment
  12. name: php-apache
  13. metrics:
  14. - type: Resource
  15. resource:
  16. name: cpu
  17. target:
  18. type: Utilization
  19. averageUtilization: 50
名称 定义
metrics 目标指标值。(当系统超过目标值时,自动进行扩缩操作)
metrics—>type 指标类型。
1. Resource 可以设置CPU(Utilization)与内存(AverageValue)(都是通过平均值进行计算)。
2. Pods通过Pod副本的标志值进行平均值计算 .
3. Object通过应用系统自定义指标值进行运算(如:ingress)
注意:都需要预先启动 Metrics Server 服务


Pod类型的用法


设置Pod的标志名为packets-per-second ,在目标 Pod 内存平均值为 1000 时,进行扩缩容操作。

  1. metrics:
  2. - type: Pods
  3. pod:
  4. name: packets-per-second
  5. target:
  6. type: AverageValue
  7. averageValue: 1k


Object类型的用法


设置标志名为packets-per-second ,其值来源于 Ingress main-route”,将目标值(value)设置为2000,即在 Ingress 的每秒请求数量高达 2000 个时进行扩缩操作。

  1. metrics:
  2. - type: Object
  3. object:
  4. metric:
  5. name: requests-per-second
  6. describedObject:
  7. apiVersion: extensions/v1beta1
  8. kind: Ingress
  9. name: main-route
  10. target:
  11. type: Value
  12. averageValue: 2k

Example Two:

设置标志名为 http_requests ,并且该资源对象具有标签 verb=GET ,在指定平均值达到500时触发扩缩容操作

  1. metrics:
  2. - type: Object
  3. object:
  4. metric:
  5. name: 'http_requests'
  6. selector: 'verb=GET'
  7. target:
  8. type: AverageValue
  9. averageValue: 500

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价
这一世以无限游戏为使命!
排名
2
文章
642
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术