0


【Kubernetes】k8s集群之HPA

一、HPA 概述

HPA(Horizontal Pod Autoscaling)Pod 水平自动伸缩,Kubernetes 有一个 HPA 的资源,HPA 可

以根据 CPU 利用率自动伸缩一个 Replication Controller、 Deployment 或者Replica Set 中的 Pod

数量

HPA 基于 Master 上的 kube-controller-manager 服务启动参数 --horizontal-pod-autoscaler-sync-period 定义的时长(默认为15秒),周期性的检测 Pod 的 CPU 使用率
HPA 与之前的 RC、Deployment 一样,也属于一种 Kubernetes 资源对象。通过追踪分析 RC 控制的所有目标 Pod 的负载变化情况, 来确定是否需要针对性地调整目标Pod的副本数,这是HPA的实现原理
metrics-server:集群插件组件,用于收集和聚合从每 kubelet 中提取的资源指标。API Server 提供 Metrics API 以供 HPA、VPA和 kubectl top 命令使用。Metrics Server 是 Metrics API 的参考实现

二、部署 metrics-server

  1. 上传components.yaml文件
  2. kubectl apply -f components.yaml
  3. kubectl top node

三、部署 HPA

  1. //创建用于测试的 Pod 资源,并设置请求资源为 cpu=200m
  2. vim hpa-pod.yaml
  3. apiVersion: apps/v1
  4. kind: Deployment
  5. metadata:
  6. labels:
  7. run: php-apache
  8. name: php-apache
  9. spec:
  10. replicas: 1
  11. selector:
  12. matchLabels:
  13. run: php-apache
  14. template:
  15. metadata:
  16. labels:
  17. run: php-apache
  18. spec:
  19. containers:
  20. - image: mirrorgooglecontainers/hpa-example
  21. name: php-apache
  22. imagePullPolicy: IfNotPresent
  23. ports:
  24. - containerPort: 80
  25. resources:
  26. requests:
  27. cpu: 200m
  28. limits:
  29. cpu: 500m
  30. ---
  31. apiVersion: v1
  32. kind: Service
  33. metadata:
  34. name: php-apache
  35. spec:
  36. ports:
  37. - port: 80
  38. protocol: TCP
  39. targetPort: 80
  40. selector:
  41. run: php-apache
  42. kubectl apply -f hpa-pod.yaml
  43. kubectl get pods

//使用 kubectl autoscale 命令创建 HPA 控制器,设置 cpu 负载阈值为请求资源的 50%,指定最少负载节点数量为 1 个,最大负载节点数量为 10 个

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

四、总结

HPA的工作原理:利用metrics-server组件定期的(默认为15秒)收集Pod资源的CPU或内存平均

负载情况,根据HPA资源配置的CPU或内存的requests资源量阈值百分比来动态调整Pod的副本数

HPA扩容时,Pod副本数量上升会比较快;缩容时,Pod副本数量下降会比较慢(默认冷却时间为

5m)


本文转载自: https://blog.csdn.net/weixin_68840588/article/details/141388818
版权归原作者 廿四味£ 所有, 如有侵权,请联系我们删除。

“【Kubernetes】k8s集群之HPA”的评论:

还没有评论