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.