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
- cluster do GKE versão 1.19.4-gke.1700 ou posterior
 - Para clusters padrão, ative o escalonamento automático vertical de pods no cluster. O escalonamento automático vertical de pods já está ativado nos clusters do Autopilot.
 
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: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        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. | 
Pod | 
*PodConstraints | 
Restrições que se aplicam a um único pod do aplicativo de destino. | 
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 | 
ResourceList | 
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. | 
GlobalConstraints
GlobalConstraints definem as restrições que se aplicam ao aplicativo. Essas restrições incluem o número de réplicas ou a quantidade total de recursos.
| Campo | Tipo | Descrição | 
|---|---|---|
MinReplicas | 
*Int32 | 
Quantidade mínima de réplicas que o aplicativo pode ter. Se não for fornecido, será usado 1. | 
MaxReplicas | 
*Int32 | 
Quantidade máxima de réplicas que o aplicativo pode ter. Se não for fornecido, não há limites para a quantidade máxima de réplica. | 
Requests | 
*ResourceConstraints | 
A quantidade mínima e máxima de recursos que um aplicativo pode solicitar, somada em todos os pods. | 
PodConstraints
PodConstraints define os valores mínimo e máximo dos recursos que um
pod pode solicitar, somados em todos os contêineres que pertencem ao pod.
| Campo | Tipo | Descrição | 
|---|---|---|
Requests | 
*ResourceConstraints | 
Quantidade mínima e máxima de recursos que um pod pode solicitar, somados em todos os contêineres que pertencem ao pod. | 
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. | 
AutoUpdates | 
UpdateMode = "Off" | 
AutoUpdates significa que as recomendações do escalonador automático não são aplicadas. | 
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 | 
|---|---|---|
ObservedGeneration | 
*Int64 | 
A geração mais recente observada por este escalonador automático. | 
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. | 
CurrentMetrics | 
[]autoscaling.MetricStatus | 
O último estado lido das métricas usadas 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
- Saiba mais sobre como configurar o Escalonamento automático horizontal de pods.
 - Saiba mais sobre como configurar o escalonamento automático vertical de pods.