Acerca das ComputeClasses do GKE


Pode definir conjuntos de atributos de nós e definições de dimensionamento automático que o Google Kubernetes Engine (GKE) usa para criar nós para executar pods através das ComputeClasses. Esta página descreve como funcionam as ComputeClasses, os exemplos de utilização e as vantagens, bem como os tipos de ComputeClasses disponíveis.

Estas informações destinam-se às seguintes pessoas:

  • Arquitetos da nuvem e engenheiros de plataformas que querem reduzir os custos gerais associados à gestão da infraestrutura de clusters.
  • Operadores de apps e SREs que querem focar-se em cargas de trabalho operacionais sem pensar na infraestrutura subjacente.

Acerca das ComputeClasses e da escala automática de clusters

Uma ComputeClass é um conjunto de atributos de nós e definições de escala automática que existe como um objeto da API Kubernetes num cluster do GKE. Pode selecionar uma ComputeClass em qualquer carga de trabalho do Kubernetes que implementar. A escala automática do cluster do GKE usa os atributos numa ComputeClass para criar nós para cargas de trabalho.

Os engenheiros de plataformas podem usar ComputeClasses para configurar a infraestrutura para vários tipos de cargas de trabalho, de modo que cada novo nó seja otimizado para os requisitos específicos das suas aplicações. As ComputeClasses melhoram a velocidade e a flexibilidade do dimensionamento automático do GKE e oferecem-lhe um método declarativo de configuração das opções de infraestrutura nos seus clusters. Para mais informações, consulte a secção Vantagens da utilização de ComputeClasses.

As capacidades e as funcionalidades específicas do GKE só estão disponíveis com as ComputeClasses, como as seguintes:

  • Prioridades de cálculo alternativas: defina vários conjuntos de configurações de infraestrutura numa ComputeClass, priorizadas com base nas suas preferências. Durante o dimensionamento, se a configuração mais preferida não estiver disponível, o GKE recorre à configuração seguinte.
  • Migração ativa para nós de prioridade mais elevada: quando configurado, o GKE substitui automaticamente os nós que estão mais abaixo na sua lista de prioridades alternativas por nós que estão mais acima nessa lista ao longo do tempo. Como resultado, os seus pods acabam por ser executados nos nós mais preferidos numa ComputeClass, mesmo que esse hardware não estivesse disponível quando criou a carga de trabalho.
  • Autopilot no GKE Standard: execute cargas de trabalho no modo Autopilot para usar funcionalidades do Autopilot, como a plataforma de computação otimizada para contentores e a faturação baseada em pods, mesmo em clusters Standard. O GKE gere estes nós e cargas de trabalho, oferecendo-lhe as vantagens do modo Autopilot em qualquer cluster.

Vantagens das ComputeClasses

As ComputeClasses oferecem aos administradores e operadores da plataforma vantagens como as seguintes:

  • Melhoria da obtenção de recursos: as ComputeClasses expandem as capacidades da escala automática do cluster do GKE. As funcionalidades da ComputeClass, como as prioridades de alternativa e os parâmetros de consolidação de nós, podem reduzir o risco de os pods ficarem presos num estado pendente e aumentar o intervalo de opções que pode usar para dimensionar os seus nós.
  • Configuração declarativa ao nível da plataforma: as ComputeClasses permitem que os engenheiros de plataforma descrevam declarativamente as configurações dos nós para vários tipos de cargas de trabalho. A escala automática do GKE gere a criação e a configuração de nós e conjuntos de nós. Pode integrar as suas ComputeClasses nos pipelines de CI/CD para ter consistência na infraestrutura aprovisionada na sua plataforma.
  • Sobrecarga de gestão reduzida: as ComputeClasses reduzem a complexidade da gestão de infraestruturas e cargas de trabalho em grande escala. Os engenheiros de plataformas declaram classes de infraestrutura e os operadores de apps selecionam uma classe relevante numa carga de trabalho. O GKE gere o escalamento, a configuração do hardware dos nós e aplica taints, tolerâncias e etiquetas.

Acerca do recurso personalizado ComputeClass

As ComputeClasses são recursos personalizados do Kubernetes. Pode definir a especificação de uma ComputeClass num ficheiro de manifesto e criá-la nos seus clusters, de forma semelhante à definição e criação dos recursos de carga de trabalho do Kubernetes, como implementações e serviços.

O manifesto de exemplo seguinte define uma ComputeClass denominada 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 esta ComputeClass, o GKE faz o seguinte quando cria 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 cria 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 aguarda até que os recursos fiquem disponíveis para agendar o pod.

Pode controlar várias definições dos seus nós através de ComputeClasses, incluindo aceleradores, definições do sistema de nós, localizações de nós e o comportamento alternativo 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 definição de recursos personalizados ComputeClass.

Seleção de ComputeClass em cargas de trabalho

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

O manifesto de implementação de exemplo seguinte 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 exista no cluster. Por exemplo, pode especificar a n4ComputeClass a partir da secção Acerca do recurso personalizado ComputeClass ou da autopilot ComputeClass incorporada.

