Neste documento, mostramos como controlar a infraestrutura de computação e o comportamento de dimensionamento automático dos clusters do Google Kubernetes Engine (GKE) com base nas necessidades específicas das cargas de trabalho usando ComputeClasses personalizadas.
Este documento é destinado a administradores de plataformas que querem definir de forma declarativa perfis de escalonamento automático para nós e para operadores de cluster que querem executar cargas de trabalho em ComputeClasses específicas.
Sobre as ComputeClasses personalizadas
As ComputeClasses personalizadas são os Recursos personalizados do Kubernetes que permitem definir prioridades para o GKE seguir ao provisionar nós para executar as cargas de trabalho. É possível usar uma ComputeClass personalizada para fazer o seguinte:
- Dê ao GKE um conjunto de prioridades para seguir sequencialmente ao provisionar nós, cada um com parâmetros específicos, como série de máquinas do Compute Engine ou capacidade mínima de recursos
- Definir limites e parâmetros de escalonamento automático para remover nós subutilizados e consolidar cargas de trabalho de maneira eficiente na capacidade de computação atual
- Instrua o GKE a substituir automaticamente as configurações de nó menos preferenciais por configurações de nó mais preferenciais para um desempenho de carga de trabalho otimizado
Para entender todas as opções de configuração e como elas interagem entre si e com o modo Autopilot do GKE e o modo GKE Standard, consulte Sobre as ComputeClasses personalizadas.
Preços
O recurso personalizado ComputeClass
é fornecido sem custo financeiro extra no
GKE. As seguintes considerações de preço se aplicam:
Modo Autopilot do GKE: você recebe cobranças usando o modo de faturamento baseado em nó. Saiba mais em Preços do modo Autopilot.
Modo GKE Standard: consulte Preços do modo Standard.
Limitações
O nome da sua ComputeClass não pode começar com gke
ou autopilot
.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ativar a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a CLI do Google Cloud para essa tarefa,
instale e inicialize a
gcloud CLI. Se você instalou a CLI gcloud anteriormente, instale a versão
mais recente executando o comando
gcloud components update
. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.
- Verifique se você tem um cluster do GKE em execução na versão 1.30.3-gke.1451000 ou mais recente. Para mais informações, consulte Criar um cluster do Autopilot.
Se você estiver usando um cluster no modo Standard, verifique se atende a um dos seguintes requisitos:
- Ative o escalonamento automático em pelo menos um pool de nós no cluster.
- Se o cluster Standard executar uma versão anterior a 1.33.3-gke.1136000 e não estiver registrado no canal de lançamento rápido, ative o provisionamento automático de nós no nível do cluster.
Exemplo de cenário para ComputeClasses
Neste documento, apresentamos um exemplo de cenário em que você define uma ComputeClass personalizada. Na prática, considere os requisitos das suas cargas de trabalho e organização específicas e defina ComputeClasses que atendam a esses requisitos. Para descrições completas de todas as opções de ComputeClasses, e para considerações especiais, consulte Sobre as ComputeClasses personalizadas.
Pense neste cenário de exemplo:
- Seu objetivo é otimizar os custos de execução das cargas de trabalho
- Suas cargas de trabalho são tolerantes a falhas e não exigem desligamento suave ou tempo de execução estendido
- Suas cargas de trabalho precisam de pelo menos 64 vCPUs para serem executadas de maneira ideal
- Você só pode usar a série de máquinas N4 do Compute Engine
Com base no cenário de exemplo, você decide que quer uma ComputeClass que faça o seguinte:
- Prioriza os nós do N4 Spot com pelo menos 64 vCPU
- Permite que o GKE use qualquer nó do Spot N4, independentemente da capacidade de computação
- Se nenhum nó do Spot N4 estiver disponível, o GKE poderá usar nós do N4 sob demanda.
- Instrui o GKE a mover as cargas de trabalho para nós do Spot sempre que fiquem disponíveis de novo
Configurar uma ComputeClass no modo Autopilot
No GKE Autopilot, você define uma ComputeClass, faz a implantação no cluster e solicita essa ComputeClass nas cargas de trabalho. O GKE executa todas as etapas de configuração do nó, como a aplicação de rótulos e taints, para você.
Salve o seguinte manifesto como compute-class.yaml
:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: cost-optimized
spec:
priorities:
- machineFamily: n4
spot: true
minCores: 64
- machineFamily: n4
spot: true
- machineFamily: n4
spot: false
activeMigration:
optimizeRulePriority: true
nodePoolAutoCreation:
enabled: true
Configurar uma ComputeClass no modo padrão
Nos clusters do modo GKE Standard, talvez seja necessário realizar configuração manual para garantir que os pods do ComputeClass sejam programados conforme esperado. A configuração manual depende de se os pools de nós são criados automaticamente, da seguinte maneira:
- 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.
Para permitir que o GKE crie automaticamente pools de nós para sua ComputeClass, siga estas etapas:
- Para clusters do modo Standard que executam uma versão anterior a 1.33.3-gke.1136000 e não estão inscritos no canal de lançamento Rápido, ative o provisionamento automático de nós no nível do cluster.
Salve o seguinte manifesto de exemplo como
compute-class.yaml
:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: cost-optimized spec: priorities: - machineFamily: n4 spot: true minCores: 64 - machineFamily: n4 spot: true - machineFamily: n4 spot: false activeMigration: optimizeRulePriority: true nodePoolAutoCreation: enabled: true
Quando você implanta pods que solicitam essa ComputeClass de exemplo e novos nós precisam ser criados, o GKE prioriza a criação de nós na ordem dos itens no campo
priorities
. Se necessário, o GKE cria pools de nós que atendem aos requisitos de hardware da ComputeClass.
Também é possível especificar um tipo de máquina personalizado preciso nas suas prioridades. O uso de tipos de máquina personalizados requer o GKE
versão 1.33.2-gke.1111000 ou mais recente. O exemplo a seguir configura uma
ComputeClass que prioriza VMs Spot para o tipo de máquina personalizado n4-custom-8-20480
e volta para VMs sob demanda do mesmo tipo se a capacidade
do Spot não estiver disponível:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: custom-machine-type
spec:
priorities:
- machineType: n4-custom-8-20480
spot: true
- machineType: n4-custom-8-20480
spot: false
nodePoolAutoCreation:
enabled: true
Usar ComputeClasses com pools de nós criados manualmente
Esta seção mostra como definir uma ComputeClass em um cluster que usa apenas pools de nós criados manualmente.
Salve o seguinte manifesto como
compute-class.yaml
:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: cost-optimized spec: priorities: - machineFamily: n4 spot: true minCores: 64 - machineFamily: n4 spot: true - machineFamily: n4 spot: false activeMigration: optimizeRulePriority: true
Crie um novo pool de nós com escalonamento automático que usa VMs Spot e o associe à ComputeClass:
gcloud container node-pools create cost-optimized-pool \ --location=LOCATION \ --cluster=CLUSTER_NAME \ --machine-type=n4-standard-64 \ --spot \ --enable-autoscaling \ --max-nodes=9 \ --node-labels="cloud.google.com/compute-class=cost-optimized" \ --node-taints="cloud.google.com/compute-class=cost-optimized:NoSchedule"
Substitua:
LOCATION
: o local do cluster.CLUSTER_NAME
: o nome do cluster atual.
Crie um novo pool de nós com escalonamento automático e VMs sob demanda e associe-o à ComputeClass:
gcloud container node-pools create on-demand-pool \ --location=LOCATION \ --cluster=CLUSTER_NAME \ --machine-type=n4-standard-64 \ --enable-autoscaling \ --max-nodes=9 \ --num-nodes=0 \ --node-labels="cloud.google.com/compute-class=cost-optimized" \ --node-taints="cloud.google.com/compute-class=cost-optimized:NoSchedule"
Quando você implanta pods que solicitam essa ComputeClass e novos nós precisam ser
criados, o GKE prioriza a criação de nós
no pool de nós cost-optimized-pool
. Se não for possível criar novos nós,
o GKE vai criar nós no pool de nós on-demand-pool
.
Para mais detalhes sobre como os pools de nós criados manualmente interagem com classes de computação personalizadas, consulte Configurar pools de nós criados manualmente para uso de classes de computação.
Personalizar limites de escalonamento automático para consolidação de nós
Por padrão, o GKE remove nós subutilizados e reprograma as
cargas de trabalho em outros nós disponíveis. É possível personalizar ainda mais os limites
e o tempo após o qual um nó se torna um candidato à remoção usando o
campo autoscalingPolicy
na definição de ComputeClass, como no exemplo
abaixo:
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: cost-optimized
spec:
priorities:
- machineFamily: n4
spot: true
minCores: 64
- machineFamily: n4
spot: true
- machineFamily: n4
spot: false
activeMigration:
optimizeRulePriority: true
autoscalingPolicy:
consolidationDelayMinutes : 5
consolidationThreshold : 70
Este exemplo faz com que um nó se torne candidato a remoção se for subutilizado por 70% da CPU e da capacidade de memória disponíveis por mais de cinco minutos. Para conferir uma lista de parâmetros disponíveis, consulte Definir parâmetros de escalonamento automático para consolidação de nós.
Implantar uma ComputeClass em um cluster
Depois de definir uma ComputeClass, implante-a no cluster:
kubectl apply -f compute-class.yaml
Essa classe de computação está pronta para uso no cluster. É possível solicitar a ComputeClass nas especificações do pod ou, opcionalmente, defini-la como a ComputeClass padrão em um namespace específico.
Solicitar uma ComputeClass em uma carga de trabalho
Para solicitar uma ComputeClass em uma carga de trabalho, adicione um seletor de nós para essa ComputeClass no manifesto, como nas etapas a seguir:
Salve o seguinte manifesto como
cc-workload.yaml
: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"
Implantar a carga de trabalho:
kubectl apply -f cc-workload.yaml
Quando você implanta essa carga de trabalho, o GKE adiciona automaticamente uma tolerância aos pods que corresponde ao taint do nó para a ComputeClass solicitada. Essa tolerância garante que apenas pods que solicitam a ComputeClass sejam executados em nós da ComputeClass.
Atualizar uma ComputeClass implantada
Para atualizar uma ComputeClass implantada, modifique o manifesto YAML dela. Em seguida, execute este comando para implantar o manifesto modificado:
kubectl apply -f PATH_TO_FILE
Substitua PATH_TO_FILE
pelo caminho para o manifesto modificado. Verifique se o valor no campo name
permanece inalterado.
Quando você implanta a ComputeClass atualizada, o GKE usa a configuração atualizada para criar novos nós. O GKE não modifica nenhum nó atual com a configuração atualizada.
Com o tempo, o GKE poderá mover os pods atuais para nós que usam sua configuração atualizada se a ComputeClass usar a migração ativa e se os pods atuais estiverem qualificados para migrar.
A seguir
- Leia mais sobre as classes de computação personalizadas
- Aplicar ComputeClasses personalizados aos pods por padrão