Práticas recomendadas para executar cargas de trabalho em lote no GKE


Nesta página, apresentamos as práticas recomendadas para criar plataformas de processamento em lote com o Google Kubernetes Engine (GKE). O GKE fornece um framework avançado para orquestrar cargas de trabalho em lote, como processamento de dados, treinamento de modelos de machine learning, execução de simulações científicas e outras cargas de trabalho de computação de alto desempenho.

Estas práticas recomendadas são destinadas a administradores de plataformas, arquitetos de nuvem e profissionais de operações interessados em implantar cargas de trabalho em lote no GKE. A arquitetura de referência para uma plataforma de processamento em lote no GKE mostra muitas das práticas recomendadas discutidas neste guia e pode ser implantada no seu próprio projeto do Google Cloud.

Como funcionam as cargas de trabalho em lote

Uma carga de trabalho em lote é um grupo de tarefas executadas até a conclusão sem intervenção do usuário. Para definir tarefas, use o recurso Jobs do Kubernetes. Uma plataforma em lote recebe os jobs e os enfileira na ordem em que são recebidos. A fila na plataforma em lote aplica a lógica de processamento, como prioridade, cota e recursos alocáveis. Ao enfileirar e personalizar os parâmetros de processamento em lote, o Kubernetes permite otimizar o uso dos recursos disponíveis, minimizar o tempo ocioso dos jobs programados e maximizar a economia de custos. O diagrama a seguir mostra os componentes do GKE que podem fazer parte de uma plataforma em lote.

Gerenciamento de plataformas em lote

Tradicionalmente, as plataformas em lote têm duas personas de usuário principais: desenvolvedores e administradores da plataforma:

  • Um desenvolvedor envia um job que especifica o programa, os dados a serem processados e os requisitos para o job. Em seguida, o desenvolvedor recebe a confirmação do envio do job e um identificador exclusivo. Depois que o job for concluído, o desenvolvedor receberá uma notificação com qualquer saída ou resultados dele.
  • Um administrador de plataforma gerencia e entrega aos desenvolvedores uma plataforma de processamento em lote eficiente e confiável.

Uma plataforma de processamento em lote precisa atender aos seguintes requisitos:

  • Os recursos da plataforma são provisionados corretamente para garantir que os jobs sejam executados com pouca ou nenhuma intervenção do usuário.
  • Os recursos da plataforma são configurados de acordo com as práticas recomendadas de segurança e observabilidade da organização.
  • Os recursos da plataforma são usados da forma mais eficiente possível. Em caso de contenção de recursos, o trabalho mais importante é feito primeiro.

Preparar a arquitetura da plataforma de lote no GKE

Um ambiente do GKE consiste em nós, que são máquinas virtuais (VMs) do Compute Engine, agrupadas para formar um cluster.

A tabela a seguir lista as principais recomendações ao planejar e projetar a arquitetura da plataforma em lote:

Recomendação Recursos
Selecione um modo de operação do GKE

O GKE tem os seguintes modos de operação disponíveis:

  • Com o modo Autopilot, o GKE gerencia automaticamente a configuração do cluster, incluindo nós, escalonamento, segurança e outras configurações pré-configuradas, para que você possa se concentrar na carga de trabalho. Os clusters do Autopilot estão altamente disponíveis por padrão.
  • No modo Standard, você define e gerencia a configuração do cluster, incluindo nós, escalonamento, segurança e outras configurações avançadas.

Confira a comparação detalhada entre o modo Autopilot e Standard.

Escolha o tipo de máquina para seus nós

O GKE é compatível com as seguintes séries de VMs do Compute Engine:

  • Otimizada para custos, como E2
  • Balanceada, como N2, N2D ou N1
  • Otimizada para escalonamento horizontal, como Tau T2D ou Tau T2A
  • Otimizada para memória, como M2 ou M1
  • Otimizada para computação, como C2 ou C2D
  • Otimizada para acelerador, como A2 com GPUs NVIDIA A100, G2 com GPUs NVIDIA L4, A3 com GPUs NVIDIA H100 (disponível em pré-lançamento particular).

Cada série de máquinas está associada a uma ou mais plataformas de CPU, como processadores Arm e processadores x86 da Intel e AMD.

Saiba mais sobre as opções disponíveis para sua carga de trabalho.

Usar aceleradores de hardware nos nós

No GKE, também é possível usar aceleradores de hardware, como unidades de processamento gráfico (GPUs) e Unidades de Processamento de Tensor (TPUs). Considere a estratégia de compartilhamento de tempo de GPU, que permite que vários contêineres compartilhem o tempo na mesma GPU física. Essa abordagem é útil para cargas de trabalho de GPU com burst e homogêneas com poucas solicitações. GPUs de várias instâncias para particionar GPUs para compartilhar um único recurso de GPU em vários contêineres ao mesmo tempo.

