Como configurar o escalonamento automático multidimensional de pods

O escalonamento automático de pod multidimensional evita a escolha de uma única maneira de escalonar clusters. Com o escalonamento automático de pod multidimensional, é possível usar escalonamento horizontal com base na CPU e no escalonamento vertical com base na memória ao mesmo tempo.

Um objeto MultidimPodAutoscaler modifica solicitações de memória e adiciona réplicas para que a utilização média da CPU de cada réplica corresponda ao uso de destino.

Pré-requisitos

Como usar o escalonamento automático de pod multidimensional

Neste exemplo, mostramos como criar uma implantação e um objeto MultidimPodAutoscaler para escalonar automaticamente a implantação.

Como criar uma implantação

Antes de criar um MultidimPodAutoscaler, é preciso criar a carga de trabalho que ele monitora. O arquivo a seguir, php-apache.yaml, especifica um valor para as solicitações de CPU:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  replicas: 1
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: k8s.gcr.io/hpa-example
        ports:
        - containerPort: 80
        resources:
        # Since MPA does not specify CPU requests, you must specify a request in
        # the Deployment
          limits:
            cpu: 500m
          requests:
            cpu: 200m

Para criar a implantação, aplique o manifesto php-apache.yaml:

kubectl apply -f php-apache.yaml

Como criar um MultidimPodAutoscaler

Depois de criar a implantação, é possível criar um objeto MultidimPodAutoscaler. O manifesto MultidimPodAutoscaler a seguir ajusta automaticamente o número de réplicas e solicitações de memória com base nos valores especificados.

Para mais informações sobre os campos deste exemplo, consulte a seção de referência da API.

apiVersion: autoscaling.gke.io/v1beta1
kind: MultidimPodAutoscaler
metadata:
  name: php-apache-autoscaler
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  goals:
    metrics:
    - type: Resource
      resource:
      # Define the target CPU utilization request here
        name: cpu
        target:
          type: Utilization
          averageUtilization: 60
  constraints:
    global:
      minReplicas: 1
      maxReplicas: 5
    containerControlledResources: [ memory ]
    container:
    - name: '*'
    # Define boundaries for the memory request here
      requests:
        minAllowed:
          memory: 1Gi
        maxAllowed:
          memory: 2Gi
  policy:
    updateMode: Auto

Para criar a MultidimPodAutoscaler, aplique o manifesto php-apache-autoscaler.yaml:

kubectl apply -f php-apache-autoscaler.yaml

Como visualizar um MultidimPodAutoscaler

Visualize todos os objetos MultidimPodAutoscaler usando o comando kubectl get:

kubectl get mpa

Como excluir um MultidimPodAutoscaler

Exclua um objeto MultidimPodAutoscaler usando o comando kubectl delete:

kubectl delete -f php-apache-autoscaler.yaml

Referência da API

As seções a seguir fornecem informações sobre os campos possíveis que você pode adicionar ao seu objeto MultidimPodAutoscaler.

Todos os campos são para apiVersion v1beta1 autoscaling.gke.io.

MultidimPodAutoscaler

MultidimPodAutoscaler é a configuração de um escalonador automático de pod multidimensional, que gerencia automaticamente os recursos de pod e a contagem deles com base em utilização histórica e em tempo real de recursos.

Campo Tipo Descrição
metadata ObjectMeta Metadados de objeto padrão (em inglês).
spec MultidimPodAutoscalerSpec O comportamento esperado do escalonador automático de pod multidimensional.
status MultidimPodAutoscalerStatus O status mais recentemente observado do escalonador automático de pod multidimensional.

MultidimPodAutoscalerSpec

MultidimPodAutoscalerSpec é a especificação que define o comportamento do escalonador automático.

Campo Tipo Descrição
ScaleTargetRef autoscaling.CrossVersionObjectReference Uma referência que aponta para um recurso de destino a ser escalonado (com o sub-recurso escala).
Goals *MultidimGoals Metas que o escalonador automático de pod multidimensional tenta atingir e manter.
Constraints *MultidimConstraints Descreve as restrições do escalonamento automático. As restrições superam as metas. Se as restrições bloquearem alguma meta, ela não será alcançada. Por exemplo, atingir a contagem máxima de réplicas evita escalonar verticalmente, mesmo que as réplicas precisem ser escalonadas.
Policy *MultidimPolicy Com a política, você especifica como as recomendações são aplicadas.

MultidimGoals

MultidimGoals são metas que o escalonador automático de pod multidimensional tenta alcançar.

Campo Tipo Descrição
Metrics []MetricSpec Contém a lista de métricas junto com o valor desejado. O escalonador automático de pod multidimensional tenta ficar próximo dos valores desejados.

MultidimConstraints

MultidimConstraints descreve as restrições do escalonamento automático. As restrições têm precedência sobre as metas.

Campo Tipo Descrição
Global *GlobalConstraints Restrições aplicáveis ao aplicativo escalonado automaticamente como um todo.
ContainerControlledResources []ResourceName Recursos de contêiner que precisam ser controlados pelo escalonador automático. memory é o único valor compatível.
Container []ContainerConstraints Restrições aplicáveis aos contêineres de pods.

ResourceConstraints

ResourceConstraints define a quantidade mínima e máxima de recursos que podem ser atribuídos a um contêiner, pod ou aplicativo.

Campo Tipo Descrição
MinAllowed ResourceList Quantidade mínima de recursos que podem ser atribuídos. Se não for fornecido, será usado 0.
MaxAllowed []ResourceName Quantidade máxima de recursos que podem ser atribuídos. Caso não sejam fornecidos, não há limites para a quantidade máxima de recursos.
Requests *ResourceConstraints A quantidade mínima e máxima de recursos que um aplicativo pode solicitar, somada em todos os pods.

ContainerConstraints

ContainerConstraints são restrições que se aplicam aos contêineres dos pods.

Campos Tipo Descrição
Name String Nome do contêiner para que as restrições são especificadas. Também é possível usar * para especificar restrições para todos os contêineres em um pod.
Requests *ResourceConstraints Quantidade mínima e máxima de recursos que o contêiner especificado pode solicitar.

UpdateMode

Use UpdateMode para controlar como as recomendações calculadas são aplicadas.

Campos Tipo Descrição
AutoUpdates UpdateMode = "Auto" AutoUpdates significa que todas as recomendações do escalonador automático podem ser aplicadas a qualquer momento.

MultidimPolicy

Campos Tipo Descrição
Update UpdateMode Define como as recomendações devem ser aplicadas. Falha na validação de um valor vazio.

MultidimPodAutoscalerStatus

MultidimPodAutoscalerStatus descreve o estado do ambiente de execução do escalonador automático.

Campos Tipo Descrição
RecommendedPodResources *RecommendedPodResources A quantidade de recursos calculada mais recentemente recomendada pelo escalonador automático para os pods controlados.
CurrentReplicas Int32 CurrentReplicas é o número atual de réplicas de pods gerenciados por este escalonador automático, como visto pela última vez pelo escalonador automático.
DesiredReplicas Int32 DesiredReplicas é o número pretendido de réplicas de pods gerenciados por este escalonador automático, conforme calculado pelo escalonador automático.
Conditions []metav1.Condition Conditions é o conjunto de condições necessárias para que o escalonador automático dimensione a meta e indique se essas condições são atendidas ou não.

A seguir