Почему HPA увеличивается, даже если использование не достигает порогового значения?

#kubernetes

Вопрос:

Я развернул HPA, конфигурация которого показана внизу. Он масштабируется, когда загрузка процессора или памяти превышает 75%. Начальное количество реплик равно 1, а максимальное-3. Но я вижу, что количество модулей было увеличено до 3 1 через несколько минут после развертывания HPA.

Текущее использование процессора/памяти показано ниже. Вы можете видеть, что это очень мало по сравнению с requested ресурсами, которые составляют 2 процессора и 8 ГБ памяти. Я не понимаю, почему он масштабируется. Я допустил какую-либо ошибку в конфигурации?

 $ kubectl top pod transform-67df4445c5-6qpdd
W0818 16:04:43.199730   63930 top_pod.go:140] Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flag
NAME                         CPU(cores)   MEMORY(bytes)
transform-67df4445c5-6qpdd   250m         495Mi
 
 apiVersion: apps/v1
kind: Deployment
metadata:
  name: transform
  namespace: default
spec:
  replicas: 1

  selector:
    matchLabels:
      name: transform
  template:
    metadata:
      labels:
        name: transform
    spec:
      containers:
        - name: transform
          image: zhaoyi0113/es-kinesis-firehose-transform
          resources:
            requests:
              cpu: 2
              memory: 8
          ports:
            - containerPort: 8080
---
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: transform
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: transform
  minReplicas: 1
  maxReplicas: 3
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 75
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 75
 

Ответ №1:

Вы упомянули ресурс без единицы измерения : https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#resource-units-in-kubernetes

 resources:
            requests:
              cpu: 2
              memory: 8
 

для памяти это может быть 8 миль, а использование-450 миль, так что это выше. Это тоже может быть причиной. Вы не упомянули ограничение для ресурса, поэтому всегда рекомендуется добавлять ограничение также в ресурс.

Таким образом, HPA может рассчитать % на основе запроса и ограничения, установленного в разделе ресурсов.

Вы также можете проверить

 kubectl get hpa
 

или

 kubectl describe hpa <name>
 

чтобы проверить % использования и сведения о событии.

вот хорошая статья с рекомендациями от Google : https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-resource-requests-and-limits