Ativar o escalonador automático de clusters em clusters do Standard

O GKE redimensiona automaticamente o número de nós em um determinado pool de nós com base nas demandas das cargas de trabalho. Você não precisa adicionar ou remover manualmente os nós ou provisionar em excesso seus pools de nós. Em vez disso, especifique apenas um tamanho mínimo e máximo para o pool de nós.

Recomendamos que você defina o escalonador automático de clusters com a seguinte configuração:

  • Use o perfil optimize-utilization que remove nós não utilizados até três vezes mais rápido do que o perfil equilibrado. Para saber mais, consulte Perfis de escalonamento automático.
  • Definir política de localização como ANY. O escalonador automático de clusters do GKE prioriza a utilização de reservas não utilizadas e cria nós em qualquer zona disponível nas regiões. Para saber mais, consulte a Política de localização.
  • Ative o provisionamento automático de nós para gerenciar e fazer o escalonamento automático da sua infraestrutura. Depois que um pool de nós é criado usando o provisionamento automático, o escalonador automático de cluster pode escaloná-lo dinamicamente. Para saber mais, consulte Como funciona o provisionamento automático de nós.

Com os clusters do Autopilot, você não precisa se preocupar com o provisionamento de nós ou o gerenciamento de pools de nós porque eles são provisionados automaticamente usando o provisionamento automático de nós, e são escalonados automaticamente para atender aos requisitos das cargas de trabalho.

Registrar o cluster em um canal de lançamento

O GKE pode gerenciar automaticamente a versão e os upgrades do cluster. Com base no modelo de adoção da versão, é possível registrar o cluster nos canais disponíveis do GKE.

Para saber mais, consulte Como escolher o melhor canal de lançamento para seus clusters.

Defina um escopo de manutenção a ser excluído do cluster

Com uma janela de exclusão do escopo do upgrade definida, o GKE respeita que as cargas de trabalho em lote de longa duração não sejam interrompidas para manutenção até a conclusão.

Para saber mais, consulte Escopo da manutenção a ser excluída.

Gerenciar o ciclo de vida do job

No Kubernetes, você executa suas cargas de trabalho em um conjunto de pods. Pods são grupos de um ou vários contêineres, com armazenamento compartilhado e recursos de rede. Os pods são definidos por uma especificação do Kubernetes.

Um job cria um ou mais pods e continua tentando executar novamente até que um número especificado de pods seja encerrado. À medida que os pods são concluídos, o job rastreia as conclusões bem-sucedidas. Quando um número especificado de conclusões bem-sucedidas é atingido, o job é concluído.

A tabela a seguir lista as principais recomendações ao projetar e gerenciar jobs:

Recomendação Recursos
Selecione o modo de conclusão do job Especifique o Modo de conclusão como Indexed. Essa configuração é útil ao atribuir uma partição dos dados a serem processados com base no índice do pod. Os pods de um job recebem um índice de conclusão associado. A exclusão de um job limpará os pods que ele criou. Suspender um job vai excluir os pods ativos dele até que ele seja retomado novamente.
Definir os CronJobs para ações regulares programadas Use o CronJob para que o GKE realize ações regulares programadas, como backups, geração de relatórios ou treinamento programado para modelos de machine learning.
Gerenciar falhas em um job Defina a política de falha de pods do Kubernetes e o limite de falhas de espera do pod para lidar com falhas que aceitam e não aceitam novas tentativas em um job. Essa definição melhora o consumo de recursos do cluster, evitando novas tentativas desnecessárias do pod e falhas de jobs devido a interrupções do pod. Por exemplo, é possível configurar a preempção, a remoção iniciada pela API ou a remoção baseada em taint em que pods que não têm tolerância para o efeito de taint NoExecute são removidos. Saiba como lidar com falhas de pods repetíveis e não repetíveis com a política de falha de pod.
Gerenciar vários jobs como uma unidade Use a API JobSet para gerenciar vários jobs como uma unidade para atender aos padrões de carga de trabalho, como um driver (ou coordenador) e vários workers (por exemplo, MPIJob) enquanto definir padrões de jobs alinhados aos padrões comuns com base nos seus casos de uso. Por exemplo, é possível criar um job indexado por padrão, criar um serviço headless para nomes de domínio totalmente qualificados (FQDN) previsíveis para pods e definir a política de falha de pod associada.
Ampliar o tempo de execução para um pod que não tolera reinicializações Defina a anotação cluster-autoscaler.kubernetes.io/safe-to-evict do Kubernetes como false na especificação do pod. O escalonador automático de clusters respeita as regras de remoção definidas nos pods. Essas restrições podem impedir que um nó seja excluído pelo escalonador automático se ele contiver um pod com a anotação cluster-autoscaler.kubernetes.io/safe-to-evict.

