第五章 k8s Pod水平自动缩放

时间:2022-11-13 21:00:54

官网

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

原理

基本原理:HPA 通过监控分析控制器控制的所有 Pod 的负载变化情况来确定是否需要调整 Pod 的副本数量

HPA的实现有两个版本:

  • autoscaling/v1,只包含了根据CPU指标的检测,稳定版本
  • autoscaling/v2,支持根据memory或者用户自定义指标进行伸缩

第五章 k8s Pod水平自动缩放


部署教程

​https://github.com/kubernetes-sigs/metrics-server​

开始部署hpa

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.1/components.yaml


hap部署验证

kubectl top pod  # 查看pod资源使用
kubectl top node # 查看node资源使用


创建hpa

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa-mem
namespace: test # 跟要自动伸缩的deploy要在同一个命名空间
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment # 这里指定要自动伸缩的deployment的名字
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa-cpu
namespace: test # 跟要自动伸缩的deploy要在同一个命名空间
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment # 这里指定要自动伸缩的deployment的名字
minReplicas: 1
maxReplicas: 10
targetCPUUtilizationPercentage: 80


查看结果

kubectl describe deployment nginx-deployment -n test
kubectl describe hpa nginx-hpa-mem -n test
kubectl describe hpa nginx-hpa-cpu -n test


注意事项

Deployment对象必须配置requests的参数,不然无法获取监控数据,也无法通过HPA进行动态伸缩