Sobre as ComputeClasses do GKE


É possível definir conjuntos de atributos de nós e configurações de escalonamento automático que o Google Kubernetes Engine (GKE) usa para criar nós e executar pods usando ComputeClasses. Nesta página, descrevemos como as ComputeClasses funcionam, os casos de uso e os benefícios, além dos tipos disponíveis.

Essas informações são destinadas às seguintes pessoas:

  • Arquitetos de nuvem e engenheiros de plataforma que querem reduzir a sobrecarga associada ao gerenciamento da infraestrutura de cluster.
  • Operadores de apps e SREs que querem se concentrar na operação de cargas de trabalho sem pensar na infraestrutura subjacente.

Sobre ComputeClasses e escalonamento automático de clusters

Uma ComputeClass é um conjunto de atributos de nós e configurações de escalonamento automático que existe como um objeto da API Kubernetes em um cluster do GKE. É possível selecionar uma ComputeClass em qualquer carga de trabalho do Kubernetes implantada. O escalonamento automático de clusters do GKE usa os atributos em uma ComputeClass para criar nós para cargas de trabalho.

Os engenheiros de plataforma podem usar o ComputeClasses para configurar a infraestrutura de vários tipos de cargas de trabalho, para que cada novo nó seja otimizado para os requisitos específicos dos seus aplicativos. As ComputeClasses melhoram a velocidade e a flexibilidade do escalonamento automático do GKE e oferecem um método declarativo de configuração de opções de infraestrutura em todos os clusters. Para mais informações, consulte a seção Benefícios de usar ComputeClasses.

Alguns recursos e funcionalidades específicos do GKE estão disponíveis apenas com ComputeClasses, como:

  • Prioridades de computação substitutas: defina vários conjuntos de configurações de infraestrutura em uma ComputeClass, priorizadas com base nas suas preferências. Durante o escalonamento, se a configuração preferida não estiver disponível, o GKE vai usar a próxima configuração.
  • Migração ativa para nós de prioridade mais alta: quando configurado, o GKE substitui automaticamente os nós que estão mais abaixo na sua lista de prioridades de fallback por nós que estão mais acima nessa lista com o tempo. Como resultado, os pods acabam sendo executados nos nós mais preferidos em uma ComputeClass, mesmo que esse hardware não estivesse disponível quando você criou a carga de trabalho.
  • Autopilot no GKE Standard: execute cargas de trabalho no modo Autopilot do GKE para usar recursos do Autopilot, como a plataforma de computação otimizada para contêineres e o faturamento baseado em pod, mesmo em clusters Standard. O GKE gerencia esses nós e cargas de trabalho, oferecendo os benefícios do modo Autopilot em qualquer cluster.

Benefícios das ComputeClasses

As ComputeClasses oferecem aos administradores e operadores da plataforma benefícios como:

  • Melhoria na capacidade de obtenção de recursos: as ComputeClasses ampliam os recursos do escalonamento automático de clusters do GKE. Recursos do ComputeClass, como prioridades de fallback e parâmetros de consolidação de nós, podem reduzir o risco de pods presos em um status pendente e aumentar o intervalo de opções que você pode usar para escalonar seus nós.
  • Configuração declarativa no nível da plataforma: as ComputeClasses permitem que engenheiros de plataforma descrevam de forma declarativa as configurações de nós para vários tipos de carga de trabalho. O escalonamento automático do GKE gerencia a criação e a configuração de nós e pools de nós. É possível integrar suas ComputeClasses aos pipelines de CI/CD para ter consistência na infraestrutura provisionada em toda a plataforma.
  • Redução da sobrecarga de gerenciamento: as ComputeClasses reduzem a complexidade do gerenciamento de infraestrutura e cargas de trabalho em grande escala. Os engenheiros de plataforma declaram classes de infraestrutura, e os operadores de apps selecionam uma classe relevante em uma carga de trabalho. O GKE gerencia o escalonamento, a configuração de hardware do nó e aplica taints, tolerâncias e rótulos.

Sobre o recurso personalizado ComputeClass

As ComputeClasses são recursos personalizados do Kubernetes. É possível definir a especificação de uma ComputeClass em um arquivo de manifesto e criá-la nos clusters, da mesma forma que você define e cria os recursos de carga de trabalho do Kubernetes, como implantações e serviços.

O exemplo de manifesto a seguir define uma ComputeClass chamada n4:

apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
  name: n4
spec:
  nodePoolAutoCreation:
    enabled: true
  priorities:
  - machineFamily: n4
  - machineFamily: n2
  whenUnsatisfiable: DoNotScaleUp

Quando um pod seleciona essa ComputeClass, o GKE faz o seguinte ao criar novos nós:

  1. O GKE cria nós que usam a série de máquinas N4.
  2. Se a série de máquinas N4 não estiver disponível, o GKE vai criar nós que usam a série de máquinas N2.
  3. Se a série de máquinas N2 não estiver disponível, o GKE vai aguardar até que os recursos sejam disponibilizados para programar o pod.

É possível controlar várias configurações dos nós usando ComputeClasses, incluindo aceleradores, configurações do sistema de nós, locais de nós e o comportamento de fallback do GKE quando os recursos de hardware não estão disponíveis. Para mais informações sobre todas as configurações disponíveis para ComputeClasses, consulte a CustomResourceDefinition do ComputeClass.

