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:
- Série de máquinas do Compute Engine e casos de uso
- Requisitos no nível do kernel para aplicativos
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:
- Se você tiver pods que podem compartilhar recursos de computação com outros pods ou quiser otimizar custos ao executar pods em hardware especializado, use o comportamento de programação padrão de vários pods por nó.
- Se você tiver pods que precisam de acesso confiável aos recursos completos do nó ou quiser minimizar a chance de interrupções causadas pelo compartilhamento de recursos de computação, solicite um nó dedicado para cada pod.
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, veja se você realizou as seguintes tarefas:
- Ative 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, em seguida,
inicialize a
CLI gcloud. Se você instalou a gcloud CLI 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.
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, comoc3
. Para valores compatíveis, consulte Série de máquinas compatíveis nesta página.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.
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.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ó.
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.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:
- Pods do Spot
- Pods de tempo de execução estendido (somente com nós dedicados por pod)
- Separação da carga de trabalho
- Reservas de capacidade
- Descontos por uso contínuo
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
- Para orientações sobre as opções de computação que o Autopilot oferece para vários casos de uso, consulte Classes de computação no Autopilot.
- Implantar cargas de trabalho baseadas em GPU no Autopilot.