欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

k8s中hpa使用问题记录

程序员文章站 2024-03-13 22:17:04
...

前言

之前说了,hpa没有生效的问题,现在来说说hpa使用的问题。

问题

那么是个什么问题尼?问题就是hpa的百分比设置的太大了,例如:

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: istio-ingressgateway
  namespace: istio-system
spec:
  maxReplicas: 5
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: istio-ingressgateway
  targetCPUUtilizationPercentage: 80

比如这里设置的targetCPUUtilizationPercentage,80%,但是由于deployment的request标签的值设置的太小了,所以会极速扩容,
上次说的解决方案是将这个百分比设置的大一些,比如1000%这样,但是这样有个缺点,那就是不大直观,并且一看不知道什么意思,
所以需要解决这个不友好的问题。

分析

通过阅读k8s官网上的对于hpa的描述,发现了其实还可以使用如下的方式使用hpa:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: istio-ingressgateway
  namespace: istio-system
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: istio-ingressgateway
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
    #    type: Utilization
    #    averageUtilization: 100
        type: AverageValue 
        averageValue: "2m"
  - type: Resource
    resource:
      name: memory
      target:
     #   type: Utilization
     #   averageUtilization: 100
        type: AverageValue 
        averageValue: "200Mi"

不过这里要注意的点是,apiVersion是v2beta2,大家也许需要通过命令
kubectl api-versions进行确认:

[email protected]_CAIWFENG-MB0 hpa % kubectl api-versions
admissionregistration.k8s.io/v1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling.internal.knative.dev/v1alpha1
autoscaling/v1
autoscaling/v2beta1
autoscaling/v2beta2

可以看到这里的autoscaling有三个版本,v1,v2beta1和v2beta2,只有v2beta2是支持memory和cpu的,v1和v2beta1是只支持cpu的,
,细心的小伙伴可以发现,这里的type有两种类型,Utilization(使用率,百分比的形式)和AverageValue(平均值,128Mi或者500m的形式),
之前说的使用百分比就是使用的Utilization的形式,不过需要设置很大的值,才可以正常使用,而如果使用平均值,就可以使用和resource标签
同样的设置的方式,所以会比较直观些。

其实hpa的说明是还可以支持自定义的指标类型,但是目前cpu和memory就够用了,所以就没看了。