## Configuração para escalar a quantidade de Pods da aplicação automaticamente.
## Quando configuramos esse objeto, a propriedade Replicas no Deployment é ignorada.

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: example-hpa
  namespace: example-ns
  labels:
    ## Labels comuns - https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/
    app.kubernetes.io/name: example-app
    app.kubernetes.io/instance: example-app-1
    app.kubernetes.io/version: "4.0.0"
    app.kubernetes.io/component: api
    app.kubernetes.io/part-of: example-app
    app.kubernetes.io/managed-by: manual
    app.kubernetes.io/created-by: manual

spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: example-deployment

  ## Quantidade minima de Pods. Substitui o valor configurado no objeto Deployment.
  minReplicas: 1
  maxReplicas: 6
 
  metrics:
  ## Usar uma métrica customizada que a aplicação informa em um endpoint de metricas.
  ## Isso é possível usando o prometheus e o prometheus-adapter
  - type: Pods
    pods:
      metric:
        name: application_httprequests_active
      target:
        ## Se o valor médio de requisições por Pod estiver acima de 10,
        ## o AutoScaler irá aumentar a quantidade de Pods até chegar na média.
        ## Se estiver abaixo, o AutoScaler irá diminuir a quantidade de Pods.
        type: AverageValue
        averageValue: "10"
  
  ## Usar métrica da cpu para definir se o k8s deve acionar o autoscale
  ## Cpu é coletada automaticamente pelo k8s. 
  # - type: Resource
  #   resource:
  #     name: cpu
  #     target:
  #       type: Utilization
  #       averageUtilization: 50
