Entender as configurações do dimensionador
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.