Otimizar o desempenho do pod do Autopilot escolhendo uma série de máquinas


Nesta página, mostramos como colocar cargas de trabalho em séries de máquinas específicas do Compute Engine para ter a melhor performance de carga de trabalho nos clusters do Autopilot do Google Kubernetes Engine (GKE).

Verifique se você tem familiaridade com o seguinte:

Como a seleção de séries de máquinas funciona

É possível adicionar um seletor de nó cloud.google.com/machine-family à especificação do pod para que o Autopilot aloque hardware específico do Compute Engine para esse pod. Por exemplo, você pode escolher a série de máquinas C3 para pods que precisam de mais capacidade de CPU ou a série de máquinas N1 para pods que precisam de mais memória. O Autopilot provisiona um dos tipos de máquina predefinidos da série de máquina selecionada para executar sua carga de trabalho de maneira otimizada.

Além do desempenho ideal do pod, a escolha de uma série de máquinas específica oferece os seguintes benefícios:

  • Utilização eficiente de nós: por padrão, o Autopilot otimiza o uso de recursos do nó programando o maior número possível de pods que solicitam a mesma série de máquinas em cada nó. Essa abordagem otimiza o uso de recursos no nó, o que melhora a relação preço-desempenho. Se a carga de trabalho precisar acessar todos os recursos no nó, você poderá configurar a carga de trabalho para solicitar um pod para cada nó.

  • Carga de trabalho com capacidade de burst:é possível configurar pods para burst na capacidade de recursos não utilizada no nó definindo os limites de recursos mais altos do que as solicitações. Para mais detalhes, acesse Configurar o bursting de pods no GKE.

Solicitar um nó dedicado para cada pod

Se você tiver cargas de trabalho com uso intensivo de CPU que precisam de acesso confiável a todos os recursos do nó, é possível configurar o pod para que o Autopilot coloque um pod que solicite uma série de máquinas no próprio nó.

Nós dedicados por pod são recomendados quando você executa cargas de trabalho em grande escala com uso intensivo de CPU, como cargas de trabalho de treinamento de IA/ML ou cargas de trabalho em lote de computação de alto desempenho (HPC).

Escolher entre a programação de vários pods e de um único pod

Use as orientações a seguir para escolher um comportamento de programação de pods com base nos seus requisitos:

Preços

Você é cobrado pelo Compute Engine pela VM subjacente e por qualquer hardware anexado, além de um premium para o gerenciamento e a escalonabilidade do Autopilot. Para mais detalhes, consulte os preços do GKE.

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 Google Cloud CLI para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando gcloud components update.
  • Verifique se você tem um cluster do Autopilot em execução na versão 1.30.1-gke.1396000 ou mais recente. Para criar um cluster do Autopilot, consulte Criar um cluster do Autopilot.

Selecionar uma série de máquinas

Esta seção mostra como selecionar uma série de máquinas do Compute Engine específica em um pod.

  1. Salve o seguinte manifesto como machine-series-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: machine-series-pod
    spec:
      nodeSelector:
        cloud.google.com/machine-family: MACHINE_SERIES
      containers:
      - name: my-container
        image: "k8s.gcr.io/pause"
        resources:
          requests:
            cpu: 5
            memory: "25Gi"
          limits:
            cpu: 20
            memory: 100Gi
    

    Substitua MACHINE_SERIES pela série de máquinas do Compute Engine do seu pod, como c3. Para valores compatíveis, consulte Série de máquinas compatíveis nesta página.

  2. Implante o pod:

    kubectl apply -f machine-series-pod.yaml
    

Esse manifesto permite que o Autopilot otimize o uso de recursos do nó agendando de forma eficiente outros pods que selecionam a mesma série de máquinas no mesmo nó, se houver capacidade disponível.

Usar SSDs locais

