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.