É possível criar suas próprias ComputeClasses para controlar as propriedades dos nós provisionados pelo Google Kubernetes Engine (GKE) ao fazer o escalonamento automático do cluster. Este documento é destinado a administradores de plataforma que querem definir de forma declarativa perfis de escalonamento automático para nós, para que cargas de trabalho específicas sejam executadas em hardware que atenda aos requisitos. Para mais informações sobre o que são ComputeClasses, consulte Sobre as ComputeClasses do GKE.
Visão geral do ComputeClasses
No GKE, uma ComputeClass é um perfil que consiste em um conjunto de atributos de nó que o GKE usa para provisionar os nós que executam suas cargas de trabalho durante eventos de escalonamento automático. As ComputeClasses podem ter otimizações específicas, como provisionar nós de alto desempenho ou priorizar configurações otimizadas para custos mais baixos. Com as ComputeClasses personalizadas, é possível definir perfis que o GKE usa para escalonar automaticamente nós e atender aos requisitos de cargas de trabalho específicas.
As ComputeClasses personalizadas estão disponíveis para uso no modo Autopilot e GKE Standard na versão 1.30.3-gke.1451000 e mais recentes e oferecem uma abordagem declarativa para definir atributos de nó e prioridades de escalonamento automático. Há ComputeClasses personalizadas disponíveis para configurar e usar em todos os clusters do GKE qualificados por padrão.
Benefícios das ComputeClasses personalizadas
As classes de computação personalizadas oferecem os seguintes benefícios:
- Prioridades de computação substitutas: defina uma hierarquia de configurações de nós em cada ComputeClass para o GKE priorizar. Se a maior não estiver disponível, o GKE automaticamente escolhe a próxima configuração na hierarquia. Esse modelo substituto garante que, mesmo quando os recursos de computação estiverem indisponíveis, as cargas de trabalho ainda serão executadas em hardware otimizado com atrasos mínimos na programação.
- Controle granular de escalonamento automático: defina as configurações de nó mais adequadas para cargas de trabalho específicas. O GKE prioriza esses durante a criação de nós durante o escalonamento.
- Configuração declarativa de infraestrutura: adote uma abordagem declarativa para o gerenciamento de infraestrutura para que o GKE crie automaticamente nós que correspondam aos requisitos específicos da carga de trabalho.
- Migração ativa: se recursos de computação para uma máquina de sua preferência disponível no seu local, o GKE migra automaticamente as cargas de trabalho para novos nós que usam a configuração do Terraform.
- Otimização de custos: priorize tipos de nós econômicos, como VMs do Spot, para reduzir as despesas do cluster.
- ComputeClasses personalizados padrão: defina um ComputeClass personalizado como o padrão para um cluster inteiro ou para namespaces específicos do Kubernetes, para que as cargas de trabalho sejam executadas em hardware otimizado, mesmo que não solicitem um ComputeClass específico.
- Limites personalizados de consolidação de nós: definir o uso de recursos personalizados limites mínimos para nós. Se o uso de recursos de um nó específico ficar abaixo do limite, o GKE vai tentar consolidar as cargas de trabalho em um nó semelhante e disponível e reduzir o nó subutilizado.
Casos de uso de ComputeClasses personalizadas
Considere usar classes de computação personalizadas em cenários como os seguintes:
- Você quer executar cargas de trabalho de IA/ML em configurações específicas de GPU ou TPU.
- Você quer definir configurações de hardware padrão para as cargas de trabalho por equipes específicas, eliminando a sobrecarga dos operadores de aplicativos.
- Você executa cargas de trabalho que têm um desempenho ideal em determinados ou configurações de hardware.
- Você quer declarar configurações de hardware que atendem a requisitos específicos como alto desempenho, custo otimizado ou alta disponibilidade.
- Você quer que o GKE use hierarquicamente configurações de hardware específicas durante a indisponibilidade de recursos de computação, para que as cargas de trabalho sejam executadas sempre em máquinas que atendam aos requisitos.
- Você quer decidir centralmente as configurações ideais em toda a frota da empresa para que seus custos sejam mais previsíveis e as cargas de trabalho sejam executadas com mais confiabilidade.
- Você quer especificar centralmente quais das suas reservas de capacidade do Compute Engine o GKE deve usar para provisionar novos nós para cargas de trabalho específicas.
- Você quer especificar uma política de posicionamento compacto para usar com o Autopilot do GKE. Para mais detalhes, consulte posicionamento compacto.
Como as classes de computação personalizadas funcionam
As ComputeClasses personalizadas são recursos personalizados do Kubernetes que provisionam
infraestrutura doGoogle Cloud . Você define um objeto ComputeClass
no
cluster e solicita essa ComputeClass em cargas de trabalho ou a define como padrão para um namespace do Kubernetes. Quando uma carga de trabalho correspondente
exige uma nova infraestrutura, o GKE provisiona novos nós de acordo com
as prioridades definidas na definição de ComputeClass.
Os atributos definidos nas ComputeClasses definem como o GKE configura novos nós para executar cargas de trabalho. Quando você modifica uma ComputeClass, todos os nós futuros que o GKE criar para essa ComputeClass usam a configuração modificada. O GKE não muda retroativamente a configuração dos nós atuais para corresponder às suas modificações.
As ComputeClasses personalizadas influenciam as decisões de escalonamento automático, mas não são consideradas pelo kube-scheduler. Durante o agendamento de pods, o programador pode não priorizar nós com prioridades mais altas de ComputeClass personalizadas, mesmo quando nós atuais estão disponíveis em várias prioridades.
Para garantir que suas ComputeClasses personalizadas sejam otimizadas para a frota, considere estas diretrizes:
- Entenda os requisitos de computação da sua frota, incluindo requisitos de hardware específicos do aplicativo.
- Escolha um tema que oriente o design de cada ComputeClass. Por exemplo, uma ComputeClass otimizada para performance pode ter uma estratégia alternativa que usa apenas tipos de máquina de alta CPU.
- Escolha a família e a série de máquinas do Compute Engine que se adequam mais às suas cargas de trabalho. Para mais detalhes, consulte Guia de comparação e recursos de famílias de máquinas.
- Planeje uma estratégia de fallback em cada ComputeClass para que as cargas de trabalho sempre sejam executadas em nós que usam configurações de máquina semelhantes. Por exemplo, se a série de máquinas N4 não estiver disponível, você poderá usar máquinas C3.
Confira a definição completa do recurso personalizado
Para conferir a definição de recurso personalizado (CRD) mais recente do recurso personalizado ComputeClass
, incluindo todos os campos e as relações deles, consulte a documentação de referência do ComputeClass.
Também é possível conferir o CRD no cluster executando o seguinte comando:
kubectl describe crd computeclasses.cloud.google.com
Planejar uma ComputeClass personalizada
Para planejar, implantar e usar uma ComputeClass personalizada no cluster, siga estas etapas:
- Escolha suas prioridades de computação substitutas: defina uma série de regras que controlam as propriedades dos nós que o GKE cria para a ComputeClass.
- Configure pools de nós do GKE Standard e ComputeClasses: para clusters no modo padrão, realize as etapas de configuração necessárias para usar a ComputeClass com seus pools de nós.
- Definir o comportamento de escalonamento quando nenhuma regra de prioridade for aplicada: Como opção, informe ao GKE o que fazer se os nós atenderem às suas regras de prioridade não podem ser provisionados.
- Definir parâmetros de escalonamento automático para consolidação de nós: informar ao GKE quando consolidar as cargas de trabalho e remover nós.
- Configure a migração ativa para nós de prioridade mais alta: como opção, diga ao GKE para mover cargas de trabalho quando o hardware fica disponível.
- Consumir reservas do Compute Engine: opcionalmente, diga ao GKE para consumir as reservas zonais do Compute Engine ao criar novos nós.
Escolher as prioridades de computação substitutas
A principal vantagem de usar uma ComputeClass personalizada é ter controle sobre a estratégia de substituto quando os nós preferidos estiverem indisponíveis devido a fatores como esgotamento de recursos e limitações de cota.
Para criar uma estratégia substituta, defina uma lista de regras de prioridade na sua ComputeClass personalizada. Quando é preciso escalonar verticalmente um cluster, o GKE prioriza a criação de nós que correspondam à primeira regra de prioridade. Se o GKE não conseguir criar esses nós, ele vai usar a próxima regra de prioridade, repetindo esse processo até que o GKE dimensione o cluster ou esgote todas as regras. Se todas as regras forem esgotadas, o GKE vai criar nós com base no comportamento padrão ou especificado descrito em Definir o comportamento de escalonamento quando nenhuma regra de prioridade for aplicada.
Diferentes séries de máquinas do Compute Engine oferecem suporte a tecnologias e recursos diferentes. As gerações anteriores de uma série de máquinas podem não ser compatíveis com os mesmos tipos de armazenamento que as gerações mais recentes. Se você executar cargas de trabalho com estado que dependem de dados permanentes, evite usar uma ComputeClass que abranja várias gerações de uma série de máquinas. As cargas de trabalho talvez não consigam acessar os dados permanentes se o GKE as colocar em um tipo de máquina que não seja compatível com esse tipo de armazenamento. Para mais detalhes, filtre a tabela de comparação de séries de máquinas para tipos de armazenamento específicos.
Regras de prioridade
Você define regras de prioridade no campo spec.priorities
da ComputeClass
recurso personalizado. Cada regra no campo priorities
descreve as propriedades dos
nós a provisionar. O GKE processa o campo priorities
na
ordem, o que significa que o primeiro item no campo é a prioridade mais alta para
o provisionamento de nós.
Há dois tipos de regras de prioridade:
Tipos de regras declarativas: use características de nós para descrever os nós que você quer provisionar.
Tipo de regra do pool de nós: nos clusters do GKE Standard, fornece uma lista de pools de nós criados manualmente que estão associados à ComputeClass em que o GKE precisa provisionar nós.
Regras de prioridade declarativas
Com regras de prioridade declarativas, é possível especificar propriedades da máquina, como família ou tipo de máquina, VMs spot, opções de acelerador, opções de armazenamento, reservas e requisitos mínimos de recursos, para que o GKE use ao provisionar nós. Para conferir o conjunto completo de campos aceitos, consulte a referência do CRD ComputeClass.
Configurações de machineFamily
O campo machineFamily
aceita uma
da série de máquinas do Compute Engine, como
n4
ou c4
. Se não for especificado, o padrão será e2
.
É possível usar outros campos de spec.priorities
junto com o campo machineFamily
para definir de forma declarativa os requisitos de computação. Por exemplo:
spot
: VMs spot. O valor padrão éfalse
.minCores
: mínimo de vCPUs por nó. O valor padrão é0
.minMemoryGb
: memória mínima por nó. O valor padrão é0
.storage.bootDiskKMSKey
: caminho para a chave do Cloud Key Management Service a ser usada no disco de inicialização criptografia.storage.secondaryBootDisks
: discos permanentes usados para pré-carregar nós do GKE com dados, como um modelo de aprendizado de máquina (ML) ou uma imagem de contêiner. Requer a versão 1.31.2-gke.1105000 ou mais recente do GKE. Para configurar um disco de inicialização secundário para o cluster usar, consulte Configurar discos de inicialização secundários.storage.secondaryBootDisks.diskImageName
: o nome da imagem de disco a ser pré-carregada.storage.secondaryBootDisks.project
: o nome do projeto que contém a imagem do disco. Se esse valor não for especificado, o padrão será o projeto do cluster.storage.secondaryBootDisks.mode
: o modo em que o disco de inicialização secundário será usado. Se esse valor for definido comoCONTAINER_IMAGE_CACHE
, o disco de inicialização secundário será usado como um cache de imagem de contêiner. O valor precisa ser igual aCONTAINER_IMAGE_CACHE
ouMODE_UNSPECIFIED
. Se esse valor não for especificado, o padrão seráMODE_UNSPECIFIED
.
placement
: os detalhes do posicionamento da máquina:policyName
: o nome de uma política de posicionamento compacto do GKE Autopilot ou de uma política de carga de trabalho.
O exemplo a seguir mostra uma regra de prioridade que usa machineFamily
:
priorities:
- machineFamily: n4
spot: true
minCores: 16
minMemoryGb: 64
storage:
bootDiskKMSKey: projects/example/locations/us-central1/keyRings/example/cryptoKeys/key-1
secondaryBootDisks:
- diskImageName: pytorch-mnist
project: k8s-staging-jobset
Configurações de machineType
O campo machineType
aceita um tipo de máquina predefinido do Compute Engine, como n4-standard-32
, ou uma string de tipo de máquina personalizada, como n4-custom-8-20480
. O uso de tipos de máquina personalizados requer o GKE versão 1.33.2-gke.1111000 ou mais recente.
É possível especificar outros campos spec.priorities
junto com o campo machineType
para definir de forma declarativa os requisitos de computação. Por exemplo:
spot
: usar VMs do Spot O padrão éfalse
.storage
: configurar o armazenamento do nó.storage.bootDiskType
: tipo de disco de inicialização. No Autopilot, apenas o tipopd-balanced
debootDiskType
é compatível.storage.bootDiskKMSKey
: caminho para a chave do Cloud KMS a ser usada para o disco de inicialização criptografia.storage.bootDiskSize
: tamanho do disco de inicialização de nós em GB.storage.localSSDCount
: número de SSDs locais a serem anexados ao nó. Se especificado, precisa ser pelo menos1
.
O exemplo a seguir mostra uma regra de prioridade que usa machineType
para provisionar tipos de máquina n4-standard-32
:
priorities:
- machineType: n4-standard-32
spot: true
storage:
bootDiskType: pd-balanced
bootDiskSize: 250
localSSDCount: 2
bootDiskKMSKey: projects/example/locations/us-central1/keyRings/example/cryptoKeys/key-1
Configuração da GPU
Para selecionar GPUs nas suas regras de prioridade, especifique o tipo, a contagem e
driverVersion (opcional) da GPU no campo gpu
de uma regra de prioridade.
Os seguintes campos são compatíveis:
gpu.type
: um tipo de GPU, comonvidia-l4
. Para mais detalhes, consulte Escolher o suporte a GPUs usando o Autopilot ou Standard.gpu.count
: o número de GPUs a serem anexadas. Para quantidades suportadas por Tipo de GPU, consulte Quantidades de GPU compatíveis.gpu.driverVersion
: a versão do driver NVIDIA a ser instalada. Precisa serdefault
oulatest
. Requer o GKE versão 1.31.1-gke.1858000 ou posterior.
Também é possível especificar outros spec.priorities
campos, como VMs spot, opções de armazenamento e reservas em combinação com os campos gpu
.
O exemplo a seguir mostra uma regra para GPUs:
priorities:
- gpu:
type: nvidia-l4
count: 1
storage:
secondaryBootDisks:
- diskImageName: big-llm
project: k8s-llm
spot: true
Configuração de TPU
Requer GKE versão 1.31.2-gke.1518000 ou mais recente
Para selecionar TPUs nas regras de prioridade, especifique o tipo, a contagem e a topologia
da TPU no campo tpu
de uma regra de prioridade. Os seguintes campos são obrigatórios:
tpu.type
: o tipo de TPU, comotpu-v5p-slice
. Para mais detalhes, consulte Disponibilidade da TPU no Autopilot do GKE.tpu.count
: o número de TPUs a serem anexadas.tpu.topology
: a topologia de TPU a ser usada, como"2x2x1"
. Para mais detalhes, consulte Escolher uma topologia para o Autopilot.
Você também pode especificar outros campos spec.priorities
junto com o campo tpu
na sua regra de prioridade, por exemplo:
spot
: usar VMs do Spot O padrão éfalse
.storage
: configurar o armazenamento do nó.storage.bootDiskType
: tipo de disco de inicialização.storage.bootDiskKMSKey
: caminho para a chave do Cloud KMS a ser usada para a criptografia do disco de inicialização.storage.bootDiskSize
: tamanho do disco de inicialização de nós em GB.
reservations
: use uma reserva do Compute Engine. Para mais detalhes, consulte a seção Consumir reservas do Compute Engine.
O exemplo a seguir mostra uma regra para TPUs:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: tpu-class
spec:
priorities:
- tpu:
type: tpu-v5p-slice
count: 4
topology: 4x4x4
reservations:
specific:
- name: tpu-reservation
project: reservation-project
affinity: Specific
- spot: true
tpu:
type: tpu-v5p-slice
count: 4
topology: 4x4x4
nodePoolAutoCreation:
enabled: true
Este exemplo define o seguinte comportamento de substituição:
- O GKE tenta provisionar uma fatia de TPU v5p de vários hosts de 16 nós consumindo uma reserva compartilhada do Compute Engine chamada
tpu-reservation
do projetoreservation-project
. - Se a reserva não tiver TPUs disponíveis, o GKE tentará provisionar uma fração de TPU v5p de vários hosts com 16 nós executada em VMs do Spot.
- Se nenhuma das regras anteriores puder ser atendida, o GKE vai seguir a lógica na seção Definir o comportamento de escalonamento quando nenhuma regra de prioridade se aplicar.
Depois de implantar uma ComputeClass personalizada de TPU no cluster, selecione essa ComputeClass personalizada na carga de trabalho:
- Cargas de trabalho do Autopilot: consulte a seção "Provisionar TPUs usando ComputeClasses personalizadas" em Implantar cargas de trabalho de TPU no Autopilot do GKE.
- Cargas de trabalho padrão: consulte a seção "Provisionar TPUs usando ComputeClasses personalizadas" em Implantar cargas de trabalho de TPU no GKE Standard.
Além disso, para cargas de trabalho de TPU, é possível fazer o seguinte:
Especificações de aceleradores e formatos de máquina
As configurações declarativas de acelerador não exigem que o campo machineType
ou machineFamily
seja especificado explicitamente, a menos que você os use em combinação com reservas.
Regras de prioridade do pool de nós
O campo nodepools
usa uma lista de pools de nós atuais em que
O GKE tenta criar pods pendentes. O GKE não
processa os valores neste campo em ordem. Não é possível usar outros campos de
spec.priorities
com o campo nodepools
no mesmo item de regra de
prioridade porque as regras com o campo nodepools
não são declarativas.
Esse campo é compatível apenas com o modo GKE Standard. Para
detalhes de uso, consulte
Segmentar pools de nós específicos em uma definição de ComputeClass.
Como o GKE cria nós usando regras de prioridade
Quando você implanta uma carga de trabalho que solicita uma ComputeClass e um novo nó é
necessário, o GKE processa a lista de regras no campo priorities
da especificação ComputeClass
em ordem.
Por exemplo, considere a seguinte especificação:
spec:
...
priorities:
- machineFamily: n4
spot: true
minCores: 64
- machineFamily: n4
spot: true
- machineFamily: n4
spot: false
Quando você implanta uma carga de trabalho que solicita uma ComputeClass com essas regras de prioridade, o GKE faz a correspondência de nós da seguinte maneira:
- O GKE coloca os pods nos nós atuais associados com essa ComputeClass.
- Se os nós atuais não puderem acomodar os pods, o GKE provisiona que usam a série de máquinas N4, são VMs spot e pelo menos 64 vCPUs.
- Se as VMs spot N4 com pelo menos 64 vCPUs não estiverem disponíveis região, o GKE provisiona novos nós que usam N4 VMs spot que podem se encaixar nos pods, independente do número de núcleos
- Se não houver VMs N4 do Spot disponíveis na região, o GKE provisionará novas VMs N4 sob demanda.
- Se nenhuma das regras anteriores puder ser atendida, o GKE vai seguir a lógica na seção Definir o comportamento de escalonamento quando nenhuma regra de prioridade se aplicar.
Valores padrão para regras de prioridade
É possível definir valores padrão para alguns dos campos nas regras de prioridade da especificação
ComputeClass. Esses valores padrão são aplicados se os campos correspondentes em uma regra específica forem omitidos. É possível definir esses valores padrão usando
o campo priorityDefaults
na especificação ComputeClass.
O campo priorityDefaults
tem as seguintes limitações:
- exige a versão 1.32.1-gke.1729000 ou mais recente do GKE;
- Não é compatível com a regra de prioridade
nodepools
, que não contém campos.
Para detalhes sobre os tipos de valores padrão que podem ser definidos, consulte a seção
priorityDefaults
na
CustomResourceDefinition ComputeClass.
Pools de nós do GKE Standard e ComputeClasses
Se você usa o modo GKE Standard, talvez tenha que realizar configuração manual para garantir que seus pods ComputeClass sejam programados o esperado.
- Pools de nós criados automaticamente: não é necessária nenhuma configuração manual. O GKE executa automaticamente as etapas de configuração da ComputeClass. Para mais detalhes, consulte Criação automática de pool de nós e ComputeClasses.
- Pools de nós criados manualmente: a configuração manual é obrigatória. É necessário adicionar rótulos e taints de nó aos pools de nós criados manualmente para associar os nós a uma ComputeClass específica. Para mais detalhes, consulte Configurar pools de nós criados manualmente para uso da ComputeClass.
Configurar pools de nós criados manualmente para uso da ComputeClass
Se os clusters do GKE Standard tiverem pools de nós que você criados manualmente, eles precisam ser configurados para associá-los a ComputeClasses específicos. O GKE só programa pods que solicitam uma ComputeClass específica em nós em pools de nós que você associa a essa ComputeClass. Esse requisito não se aplica a uma ComputeClass que você configura como o padrão no nível do cluster.
O modo Autopilot do GKE e os pools de nós criados automaticamente no modo GKE Standard fazem essa configuração para você.
Para associar um pool de nós criado manualmente a uma ComputeClass, adicione rótulos de nó e taints de nó ao pool de nós durante a criação ou uma atualização, especificando as flags --node-labels
e --node-taints
, conforme mostrado abaixo:
- Rótulo do nó:
cloud.google.com/compute-class=COMPUTE_CLASS
- Taint:
cloud.google.com/compute-class=COMPUTE_CLASS:NoSchedule
Nesses atributos, COMPUTE_CLASS
é o nome da sua
ComputeClass personalizada.
Por exemplo, os comandos a seguir atualizam um pool de nós e
o associam à ComputeClass dev-class
:
gcloud container node-pools update dev-pool \
--cluster=example-cluster \
--node-labels="cloud.google.com/compute-class=dev-class"
gcloud container node-pools update dev-pool \
--cluster=example-cluster \
--node-taints="cloud.google.com/compute-class=dev-class:NoSchedule"
É possível associar cada pool de nós no cluster a uma ComputeClass personalizada. Pods que o GKE programa apenas nesses pools de nós criados manualmente acionar a criação de nós dentro desses pools de nós durante eventos de escalonamento automático.
Criação automática de pool de nós e ComputeClasses
É possível usar a criação automática de pool de nós com uma ComputeClass personalizada para permitir que o GKE crie e exclua pools de nós automaticamente com base nas regras de prioridade.
Para permitir que o GKE crie automaticamente pools de nós para uma ComputeClass, faça o seguinte:
- Adicione o campo
nodePoolAutoCreation
com o valorenabled: true
à sua especificaçãoComputeClass
. - A menos que seu cluster esteja inscrito no canal Rápido e executando a versão 1.33.3-gke.1136000 ou mais recente do GKE, você também precisa ativar o provisionamento automático de nós no nível do cluster.
O GKE pode criar pools de nós para pods que usam sua ComputeClass. O GKE decide escalonar verticalmente um pool de nós atual ou criar um novo com base em fatores como o tamanho dos clusters e requisitos dos pods. Pods com ComputeClasses que não configuram a criação automática de pool de nós continuam a escalonar verticalmente apenas os pools de nós existentes.
É possível usar ComputeClasses que ativam a criação automática de pool de nós com ComputeClasses que interagem com pools de nós criados manualmente no mesmo cluster.
Considere as seguintes interações com a criação automática de pool de nós:
- Não é possível usar os seletores de nó da família de máquinas ou das VMs spot, porque eles entram em conflito com o comportamento da ComputeClass. O GKE rejeita pods que solicitam uma ComputeClass e também VMs do Spot ou séries de máquinas específicas.
Se você definir uma ComputeClass padrão para seu cluster, os pods que usam um seletor de nós de família de máquinas só vão acionar a criação de nós para essa classe padrão em uma das seguintes situações:
- Os pods selecionam uma família de máquinas que corresponde a uma das regras de prioridade na classe padrão no nível do cluster. Por exemplo, um pod que seleciona instâncias N4 aciona a criação de nós se a classe padrão no nível do cluster tiver uma regra de prioridade para instâncias N4.
- A ComputeClass padrão no nível do cluster tem o valor
ScaleUpAnyway
no campospec.whenUnsatisfiable
. Mesmo que os pods selecionem uma família de máquinas que não esteja nas prioridades da ComputeClass, o GKE criará novos nós com essa família.
Os pods que selecionam uma família de máquinas que não está nas prioridades de classe padrão no nível do cluster não acionam a criação de nós se o ComputeClass tiver um valor de
DoNotScaleUp
no campowhenUnsatisfiable
.É possível configurar a criação automática de pool de nós para ComputeClasses que usam o campo
nodepools
para fazer referência a pools de nós atuais. O GKE processa as prioridades em ordem e tenta escalonar os pools de nós existentes para colocar seus pods.
Considere o exemplo a seguir de um cluster com pools de nós criados manualmente e criação automática de pool de nós:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: my-class
spec:
priorities:
- nodepools: [manually-created-pool]
- machineFamily: n4
- machineFamily: c4
nodePoolAutoCreation:
enabled: true
Neste exemplo, o GKE tenta fazer o seguinte:
- Crie novos nós no pool de nós
manually-created-pool
. - Provisionar nós N4, seja em pools de nós N4 existentes ou criando um novo no pool de nós.
- Se o GKE não puder criar nós N4, ele tentará escalonar verticalmente pools de nós C4 existentes ou criar novos pools de nós C4.
Segmentar pools de nós específicos em uma definição de ComputeClass
O campo priorities.nodepools
permite especificar uma lista de objetos
pools de nós em que o GKE tenta programar pods
em clusters do GKE Standard que usam clusters
escalonamento automático. Este campo só aceita uma lista de pools de nós. não é possível especificar
propriedades de máquina adicionais, como a série de máquinas, na mesma regra de prioridade.
Quando você implanta uma carga de trabalho que solicita uma ComputeClass com pools de nós nomeados, o GKE tenta programar os pods pendentes nesses pools de nós. O GKE pode criar novos nós nesses pools para colocar
os pods.
Os pools de nós especificados no campo priorities.nodepools
precisam ser
associados a essa ComputeClass usando rótulos e taints de nó, conforme
descritas na
Seção Configurar pools de nós criados manualmente para ComputeClasses.
A lista de pools de nós especificada no campo nodepools
não tem
prioridade. Para configurar uma ordem de fallback para pools de nós nomeados, especifique
vários itens priorities.nodepools
separados. Por exemplo, considere o
seguinte especificação:
spec:
...
priorities:
- nodepools: [pool1, pool2]
- nodepools: [pool3]
Neste exemplo, o GKE primeiro tenta colocar pods pendentes que
solicitam essa ComputeClass em nós existentes em pools de nós rotulados
com a ComputeClass. Se os nós atuais não estiverem disponíveis, o GKE
tentará provisionar novos nós em pool1
ou pool2
. Se o GKE não conseguir
provisionar novos nós nesses pools, ele tentará
provisionar novos pods em pool3
.
Definir o comportamento de escalonamento quando nenhuma regra de prioridade se aplica
O recurso personalizado ComputeClass
permite especificar o que o GKE
deve fazer se não houver nós que possam atender a qualquer uma das regras de prioridade. O campo
whenUnsatisfiable
na especificação aceita os seguintes valores.
ScaleUpAnyway
: cria um novo nó que usa a configuração de máquina padrão do cluster. Nas versões do GKE anteriores à 1.33, esse é o comportamento padrão se você omitir esse campo.O GKE realiza uma das seguintes ações:
- Nos clusters do Autopilot, o GKE coloca o pod em um nó novo ou atual, independentemente da configuração da máquina do nó.
- Nos clusters padrão que não usam a criação automática de pools de nós, O GKE tenta escalonar verticalmente qualquer pool de nós criado manualmente que define um rótulo e um taint correspondentes a uma determinada ComputeClass.
- Nos clusters padrão que usam a criação automática de pools de nós, O GKE pode criar um novo pool de nós que use o padrão E2 série de máquinas para colocar o pod.
DoNotScaleUp
: deixa o pod no statusPending
até que um nó que atenda aos requisitos da ComputeClass esteja disponível. No GKE versão 1.33 e mais recentes, esse é o comportamento padrão se você omitir esse campo.
Solicitar uma política de posicionamento
A partir da versão 1.33.2-gke.1335000 do GKE, em clusters do GKE Autopilot, é possível usar o posicionamento compacto com uma política de posicionamento ou de carga de trabalho personalizada. Para mais informações, consulte Comparação entre a política de posicionamento compacto e a política de carga de trabalho.
As políticas de posicionamento e de carga de trabalho colocam os nós fisicamente próximos uns dos outros
para reduzir a latência da rede. Para usar uma política específica, informe o nome dela em um
campo policyName
. A política precisa ser uma política de recursos do Compute Engine que já existe no projeto do GKE.
Veja o exemplo a seguir.
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: my-class
spec:
priorities:
- machineFamily: n4
placement:
policyName: my-placement-policy
nodePoolAutoCreation:
enabled: true
Nessa configuração, o GKE aplica a política de posicionamento compacto
a todas as cargas de trabalho que usam essa ComputeClass e provisiona os nós
de acordo com a política de recursos atual chamada my-placement-policy
.
Definir parâmetros de escalonamento automático para consolidação de nós
Por padrão, o GKE remove nós subutilizados executando cargas de trabalho, consolidando essas cargas em outros nós que têm capacidade. Para todas as ComputeClasses, esse é o comportamento padrão, porque todos os clusters que usam ComputeClasses precisam usar o escalonador automático de clusters ou são clusters do Autopilot. Durante uma consolidação de nós, o GKE esvazia um nó subutilizado, recria as cargas de trabalho em outro nó e exclui o nó esvaziado.
O tempo e os critérios para a remoção do nó dependem do perfil de escalonamento automático.
É possível ajustar os limites de subutilização de recursos que acionam a remoção de nós e a consolidação de cargas de trabalho usando a seção autoscalingPolicy
na definição personalizada de ComputeClass. É possível ajustar os seguintes
parâmetros:
consolidationDelayMinutes
: o número de minutos após os quais O GKE remove nós subutilizadosconsolidationThreshold
: o limite de utilização da CPU e da memória como uma porcentagem dos recursos disponíveis do nó. O GKE só considera a remoção de nós se a utilização de recursos for menor que esse limite.gpuConsolidationThreshold
: o limite de utilização da GPU como uma porcentagem dos recursos disponíveis do nó. O GKE só considera a remoção de nós se a utilização de recursos for menor que esse limite. Defina esse valor como100
ou0
para que o GKE consolide todos os nós que não tenham 100% de utilização de GPUs anexadas.
Veja o exemplo a seguir.
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: my-class
spec:
priorities:
- machineFamily: n4
- machineFamily: c4
autoscalingPolicy:
consolidationDelayMinutes: 5
consolidationThreshold: 70
Nessa configuração, o GKE remove nós não usados após cinco minutos, e eles só se tornam candidatos à consolidação se a CPU e a utilização da memória forem menores que 70%.
Migração ativa
A migração ativa é um recurso opcional de escalonamento automático em ComputeClasses personalizadas que substitui automaticamente os nós atuais por novos nós. Os nós são substituídos com base em determinados critérios, dependendo do tipo de migração.
Quando uma migração ativa ocorre, o GKE cria novos nós e, em seguida, drena e exclui os nós obsoletos. A migração acontece gradualmente para minimizar a interrupção da carga de trabalho. A migração ativa tem as seguintes considerações:
- A migração ativa não migra dados armazenados em armazenamento permanente, como discos permanentes do Compute Engine. Para minimizar o risco de perda de dados, não ative a migração ativa em ComputeClasses usadas por cargas de trabalho com estado.
- Se você tiver ativado o provisionamento automático de nós nos clusters padrão, a migração ativa poderá acionar a criação de novos pools de nós se os pools de nós atuais não atenderem aos critérios definidos na classe de computação personalizada.
- A migração ativa não substitui nós que não podem ser removidos. Por exemplo, a migração ativa não substitui um nó se isso violar a configuração
--min-nodes
do pool de nós. - Para evitar interrupções críticas na carga de trabalho, a migração ativa não move os
pods a seguir:
- Pods que definem um PodDisruptionBudget, se a mudança exceder o PodDisruptionBudget.
- Pods com a
anotação
cluster-autoscaler.kubernetes.io/safe-to-evict: "false"
.
- As cargas de trabalho que usam volumes permanentes com recursos zonais, como o Hyperdisk, talvez não funcionem bem com a migração ativa. Restrições zonais e de tipo de máquina de alguns produtos do Hyperdisk podem reduzir a eficácia da migração ativa. Além disso, algumas cargas de trabalho com estado podem não tolerar a interrupção causada pela migração ativa.
- Se você atualizar uma ComputeClass para ativar a migração ativa, o GKE vai migrar os pods atuais para novos nós ao longo do tempo.
Os seguintes tipos de migração ativa são compatíveis:
optimizeRulePriority
: substitui nós mais baixos em uma lista de prioridade de ComputeClass por nós mais altos na lista de prioridade. Para ver um exemplo, consulte a especificação de exemplo de ComputeClass que prioriza nós N4.ensureAllDaemonSetPodsRunning
: substitui nós com pods do DaemonSet não programáveis por nós maiores, capazes de executar todos os pods do DaemonSet necessários. Por exemplo, consulte a especificação de exemplo de ComputeClass que garante que os pods do DaemonSet estejam em execução.
Configurar a migração ativa para nós de prioridade mais alta
É possível configurar a migração ativa para substituir os nós atuais que estão mais abaixo em uma lista de prioridade de fallback de ComputeClass por novos nós que estão mais acima nessa lista. Essa configuração ajuda a garantir que todos os pods em execução sejam executados nos nós mais preferidos para essa ComputeClass, mesmo que o GKE tenha que executar esses pods em nós menos preferidos.
Considere o seguinte exemplo de especificação de ComputeClass, que prioriza nós N4 em nós C4:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: my-class
spec:
priorities:
- machineFamily: n4
- machineFamily: c4
activeMigration:
optimizeRulePriority: true
Se os nós N4 estivessem indisponíveis quando você implantou um pod com essa ComputeClass, o GKE teria usado os nós C4 como uma opção alternativa. Se nós N4 ficarem disponíveis para provisionamento posterior, por exemplo, se a cota aumentar ou se as VMs N4 ficarem disponíveis no seu local, o GKE vai criar um nó N4 e migrar gradualmente o pod do nó C4 atual para o novo nó N4. O GKE exclui o nó C4 obsoleto.
Configurar a migração ativa para executar pods DaemonSet não programáveis
É possível configurar a migração ativa para substituir automaticamente os nós atuais que têm pods do DaemonSet não programáveis por nós maiores capazes de executar todos os pods do DaemonSet necessários.
Considere o seguinte exemplo de especificação ComputeClass:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: my-class
spec:
priorities:
- machineFamily: n1
activeMigration:
ensureAllDaemonSetPodsRunning: true
Por exemplo, se a implantação de um pod com essa ComputeClass causou o escalonar verticalmente de uma máquina n1-standard-2
, e você implantou um DaemonSet que solicita duas CPUs, a migração ativa vai substituir o nó n1-standard-2
por um maior da mesma família de máquinas n1
, como um n1-standard-4
, para criar espaço suficiente para todos os pods.
Consumir reservas do Compute Engine
Disponível no GKE versão 1.31.1-gke.2105000 e mais recentes
Se você usa reservas de capacidade do Compute Engine para ter um nível mais alto de garantia de disponibilidade de hardware emGoogle Cloud zonas específicas, configure cada prioridade de substituição na sua ComputeClass personalizada para que o GKE consuma reservas ao criar novos nós.
O consumo de reservas em ComputeClasses personalizadas tem os seguintes requisitos:
- É necessário usar a criação automática de pool de nós para que o GKE use reservas para criar novos nós. Para mais informações, consulte a seção Criação automática de pools de nós e ComputeClasses. Você também pode continuar consumindo reservas ao criar manualmente pools de nós no cluster.
- Reservas que não são de TPU só podem ser usadas quando
machineType
oumachineFamily
estão definidos. - As ComputeClasses que configuram SSDs locais precisam usar a regra de prioridade
machineType
, nãomachineFamily
. Para mais detalhes, consulte a seção tipo de regra machineType. - As ComputeClasses que especificam reservas para um
machineType
com SSDs locais anexados precisam incluir um campolocalSSDCount:
explicitamente.
Considere o exemplo a seguir de especificação de ComputeClass, que prioriza uma
reserva compartilhada específica para uso ao provisionar instâncias do a3-highgpu-1g
.
Se os tipos de instância priorizados não estiverem disponíveis, o GKE vai usar qualquer reserva correspondente na especificação:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: accelerator-reservations
spec:
nodePoolAutoCreation:
enabled: true
priorities:
- machineType: a3-highgpu-1g
storage:
localSSDCount: 2
gpu:
type: nvidia-h100-80gb
count: 1
reservations:
specific:
- name: a3-shared-reservation
project: reservation-project
affinity: Specific
- machineType: a3-highgpu-1g
storage:
localSSDCount: 2
gpu:
type: nvidia-h100-80gb
count: 1
reservations:
affinity: AnyBestEffort
whenUnsatisfiable: DoNotScaleUp
Se você implantar um pod que usa a ComputeClass accelerator-reservations
,
o GKE primeiro tenta usar a reserva a3-shared-reservation
ao criar novas instâncias a3-highgpu-1g
para executar o pod. Se essa reserva específica não tiver capacidade disponível, o GKE tentará escalonar as instâncias a3-highgpu-1g
usando qualquer reserva correspondente. Se nenhuma reserva estiver acessível, o GKE vai usar as VMs do Spot a3-highgpu-1g
. Por fim, se nenhuma VM spot estiver disponível, a operação de escalonamento vai falhar.
Neste exemplo, as duas regras de prioridade com referências de reserva exigem explicitamente o campo localSSDCount:
porque o formato de máquina a3-highgpu-1g
inclui SSDs locais.
O exemplo a seguir mostra uma reserva específica compartilhada, que volta para VMs Spot e, finalmente, para VMs sob demanda:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: shared-specific-reservations
spec:
nodePoolAutoCreation:
enabled: true
priorities:
- machineFamily: n4
reservations:
specific:
- name: n4-shared-reservation
project: reservation-project
affinity: Specific
- machineFamily: n4
spot: true
- machineFamily: n4
whenUnsatisfiable: DoNotScaleUp
É possível consumir os seguintes tipos de reservas:
Reservas específicas de projeto único: configure os seguintes campos:
reservations.specific.name
: o nome da reserva.reservations.affinity
: precisa serSpecific
.
Reservas compartilhadas específicas: configure os seguintes campos:
reservations.specific.name
: o nome da reserva.reservations.specific.project
: o ID do projeto que tem a reserva.reservations.affinity
: precisa serSpecific
.
Todas as reservas correspondentes: configure os seguintes campos:
reservations.affinity
: precisa serAnyBestEffort
.- Não defina um nome de reserva ou projeto.
As reservas de TPU exigem afinidade específica. reservations.affinity: AnyBestEffort
não é compatível.
Se o GKE não encontrar capacidade disponível em uma reserva, o comportamento resultante vai depender do tipo de reserva selecionado na regra de prioridade da ComputeClass, da seguinte forma:
- Reservas específicas: o GKE tenta a próxima regra de prioridade na ComputeClass.
- Reservas correspondentes: o GKE tenta provisionar um nó sob demanda que atenda aos requisitos dessa regra de prioridade. Se o GKE não conseguir provisionar um nó sob demanda, ele tentará a próxima regra de prioridade na ComputeClass.
Se o GKE não atender aos requisitos de nenhuma das regras de prioridade para a ComputeClass, o comportamento quando nenhuma regra se aplica vai ocorrer.
Consumir blocos de reserva específicos
A partir da versão 1.31.4-gke.1072000 do GKE, é possível segmentar um bloco de reserva específico em uma reserva com suporte de hardware. Esse recurso está disponível para os tipos de máquina A3 Ultra e A4.
Para consumir um bloco de reserva específico, configure o recurso ComputeClass conforme mostrado neste exemplo:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: specific-reservations
spec:
nodePoolAutoCreation:
enabled: true
priorities:
- machineFamily: a3
gpu:
type: nvidia-h200-141gb
count: 8
reservations:
specific:
- name: a3ultra-specific-reservation
reservationBlock:
name: RESERVATION_BLOCK_NAME
affinity: Specific
Substitua RESERVATION_BLOCK_NAME pelo nome do bloco de reserva de destino.
A partir da versão 1.33.1-gke.1788000 do GKE, é possível segmentar um subbloco específico em um bloco de reserva. Esse recurso está disponível para o tipo de máquina A4X.
Para consumir um sub-bloco de reserva específico, configure o recurso ComputeClass conforme mostrado no exemplo em Consumir sub-blocos de reserva específicos.
Ao usar esse recurso, considere o seguinte:
- Esses recursos se aplicam apenas a reservas específicas em um projeto único ou compartilhado.
Personalizar a configuração do sistema de nós
É possível personalizar determinados parâmetros no kubelet e no kernel do Linux usando o campo nodeSystemConfig
na especificação da ComputeClass. É possível
especificar esse campo em qualquer regra de prioridade que defina uma série
ou um tipo de máquina do Compute Engine. Também é possível definir valores globais padrão para
qualquer campo de configuração do sistema de nós omitido nas regras de prioridade
adicionando o campo nodeSystemConfig
ao
campo priorityDefaults
na sua ComputeClass.
Esse recurso está disponível na versão 1.32.1-gke.1729000 e mais recentes do GKE.
Para mais informações, consulte as seguintes páginas:
ComputeClasses padrão para clusters e namespaces
É possível configurar o GKE para aplicar uma ComputeClass por padrão a pods que não selecionam uma ComputeClass específica. É possível definir uma ComputeClass padrão para namespaces específicos ou para um cluster inteiro. Para mais informações sobre como configurar clusters ou namespaces com uma classe padrão, consulte Aplicar ComputeClasses a pods por padrão.
Agrupar pools de nós
A partir da versão 1.32.2-gke.1359000 do GKE,
é possível agrupar vários pools de nós em uma única unidade lógica chamada
coleção usando o campo nodePoolGroup
na especificação
ComputeClass. Com esse agrupamento, é possível aplicar configurações compartilhadas a vários
pools de nós.
Coleção de vários hosts de TPU
É possível agrupar sua implantação de vários hosts de TPU para definir um objetivo de nível de serviço (SLO) em todos os pools de nós da coleção. Para agrupar pools de nós, especifique
o nome do grupo no campo nodePoolGroup
. Todos os pools de nós provisionados
usando essa ComputeClass pertencem ao mesmo grupo.
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: tpu-multi-host-collection
spec:
nodePoolGroup:
name: my-tpu-collection
...
Para ver mais informações, consulte os seguintes tópicos:
- Planejar TPUs no GKE
- Pools de nós de fração de TPU de vários hosts
- Programar coleções de TPUs para cargas de trabalho de inferência
Configuração do pool de nós
O campo nodePoolConfig
na especificação ComputeClass permite aplicar
configurações que são refletidas em todos os nós nos pools de nós criados
usando essa classe.
Especificar o tipo de imagem
É possível especificar o sistema operacional de base para os nós no pool de nós usando o campo imageType
. Com esse campo, é possível escolher um tipo de imagem para os pools de nós que serão executados nos nós. Se você omitir esse campo, o valor padrão será cos_containerd
. O exemplo a seguir mostra como especificar o
imageType
na sua ComputeClass:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: my-node-pool-config
spec:
nodePoolConfig:
imageType: cos_containerd
Para mais informações, consulte Imagens de nó.
Conta de serviço
O campo serviceAccount
especifica a conta de serviço Google Cloud usada pelos nós nos pools de nós gerenciados pela ComputeClass. O exemplo a seguir mostra como especificar o serviceAccount
na sua ComputeClass:
spec:
nodePoolConfig:
serviceAccount: my-service-account@my-project.iam.gserviceaccount.com
Para mais informações, consulte Sobre as contas de serviço no GKE.
Definir o tipo de carga de trabalho para o SLO da TPU
A partir da versão 1.32.2-gke.1359000 do GKE, é possível definir o objetivo de nível de serviço (SLO) para suas cargas de trabalho de TPU usando o campo workloadType
em nodePoolConfig
. O valor nesse campo informa ao GKE o uso pretendido dos recursos de TPU. O campo workloadType
aceita os seguintes valores:
HIGH_AVAILABILITY
: use esse valor para cargas de trabalho focadas na disponibilidade, como veiculação de inferência, para limitar e simplificar as interrupções.HIGH_THROUGHPUT
: use esse valor para jobs de treinamento ou em lote que exigem que toda a infraestrutura subjacente seja executada na maior parte do tempo para progredir. Esse valor só pode ser usado quandonodePoolGroup
também é especificado.
O exemplo a seguir define uma ComputeClass para uma coleção de TPUs de vários hosts otimizada para cargas de trabalho de inferência de alta disponibilidade.
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: multi-host-inference
spec:
nodePoolGroup:
name: my-inference-collection
nodePoolConfig:
workloadType: HIGH_AVAILABILITY
nodePoolAutoCreation:
enabled: true
priorities:
- tpu:
type: tpu-v6e-slice
topology: 2x4
Para mais informações, consulte as seguintes páginas:
Solicitar ComputeClasses em cargas de trabalho
Para usar uma ComputeClass personalizada, seu pod precisa solicitar explicitamente essa ComputeClass
usando um nodeSelector
na especificação do pod. Você pode definir uma
ComputeClass como padrão para um namespace específico do Kubernetes. Os pods nesse
namespace usam essa ComputeClass, a menos que solicitem uma ComputeClass
diferente.
Por exemplo, o manifesto a seguir solicita a ComputeClass cost-optimized
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: custom-workload
spec:
replicas: 2
selector:
matchLabels:
app: custom-workload
template:
metadata:
labels:
app: custom-workload
spec:
nodeSelector:
cloud.google.com/compute-class: cost-optimized
containers:
- name: test
image: gcr.io/google_containers/pause
resources:
requests:
cpu: 1.5
memory: "4Gi"
Seletores de nós para rótulos de nós do sistema
O GKE adiciona rótulos do sistema aos nós para identificá-los por critérios como o tipo de máquina, aceleradores de hardware conectados ou o tipo de disco de inicialização. Esses rótulos do sistema têm um dos seguintes prefixos na chave do rótulo:
k8s.io
cloud.google.com
gke.io
No GKE versão 1.32.3-gke.1499000 e mais recentes, é possível implantar cargas de trabalho que usam um seletor de nós para selecionar rótulos do sistema e uma ComputeClass ao mesmo tempo. Se você selecionar rótulos do sistema em pods que selecionam ComputeClasses, verifique se esses pods são programados conforme esperado. Um conflito entre a configuração de uma ComputeClass e os seletores de nós em um pod pode resultar em problemas como os seguintes:
- O GKE não pode criar nós que usam a configuração de maior prioridade para a ComputeClass.
- O pod permanece no status
Pending
.
O GKE também rejeita pods que selecionam rótulos do sistema com um
campo correspondente na especificação ComputeClass
. Ao usar
ComputeClasses, atualize as cargas de trabalho para remover os seguintes rótulos dos seletores de nós e configure o campo correspondente nas ComputeClasses que você
criar:
Marcador do nó | Campo ComputeClass |
---|---|
cloud.google.com/machine-family |
priorities.machineFamily |
cloud.google.com/machine-type |
priorities.machineType |
cloud.google.com/gke-spot |
priorities.spot |
cloud.google.com/gke-accelerator |
priorities.gpu.type |
cloud.google.com/gke-gpu-driver-version |
priorities.gpu.driverVersion |
cloud.google.com/reservation-name |
priorities.reservations.specific.name |
cloud.google.com/reservation-project |
priorities.reservations.specific.project |
cloud.google.com/reservation-affinity |
priorities.reservations.affinity |
cloud.google.com/gke-ephemeral-storage-local-ssd |
priorities.storage.localSSDCount |
cloud.google.com/gke-boot-disk |
priorities.storage.bootDiskType |
cloud.google.com/gke-boot-disk-size |
priorities.storage.bootDiskSize |
cloud.google.com/gke-node-pool-group-name |
nodePoolGroup.name |
cloud.google.com/gke-workload-type |
nodePoolConfig.workloadType |
Limitações
O nome da sua ComputeClass não pode começar com gke
ou autopilot
.
A seguir
- Saiba mais sobre outras recomendações de implantação de carga de trabalho no GKE Autopilot
- Saiba como configurar, implantar e solicitar ComputeClasses personalizadas