Para saber mais, consulte Como considerar a programação e a interrupção do pod.

Gerenciar multilocação

A multilocação de clusters do GKE é uma alternativa ao gerenciamento de recursos do GKE por diferentes usuários ou cargas de trabalho, chamados de locatários, em uma organização. O gerenciamento de recursos do GKE pode seguir critérios como isolamento de locatário, cotas e intervalos de limites ou alocação de custos.

A tabela a seguir lista as principais recomendações ao gerenciar a multilocação:

Recomendação Recursos
Usar namespaces para gerenciar o isolamento de locatários É possível separar cada locatário e respectivos recursos do Kubernetes nos próprios namespaces deles.
Usar políticas para aplicar o isolamento de locatários Defina políticas para restringir o acesso à API, definir cotas, restringir o uso de recursos e restringir o que os contêineres podem fazer. Essas políticas são delimitadas por namespaces.
Definir a alocação de custos do GKE Use a alocação de custos do GKE para receber insights sobre solicitações de recursos de cluster para cada locatário em um namespace.

Controlar o acesso à plataforma em lote

O GKE permite ajustar as permissões de acesso das cargas de trabalho em execução no cluster.

A tabela a seguir lista as principais recomendações ao gerenciar o acesso e a segurança

Recomendação Recursos
Definir a federação de identidade da carga de trabalho para o GKE O GKE permite que as cargas de trabalho no cluster do GKE representem as contas de serviço do Identity and Access Management (IAM) para acessar os serviços do Google Cloud. Ao usar a federação de identidade da carga de trabalho para o GKE, as cargas de trabalho podem acessar com segurança secrets armazenados fora do GKE.

Para saber mais, consulte federação de identidade da carga de trabalho para o GKE e Acessar secrets armazenados.

Definir o isolamento de rede do cluster Use clusters particulares em que o endpoint do plano de controle e os nós de trabalho possam ter endereços IP internos. Também é possível alterar o isolamento de clusters para clusters públicos atuais que usam o Private Service Connect.

Para saber mais, consulte clusters públicos e Como alterar o isolamento de clusters.

Usar nós do GKE protegidos Configure os nós do GKE protegidos para fornecer integridade e identidade de nó verificáveis e fortes para aumentar a segurança dos nós do GKE.
Isolamento físico Por motivos de segurança, suas cargas de trabalho podem precisar de um isolamento mais forte. Controle a programação com taints de nó para separar fisicamente os locatários em pools de nós usando taints de nó e tolerâncias de carga de trabalho. Isso garante que apenas as cargas de trabalho apropriadas sejam programadas nesses pools de nós.

Enfileiramento e compartilhamento justo

Para controlar o consumo de recursos, atribua limites de cota de recursos a cada locatário, enfileire os jobs recebidos e processe os jobs na ordem em que forem recebidos.

A tabela a seguir lista as principais recomendações ao gerenciar o enfileiramento e o compartilhamento justo entre cargas de trabalho em lote:

Recomendação Recursos
Usar o Kueue

O Kueue é um sistema de enfileiramento de jobs nativo do Kubernetes para computação em lote, de alto desempenho, machine learning e aplicativos semelhantes em um cluster do Kubernetes. Para ajudar no compartilhamento justo dos recursos de cluster entre os locatários, o Kueue gerencia cotas e como os jobs as consomem. Kueue toma as seguintes decisões:

  • Quando um job precisa aguardar
  • Quando um job precisa ser permitido para iniciar, por exemplo, criando o pod
  • Quando um job precisa passar por interrupção forçada, por exemplo, excluindo o pod

Para aprender a implementar um sistema de enfileiramento de jobs, consulte Implementar um sistema de enfileiramento de jobs com compartilhamento de cotas entre namespaces no GKE.

Para saber mais sobre o Kueue, consulte Conceitos do Kueue.

Armazenamento, desempenho e eficiência de custos

O uso eficiente dos nossos recursos de computação e armazenamento do GKE pode reduzir os custos. Uma estratégia é ajustar o tamanho e configurar as instâncias de computação de acordo com suas necessidades de processamento em lote, sem comprometer o desempenho.

A tabela a seguir lista as principais recomendações ao projetar e gerenciar o armazenamento e otimizar o desempenho:

Recomendação Recursos
Usar discos permanentes do Compute Engine

Recomendamos que você use as seguintes configurações de discos permanentes do Compute Engine:

Usar armazenamento conectado à rede