Configuração do nó nas especificações da carga de trabalho

Os clusters do GKE Autopilot e o aprovisionamento automático de nós no GKE Standard permitem-lhe usar seletores de nós nos seus pods para criar nós com propriedades específicas, como famílias de máquinas, VMs Spot ou GPUs e TPUs. As ComputeClasses permitem-lhe definir centralmente estes requisitos em vez de adicionar seletores individuais a cada carga de trabalho.

Acerca da aplicação de ComputeClasses por predefinição

Pode configurar o GKE para aplicar uma ComputeClass por predefinição aos pods que não selecionam uma ComputeClass específica. Pode definir uma ComputeClass predefinida para namespaces específicos ou para um cluster inteiro. Para mais informações sobre como configurar os seus clusters ou espaços de nomes com uma classe predefinida, consulte o artigo Aplique ComputeClasses aos pods por predefinição.

A tabela seguinte descreve os efeitos da definição de uma ComputeClass como predefinição para um espaço de nomes ou para um cluster:

Efeitos de ComputeClasses predefinidos
Predefinição ao nível do espaço de nomes
  • O GKE aplica a ComputeClass apenas aos pods num namespace específico.
  • O GKE modifica os pods para adicionar um seletor de nós para a classe predefinida ao nível do espaço de nomes.
  • O GKE dimensiona apenas os nós que têm etiquetas de nós e taints de nós para essa ComputeClass, semelhante a qualquer outra classe de computação.
  • O GKE adiciona etiquetas de nós e taints de nós aos nós que o GKE cria para a classe predefinida ao nível do espaço de nomes.
Predefinição ao nível do cluster
  • O GKE aplica a ComputeClass aos pods em qualquer espaço de nomes.
  • O GKE aplica a ComputeClass apenas aos pods que não têm um seletor existente para uma ComputeClass.
  • O GKE não modifica as especificações do pod para adicionar um seletor de nós para a classe predefinida ao nível do cluster.
  • O GKE aumenta a escala dos nós que cumprem qualquer uma das seguintes condições:
    • Os nós não têm etiquetas nem restrições para uma classe de computação diferente.
    • Os nós têm a etiqueta de nó cloud.google.com/compute-class: default.
  • O GKE adiciona a etiqueta de nó cloud.google.com/compute-class: default aos nós que o GKE cria para a classe de armazenamento predefinida ao nível do cluster. O GKE não adiciona taints de nós a esses nós.
  • Se atualizar um cluster do Autopilot para usar uma classe de computação personalizada como predefinição ao nível do cluster, o GKE não executa Pods na plataforma de computação otimizada para contentores do Autopilot por predefinição. Na versão 1.33.1-gke.1107000 e posterior do GKE, pode usar a plataforma de computação do Autopilot para Pods específicos adicionando o seletor de nós cloud.google.com/compute-class: autopilota esses Pods.

Se o GKE aplicar uma ComputeClass predefinida ao nível do espaço de nomes a um pod, esse pod não ativa a ComputeClass predefinida ao nível do cluster, porque o GKE adiciona um seletor de nós para a classe predefinida ao nível do espaço de nomes ao pod.

ComputeClasses predefinidas ao nível do cluster

Quando ativa as ComputeClasses predefinidas ao nível do cluster, um objeto ComputeClass denominado default define as regras de dimensionamento automático de nós para o cluster. Se o seu cluster já tiver uma ComputeClass denominada default, o GKE usa essa configuração da ComputeClass para o cluster. Se o cluster não tiver uma ComputeClass personalizada denominada default, o GKE comporta-se como se as seguintes regras ComputeClass se aplicassem:

spec:
  whenUnsatisfiable: ScaleUpAnyway
  nodePoolAutoCreation:
    enabled: true

Por predefinição, o GKE não aplica nenhum comportamento alternativo e não altera a configuração dos nós com dimensionamento automático. Para aplicar propriedades específicas aos nós com dimensionamento automático por predefinição, tem de implementar uma ComputeClass personalizada denominada default.

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

  • Para evitar que os pods fiquem presos num estado Pending, defina o campo spec.whenUnsatisfiable como ScaleUpAnyway. Este valor permite que o GKE crie nós mesmo que os pods peçam famílias de máquinas do Compute Engine que não estejam nas regras de prioridade para a classe predefinida ao nível do cluster. Se quiser forçar estes pods a usar as famílias de máquinas que estão na ComputeClass predefinida, defina este campo como DoNotScaleUp.
  • Para restringir as alterações à default ComputeClass, use um RBAC ClusterRole para restringir as operações update, patch, delete e create no recurso ComputeClass denominado default.
  • Para alterar os parâmetros de consolidação de nós predefinidos do escalador automático de clusters, use o campo spec.autoscalingPolicy na especificação ComputeClass. Os parâmetros que especificar para este campo na ComputeClass predefinida ao nível do cluster aplicam-se a todos os nós no cluster. Para mais informações, consulte Defina parâmetros de dimensionamento automático para a consolidação de nós.

O que se segue?