Entender as configurações do dimensionador

Concluído

A versão v2 da API do HPA permite que você ajuste alguns aspectos do seu comportamento utilizando uma nova chave no arquivo YAML chamada spec.behavior. Ele aceita duas outras chaves: scaleDown e scaleUp, que definem como o HPA se comporta ao reduzir verticalmente e ao escalar verticalmente.

Os seguintes valores são permitidos para cada uma das chaves:

Chave Type Descrição
stabilizationWindowSeconds INT O período durante o qual o HPA procura por métricas para calcular o estado desejado. O valor padrão para scaleDown é de cinco minutos e não há janela de estabilização para scaleUp.
selectPolicy string O tipo de política selecionado a ser usado; esse valor pode ser Min, Max ou Disabled.
políticas matriz de HPAScalingPolicy Uma matriz de políticas possíveis a serem aplicadas.

O objeto HPAScalingPolicy é definido como um objeto com as seguintes chaves:

Chave Type Descrição
type string Tipo de política; pode ser Percent ou Pods.
valor INT Valor da política.
periodSeconds INT Quantidade de tempo necessária para que esta política possa ser aplicada novamente.

As políticas de colocação em escala permitem que você ajuste a forma como o dimensionamento funciona. Por exemplo, você pode desabilitar completamente a operação de redução vertical definindo uma política scaleDown como Disabled, conforme mostrado no exemplo a seguir:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: contoso-website
  namespace: hpa-contoso
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: contoso-website
  minReplicas: 1
  maxReplicas: 10
  behavior:
    scaleDown:
      selectPolicy: Disabled
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 20
    - type: Resource
      resource:
        name: memory
        target:
          type: Utilization
          averageUtilization: 50

Você também pode definir o número de réplicas para escalar horizontalmente de cada vez definindo uma política scaleUp, desta forma:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: contoso-website
  namespace: hpa-contoso
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: contoso-website
  minReplicas: 1
  maxReplicas: 10
  behavior:
    scaleUp:
      selectPolicy: Max
      stabilizationWindowSeconds: 120
      policies:
        - type: Percent
          value: 30
          periodSeconds: 60
        - type: Pods
          value: 7
          periodSeconds: 90
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 20
    - type: Resource
      resource:
        name: memory
        target:
          type: Utilization
          averageUtilization: 50

Nesse manifesto, você está dizendo ao HPA para procurar os últimos 120 segundos de métricas para calcular o estado desejado e obter o maior desses valores. Depois disso, ele calcula 30% dos pods existentes, arredonda esse número para cima e o compara com o valor fixo de sete pods. Como selectPolicy está definido como Max, ele pega o maior número desses dois números e aplica essa política, depois espera periodSeconds antes de aplicar qualquer política novamente.

Por exemplo, digamos que o site esteja sendo executado com 18 pods e, em seguida, ele sofra um pico que dura cerca de 120 segundos. O estado desejado é computado calculando 30% dos pods em execução atuais, que é 5,4 (arredondado para 6). Esse valor é comparado ao número de pods na segunda política, que é 7. Como a chave selectPolicy está definida como Max, ele usa o maior valor desses dois valores. Em seguida, o HPA aumenta a escala em 7 e aguarda 90 segundos antes de escalar verticalmente novamente. Se o pico continuar até 25 pods, o cálculo será feito novamente. 30% de 25 pods é 7,5 (arredondado para 8), que é maior que 7. Agora, o HPA cria oito novos pods e aguarda 60 segundos antes de escalar verticalmente novamente.

Verificar seu conhecimento

1.

O que é a janela de estabilização?

2.

Quais são os três valores para selectPolicies?

3.

Quando você deve definir o comportamento para seu HPA?