Os pods que selecionam uma série de máquinas podem usar SSDs locais para armazenamento temporário se você especificar uma série de máquinas que ofereça SSD local. O Autopilot considera solicitações de armazenamento temporárias ao escolher um tipo de máquina do Compute Engine para o pod.

  1. Salve o seguinte manifesto como local-ssd-pod.yaml:

      apiVersion: v1
      kind: Pod
    metadata:
      name: local-ssd-pod
    spec:
      nodeSelector:
        cloud.google.com/machine-family: MACHINE_SERIES
        cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
      containers:
      - name: my-container
        image: "k8s.gcr.io/pause"
        resources:
          requests:
            cpu: 6
            memory: "25Gi"
            ephemeral: "100Gi"
          limits:
            cpu: 12
            memory: "50Gi"
            ephemeral: "200Gi"
    

    Substitua MACHINE_SERIES por uma série de máquinas compatível que também ofereça suporte a SSDs locais. Se a série de máquinas especificada não oferecer suporte a SSDs locais, a implantação falhará com um erro.

  2. Implante o pod:

    kubectl apply -f local-ssd-pod.yaml
    

Solicite um nó dedicado para um pod

Se o pod tiver requisitos de desempenho específicos, como acesso confiável a todos os recursos do nó, solicite um nó dedicado para cada pod especificando o seletor de nó cloud.google.com/compute-class: Performance com o seletor de nó da série de máquinas. Isso indica ao Autopilot que seu pod será colocado em um novo nó que usa a série de máquinas especificada e é dedicado a esse pod. Esse seletor de nós também impede que o Autopilot programe outros pods nesse nó.

  1. Salve o seguinte manifesto como dedicated-node-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: dedicated-node-pod
    spec:
      nodeSelector:
        cloud.google.com/machine-family: MACHINE_SERIES
        cloud.google.com/compute-class: Performance
      containers:
      - name: my-container
        image: "k8s.gcr.io/pause"
        resources:
          requests:
            cpu: 12
            memory: "50Gi"
            ephemeral: "200Gi"
    

    Substitua MACHINE_SERIES por uma série de máquinas com suporte que também ofereça suporte a um pod por programação de nó. Se a série de máquinas especificada não oferecer suporte a um pod por programação de nó, a implantação falhará com um erro.

  2. Implante o pod:

    kubectl apply -f dedicated-node-pod.yaml
    

Quando você implanta esse manifesto, o Autopilot faz o seguinte:

  • Garante que o pod implantado solicite pelo menos os recursos mínimos para o nó otimizado para desempenho.
  • Calcula o total de solicitações de recursos do pod implantado e todos os DaemonSets do cluster.
  • Provisiona um nó com suporte da série de máquinas selecionada.
  • Modifica o manifesto do pod com uma combinação de seletores e tolerâncias de nós para garantir que o pod seja executado no próprio nó.

Série de máquinas compatível

O seletor machine-family é compatível com as seguintes séries de máquinas:

(sempre em pacote)

Para comparar essas séries de máquinas e os respectivos casos de uso, consulte Comparação de séries de máquinas na documentação do Compute Engine.

Compatibilidade com outros recursos do GKE

É possível usar pods que selecionam séries de máquinas com os seguintes recursos e funcionalidades do GKE:

Os pods spot e de tempo de execução estendido são mutuamente exclusivos. O GKE não impõe solicitações de recursos mínimas mais altas para pods dedicados por nó, mesmo que eles usem a separação de cargas de trabalho.

Como o GKE seleciona um tipo de máquina

Para selecionar um tipo de máquina na série especificada, o GKE calcula a CPU total, a memória total e o total de solicitações de armazenamento temporário dos pods e de todos os DaemonSets que serão executados no novo nó. O GKE arredonda esses valores para o tipo de máquina do Compute Engine mais próximo disponível que aceite todos esses totais.

  • Exemplo 1: considere uma implantação com quatro réplicas que seleciona a série de máquinas C3D. Você não solicita nós dedicados por pod. As solicitações de recursos de cada réplica são as seguintes:

    • vCPU 500m
    • 1 GiB de memória

    O Autopilot coloca todos os pods em um nó que é apoiado pelo tipo de máquina c3d-standard-4, que tem 4 vCPUs e 16 GB de memória.

  • Exemplo 2: considere um pod que seleciona a série de máquinas C3D e os SSDs locais para armazenamento temporário. Você solicita um nó dedicado para o pod. O total de solicitações de recursos, incluindo DaemonSets, é o seguinte:

    • 12 vCPUs
    • 50 GiB de memória
    • 200 GiB de armazenamento temporário

    O Autopilot coloca o pod em um nó que usa o tipo de máquina c3d-standard-16-lssd, que tem 16 vCPUs, 64 GiB de memória e 365 GiB de capacidade de SSD local.

A seguir