Esta página mostra-lhe como aplicar classes de computação por predefinição aos pods do Google Kubernetes Engine (GKE) que não selecionam explicitamente uma classe de computação. Esta página tem instruções para definir uma classe de computação como predefinição num espaço de nomes e para um cluster inteiro. Estas instruções destinam-se a administradores de clusters que pretendam reduzir a sobrecarga manual causada pela configuração individual da carga de trabalho e do nó.
Antes de ler esta página, familiarize-se com as classes de computação personalizadas.
Acerca das classes de computação predefinidas
Pode configurar clusters do GKE ou namespaces específicos para terem uma classe de computação predefinida. A classe predefinida que configurar aplica-se a qualquer Pod nesse cluster ou espaço de nomes que não selecione uma classe de computação diferente. Quando implementa um Pod que não seleciona uma classe de computação, o GKE aplica as classes de computação predefinidas pela seguinte ordem:
- Se o espaço de nomes tiver uma classe de computação predefinida, o GKE modifica a especificação do pod para selecionar essa classe de computação.
- Se o espaço de nomes não tiver uma classe de computação predefinida, aplica-se a classe predefinida ao nível do cluster. O GKE não modifica a especificação do pod.
Antes de começar
Antes de começar, certifique-se de que realizou as seguintes tarefas:
- Ative a API Google Kubernetes Engine. Ative a API Google Kubernetes Engine
- Se quiser usar a CLI gcloud para esta tarefa,
instale-a e, em seguida,
inicialize-a. Se instalou anteriormente a CLI gcloud, execute
gcloud components update
para obter a versão mais recente.
Ter um cluster do GKE Autopilot ou Standard que execute uma versão que suporte a definição de uma classe de computação predefinida ao nível do cluster ou do espaço de nomes. Para mais informações, consulte a secção Requisitos.
Para clusters padrão, ative o aprovisionamento automático de nós ou o redimensionador automático de clusters.
Se quiser definir uma classe de computação personalizada como predefinição para um espaço de nomes, implemente uma classe de computação personalizada.
Requisitos
- Para definir uma classe de computação como predefinição ao nível do cluster, o cluster tem de executar a versão 1.33.1-gke.1744000 ou posterior do GKE.
- Para definir uma classe de computação como predefinição ao nível do espaço de nomes apenas para pods não DaemonSet, o cluster tem de executar a versão 1.33.1-gke.1788000 ou posterior do GKE.
Funções e autorizações necessárias
Para receber as autorizações de que precisa para configurar classes de computação predefinidas ao nível do cluster ou do espaço de nomes, peça ao seu administrador para lhe conceder as seguintes funções da IAM no Google Cloud projeto:
-
Programador do Kubernetes Engine (
roles/container.developer
) -
Atualize a classe de computação predefinida ao nível do cluster:
Administrador do cluster do Kubernetes Engine (
roles/container.clusterAdmin
)
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Estas funções predefinidas contêm as autorizações necessárias para configurar classes de computação predefinidas ao nível do cluster ou do espaço de nomes. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:
Autorizações necessárias
São necessárias as seguintes autorizações para configurar classes de computação predefinidas ao nível do cluster ou do espaço de nomes:
-
container.customResourceDefinitions.create
-
container.customResourceDefinitions.update
-
container.customResourceDefinitions.get
-
container.customResourceDefinitions.list
-
container.namespaces.get
-
container.namespaces.list
-
container.pods.get
-
container.nodes.get
-
container.nodes.list
-
container.deployments.create
-
container.deployments.get
-
Adicione etiquetas a espaços de nomes:
container.namespaces.update
-
Ative a classe de computação predefinida ao nível do cluster:
container.clusters.update
Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.
Configure uma classe de computação predefinida para um espaço de nomes
Pode anotar qualquer espaço de nomes do Kubernetes no seu cluster com o nome de uma classe de computação a usar como predefinição. Se um pod implementado nesse espaço de nomes ainda não selecionar uma classe de computação, o GKE modifica a especificação do pod para selecionar a classe predefinida no espaço de nomes. Pode predefinir qualquer classe de computação personalizada ou integrada.
Para aplicar uma classe de computação a todos os pods num espaço de nomes por predefinição, adicione a etiqueta
cloud.google.com/default-compute-class
a esse espaço de nomes:kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class=COMPUTECLASS_NAME
Substitua o seguinte:
NAMESPACE_NAME
: o nome do espaço de nomes a atualizar.COMPUTECLASS_NAME
: o nome da classe de computação a definir como predefinição para o espaço de nomes.
Se o comando falhar com a seguinte mensagem de erro, o espaço de nomes já tem uma classe de computação predefinida:
error: 'cloud.google.com/default-compute-class' already has a value, and --overwrite is false
Para resolver este erro, atualize a classe de computação predefinida para o espaço de nomes.
Para aplicar uma classe de computação a todos os pods não DaemonSet num espaço de nomes por predefinição, adicione a etiqueta
cloud.google.com/default-compute-class-non-daemonset
a esse espaço de nomes:kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset=COMPUTECLASS_NAME
Se o comando falhar com a seguinte mensagem de erro, o espaço de nomes já tem uma classe de computação predefinida para pods que não sejam DaemonSet:
error: 'cloud.google.com/default-compute-class-non-daemonset' already has a value, and --overwrite is false
Para resolver este erro, atualize a classe de computação predefinida para o espaço de nomes.
Atualize a classe de computação predefinida existente num espaço de nomes
Para substituir a classe de computação predefinida existente de um espaço de nomes, execute um dos seguintes comandos:
Atualize a classe de computação predefinida para todos os pods no espaço de nomes:
kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class=COMPUTECLASS_NAME \ --overwrite
Substitua o seguinte:
NAMESPACE_NAME
: o nome do espaço de nomes a atualizar.COMPUTECLASS_NAME
: o nome da classe de computação a definir como a nova predefinição para o espaço de nomes.
Substitua a classe de computação predefinida para pods que não sejam DaemonSet no espaço de nomes:
kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset=COMPUTECLASS_NAME \ --overwrite
Configure uma classe de computação predefinida para um cluster
Esta secção mostra como definir uma classe de computação como predefinição para o seu cluster. Para as classes de computação predefinidas ao nível do cluster, não especifique manualmente as contaminações de nós nem as etiquetas de nós para os node pools existentes no cluster.
O GKE não dimensiona pools de nós que tenham taints de nós para classes de computação. Se adicionar manualmente uma etiqueta para a classe de computação default
, o GKE pode dimensionar esse conjunto de nós. No entanto, esta configuração manual
não é necessária para usar uma classe de computação predefinida ao nível do cluster.
Para ativar a definição de uma classe de computação predefinida ao nível do cluster para um cluster, execute o comando
gcloud container clusters update
com a flag--enable-default-compute-class
:gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --enable-default-compute-class
Substitua o seguinte:
CLUSTER_NAME
: o nome do cluster.CONTROL_PLANE_LOCATION
: a localização do seu plano de controlo do cluster, comous-central1
.
Também pode especificar esta flag quando cria um cluster do Autopilot ou Standard.
Guarde o seguinte manifesto, que define um
ComputeClass
com o nomedefault
:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: default spec: priorities: - machineFamily: n4 - machineFamily: n2 whenUnsatisfiable: ScaleUpAnyway nodePoolAutoCreation: enabled: true
Este manifesto de exemplo pede nós que usam instâncias N4. Se as instâncias N4 não estiverem disponíveis, a classe de computação pede instâncias N2. Pode configurar a classe de computação com qualquer um dos campos disponíveis na ComputeClass CustomResourceDefinition.
default
Aplique o manifesto ao cluster:
kubectl apply -f PATH_TO_MANIFEST
Substitua
PATH_TO_MANIFEST
pelo caminho para o manifesto da classe de computação.
Depois de definir uma classe de computação predefinida ao nível do cluster, o GKE dimensiona os conjuntos de nós que cumprem os seguintes requisitos:
- A configuração do nó é igual à configuração da
default
classe de computação. - O conjunto de nós não tem restrições nem etiquetas para uma classe de computação diferente.
O GKE pode dimensionar pools de nós que tenham uma restrição e uma etiqueta para a classe de computação
default
.
Por exemplo, se a classe de computação default
especificar a série de máquinas N4, o GKE pode dimensionar um conjunto de nós existente que use instâncias N4 e não tenha restrições ou etiquetas para uma classe de computação diferente.
Valide o comportamento predefinido da classe de computação
Para verificar se a classe de computação predefinida que definiu para um espaço de nomes ou para um cluster funciona como esperado, faça o seguinte:
Reveja o exemplo de implementação seguinte:
Esta implementação não pede explicitamente uma classe de computação.
Crie a implementação:
kubectl apply --namespace=NAMESPACE_NAME \ -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/refs/heads/main/quickstarts/hello-app/manifests/helloweb-deployment.yaml
Substitua
NAMESPACE_NAME
por uma das seguintes opções, consoante o que quer validar:- O nome de um espaço de nomes que tem uma classe de computação predefinida.
- O nome de um espaço de nomes que não tem uma classe de computação predefinida.
O GKE pode demorar algum tempo a criar novos nós para executar os pods.
Identifique os nós que executam os pods da implementação de exemplo:
kubectl get pods --namespace=NAMESPACE_NAME \ --selector=app=hello -o=wide
O resultado é semelhante ao seguinte:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES helloweb-7795fbf856-58n5l 1/1 Running 0 9m21s 10.52.2.3 gke-cluster-1-nap-n2-highcpu-2-3muqi8-f213e529-rx7d <none> <none>
Obtenha as etiquetas dos nós:
kubectl get node NODE_NAME --show-labels \ | grep "cloud.google.com/compute-class"
Substitua
NODE_NAME
pelo nome do nó da saída do passo anterior.O resultado é semelhante ao seguinte:
NODE_NAME Ready <none> 22m v1.32.4-gke.1236007 # lines are omitted from this output cloud.google.com/compute-class=COMPUTECLASS_NAME,cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd
O valor em
COMPUTECLASS_NAME
é um dos seguintes:- Classe de computação predefinida ao nível do cluster:
default
para nós criados pelo GKE Autopilot ou pelo aprovisionamento automático de nós. Os nós em conjuntos de nós criados manualmente existentes podem não ter a etiquetacloud.google.com/compute-class
. - Classe de computação predefinida ao nível do espaço de nomes: o nome da classe de computação que configurou como predefinição do espaço de nomes.
- Classe de computação predefinida ao nível do cluster:
Desative a classe de computação predefinida
Para desativar a classe de computação predefinida num espaço de nomes ou num cluster, faça o seguinte:
Para desativar a classe de computação predefinida ao nível do espaço de nomes para todos os pods, remova a etiqueta
cloud.google.com/default-compute-class
do espaço de nomes:kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-
O caráter
-
no final da chave da etiqueta remove todas as etiquetas com essa chave do objetoNamespace
na API Kubernetes.Para desativar a classe de computação predefinida ao nível do espaço de nomes para Pods que não sejam DaemonSet, remova a etiqueta
cloud.google.com/default-compute-class-non-daemonset
do espaço de nomes:kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset-
Para desativar a classe de computação predefinida ao nível do cluster, use o comando
gcloud container clusters update
com a flag--no-enable-default-compute-class
:gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --no-enable-default-compute-class
O que se segue?
- Saiba mais acerca das classes de computação personalizadas no GKE.