Use o armazenamento conectado à rede a seguir com o disco permanente para um desempenho de armazenamento ideal:

  • Use o Filestore para permitir que todos os nós de trabalho em um pod acessem o mesmo namespace de armazenamento e escalonem a capacidade.
  • Use o Cloud Storage FUSE para acessar o Cloud Storage diretamente de um contêiner como uma ativação POSIX local.
Definir o Pub/Sub

A carga de trabalho em lote também pode ler e gravar dados. Por exemplo, é possível usar o Pub/Sub e gravar os resultados em um data warehouse como o BigQuery, em que os relatórios e painéis são atualizados.

Recomendamos que você use as seguintes soluções de armazenamento:

  • Para armazenamento de objetos gerenciado, use o Cloud Storage.
  • Para armazenamento de arquivos de rede gerenciado, use o Filestore.
  • Para cargas de trabalho que exijam semântica do sistema de arquivos, use o driver CSI do Cloud Storage FUSE. Esse driver permite que os aplicativos do Kubernetes ativem buckets do Cloud Storage como sistemas de arquivos locais
Especificar parâmetros de ajuste para sua carga de trabalho

Recomendamos que você use as seguintes configurações:

  • Personalize a configuração do sistema de nós para sua carga de trabalho. Por exemplo, defina os valores mínimo, padrão e máximo do buffer de recebimento do soquete de TCP. Usar a configuração do sistema de nós.
  • Ative a sondagem ocupada usando perfis de rede. Algumas cargas de trabalho sensíveis à latência da rede podem ser melhoradas. Usar perfis de rede.
  • Aumente a largura de banda da rede para os nós do GKE ativando a NIC virtual do Google (gVNIC), uma interface de rede virtual projetada especificamente para o Compute Engine e recomendada para aplicativos de alto desempenho.
  • Especifique o número de linhas de execução por núcleo para desativar o uso simultâneo de várias linhas de execução.
Otimize a rede e a latência das cargas de trabalho O GKE é compatível com a política de posicionamento compacto para pools de nós, que especifica que esses nós e, portanto, as cargas de trabalho em execução precisam ser colocados mais próximos uns dos outros em uma zona. Isso é especialmente útil para cargas de trabalho de acoplamento rígido e de alto desempenho, em que a baixa latência entre os diferentes processos da carga de trabalho é uma grande preocupação. Para saber mais, consulte o artigo sobre posicionamento compacto.
Usar VMs do Spot

As VMs Spot são instâncias de máquina virtual (VM) do Compute Engine que têm um preço menor do que as VMs padrão do Compute Engine e não fornecem garantia de disponibilidade.

Recomendamos que você use as seguintes soluções:

  • Definir pools de nós de VMs Spot de escalonamento automático combinados com location_policy= "ANY" . Com essa política, as VMs Spot têm um risco menor de serem interrompidas forçosamente. Essa combinação é especialmente útil para cargas de trabalho que podem sobreviver à preempção de nós de trabalho individuais, como cálculos paralelos agradáveis.
  • Se sua carga de trabalho tiver uma pegada de recursos previsível, a combinação de reservas do Google Cloud com descontos por compromisso de uso pode gerar uma economia significativa. Crie um pool de nós com o tamanho definido como o número de instâncias reservadas e priorize a saturação desse pool para garantir o uso máximo.
Usar o streaming de imagem

Usar o streaming de imagem para extrair imagens de contêiner. O GKE faz o streaming de dados de imagens qualificadas. Isso permite que as cargas de trabalho sejam inicializadas sem esperar o download completo da imagem, resultando em melhorias significativas nos tempos de inicialização e no custo-benefício.

Monitoramento

O GKE está integrado com ferramentas de observabilidade e geração de registros que ajudam a monitorar a confiabilidade e a eficiência do cluster. A tabela a seguir lista as principais recomendações ao ativar e usar as ferramentas de observabilidade do GKE:

Recomendação Recursos
Usar o Prometheus

O GKE está integrado à observabilidade do Google Cloud. Personalize as métricas que você quer que o GKE envie para o Cloud Logging e o Cloud Monitoring

O Google Cloud Managed Service para Prometheus está ativado para clusters do GKE por padrão. Recomendamos que você use a coleta gerenciada para eliminar a complexidade de configurar e manter os servidores do Prometheus.

Para saber mais, consulte Serviço gerenciado para o Prometheus.

Usar os painéis do Cloud Monitoring

Use os painéis do Monitoring para GKE para ter uma visão geral de alto nível da utilização de clusters e recursos, além de detalhar e filtrar várias métricas e dimensões.

Para saber mais, consulte Como observar os clusters do GKE.

A seguir