前言

之前说了,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进行确认:

naison@P_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就够用了,所以就没看了。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