Seleção de ComputeClass em cargas de trabalho

Para usar uma ComputeClass em uma carga de trabalho do GKE, selecione a ComputeClass no manifesto da carga de trabalho usando um seletor de nós para o rótulo cloud.google.com/compute-class.

O exemplo de manifesto de implantação a seguir seleciona uma ComputeClass:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    matchLabels:
      app: hello
  template:
    metadata:
      labels:
        app: hello
    spec:
      nodeSelector:
        # Replace with the name of a compute class
        cloud.google.com/compute-class: COMPUTE_CLASS 
      containers:
      - name: hello-app
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: "250m"
            memory: "4Gi"

Substitua COMPUTE_CLASS pelo nome de uma ComputeClass que existe no cluster. Por exemplo, é possível especificar a n4 ComputeClass na seção Sobre o recurso personalizado ComputeClass ou a autopilot ComputeClass integrada.

Configuração de nós em especificações de carga de trabalho

Os clusters do GKE Autopilot e o provisionamento automático de nós no GKE Standard permitem usar seletores de nós nos pods para criar nós com propriedades específicas, como famílias de máquinas, VMs do Spot ou GPUs e TPUs. Com elas, é possível definir esses requisitos de forma centralizada em vez de adicionar seletores individuais a cada carga de trabalho.

Sobre a aplicação de ComputeClasses por padrão

É 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.

A tabela a seguir descreve os efeitos de definir uma ComputeClass como padrão para um namespace ou um cluster:

Efeitos das ComputeClasses padrão
Padrão no nível do namespace
  • O GKE aplica a ComputeClass apenas a pods em um namespace específico.
  • O GKE modifica os pods para adicionar um seletor de nós à classe padrão no nível do namespace.
  • O GKE só escalona verticalmente nós que têm rótulos e taints de nó para essa ComputeClass, assim como qualquer outra classe de computação.
  • O GKE adiciona rótulos e taints aos nós que ele cria para a classe padrão no nível do namespace.
Padrão no nível do cluster
  • O GKE aplica a ComputeClass a pods em qualquer namespace.
  • O GKE aplica a ComputeClass somente a pods que não têm um seletor para uma ComputeClass.
  • O GKE não modifica as especificações do pod para adicionar um seletor de nós para a classe padrão no nível do cluster.
  • O GKE aumenta a escala dos nós que atendem a qualquer uma das seguintes condições:
    • Os nós não têm rótulos nem taints para uma classe de computação diferente.
    • Os nós têm o rótulo cloud.google.com/compute-class: default.
  • O GKE adiciona o rótulo de nó cloud.google.com/compute-class: default aos nós que o GKE cria para a classe padrão no nível do cluster. O GKE não adiciona taints de nó a esses nós.
  • Se você atualizar um cluster do Autopilot para usar uma classe de computação personalizada como padrão no nível do cluster, o GKE não vai executar pods na plataforma de computação otimizada para contêineres do Autopilot por padrão. Na versão 1.33.1-gke.1107000 e mais recente do GKE, é possível usar a plataforma de computação do Autopilot para pods específicos adicionando o seletor de nós cloud.google.com/compute-class: autopilot a esses pods.

Se o GKE aplicar uma ComputeClass padrão no nível do namespace a um pod, esse pod não vai ativar a ComputeClass padrão no nível do cluster, porque o GKE adiciona um seletor de nós para a classe padrão no nível do namespace ao pod.

ComputeClasses padrão no nível do cluster

Quando você ativa as ComputeClasses padrão no nível do cluster, um objeto ComputeClass chamado default define as regras de escalonamento automático de nós para o cluster. Se o cluster já tiver uma ComputeClass chamada default, o GKE usará essa configuração para o cluster. Se o cluster não tiver uma ComputeClass personalizada chamada default, o GKE vai se comportar como se as seguintes regras ComputeClass fossem aplicadas:

spec:
  whenUnsatisfiable: ScaleUpAnyway
  nodePoolAutoCreation:
    enabled: true

Por padrão, o GKE não aplica nenhum comportamento de substituição e não muda a configuração dos nós com escalonamento automático. Para aplicar propriedades específicas aos nós escalonados automaticamente por padrão, implante uma ComputeClass personalizada chamada default.

Considere o seguinte ao configurar a classe de computação padrão no nível do cluster:

  • Para evitar que os pods fiquem presos em um estado Pending, defina o campo spec.whenUnsatisfiable como ScaleUpAnyway. Esse valor permite que o GKE crie nós mesmo que os pods solicitem famílias de máquinas do Compute Engine que não estão nas regras de prioridade da classe padrão no nível do cluster. Se você quiser forçar esses pods a usar as famílias de máquinas que estão na ComputeClass padrão, defina esse campo como DoNotScaleUp.
  • Para restringir as mudanças na default ComputeClass, use um ClusterRole do RBAC para restringir as operações update, patch, delete e create no recurso ComputeClass chamado default.
  • Para mudar os parâmetros padrão de consolidação de nós do escalonador automático de cluster, use o campo spec.autoscalingPolicy na especificação da ComputeClass. Os parâmetros especificados para esse campo na ComputeClass padrão no nível do cluster se aplicam a todos os nós do cluster. Para mais informações, consulte Definir parâmetros de escalonamento automático para consolidação de nós.

A seguir