Configure o CronHPA para ajustar os valores de minReplicas e maxReplicas do HPA em vez de dimensionar o Deployment diretamente.
Se você implantar o HPA e o CronHPA pelo ACK console , o ACK os configurará automaticamente. Nesse caso, ignore este tópico.
Como funciona
Por padrão, tanto o CronHPA quanto o HPA definem o scaleTargetRef como o mesmo Deployment. O componente que agir por último sobrescreverá o resultado do outro.
Para corrigir isso, defina o scaleTargetRef do CronHPA como o recurso do HPA, e não como o Deployment. Com essa configuração:
O CronHPA lê os valores de
minReplicas,maxReplicasedesiredReplicasdo HPA antes de executar qualquer ação.O CronHPA ajusta o
minReplicasou omaxReplicasdo HPA com base notargetSizeagendado.O HPA dimensiona os pods por meio do Deployment e de seu ReplicaSet.
Como o CronHPA nunca altera a contagem de pods diretamente, os conflitos são eliminados.
Configurar o CronHPA para ter o HPA como alvo
Em uma configuração típica, o CronHPA e o HPA apontam para o mesmo Deployment:
Modelo de exemplo do CronHPA (antes da modificação)
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: cronhpa-sample
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment-basic
jobs:
- name: "scale-down"
schedule: "30 */1 * * * *"
targetSize: 1
- name: "scale-up"
schedule: "0 */1 * * * *"
targetSize: 11
Modelo de exemplo do HPA
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: hpa-sample
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment-basic
minReplicas: 4
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
Para resolver o conflito, altere o campo scaleTargetRef no manifesto do CronHPA para apontar para o recurso do HPA:
|
Campo |
Antes |
Depois |
|
|
|
|
|
|
|
|
|
|
|
|
Exemplo: CronHPA configurado para dimensionar o tráfego em horário comercial
Suponha que o hpa-sample gerencie o tráfego das 09:00 às 17:00 (UTC+8). Configure o CronHPA para escalar horizontalmente para fora (scale out) às 09:00 e para dentro (scale in) às 17:00:
apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: CronHorizontalPodAutoscaler
metadata:
labels:
controller-tools.k8s.io: "1.0"
name: cronhpa-sample
spec:
scaleTargetRef:
apiVersion: autoscaling/v2
# Set the resource type to HPA.
kind: HorizontalPodAutoscaler
# Specify the name of the HPA resource.
name: hpa-sample
jobs:
- name: "scale-up-9am"
schedule: "0 0 9 * * * "
targetSize: 20
runOnce: false
- name: "scale-down-5pm"
schedule: "0 0 17 * * *"
targetSize: 3
runOnce: false
Regras de compatibilidade
Quando o CronHPA tem o HPA como alvo, ele atua como um limite mínimo dinâmico para réplicas: aumenta o minReplicas para escalar para fora e reduz o minReplicas para escalar para dentro, sem definir a contagem de pods diretamente. O HPA dimensiona dentro desses limites com base nas métricas.
A tabela a seguir mostra como o CronHPA e o HPA interagem em cada condição de dimensionamento.
Cabeçalhos da tabela:
HPA (min/max):
minReplicas/maxReplicasdo HPA.Desejado pelo CronHPA:
targetSizedo job do CronHPA.Réplicas atuais: Contagem de pods em execução.
Réplicas finais: Contagem de pods após o dimensionamento.
|
HPA (min/max) |
Desejado pelo CronHPA |
Réplicas atuais |
Réplicas finais |
Comportamento |
|
1/10 |
5 |
5 |
5 |
O valor desejado é igual ao atual. Os campos |
|
1/10 |
4 |
5 |
5 |
O valor desejado é menor que o atual. Nenhum dimensionamento ocorre. |
|
1/10 |
6 |
5 |
6 |
O valor desejado excede o atual. O CronHPA define o |
|
5/10 |
4 |
5 |
5 |
O valor desejado é menor que o atual. Não há dimensionamento imediato. O CronHPA define o |
|
5/10 |
11 |
5 |
11 |
O valor desejado excede o |