Nesta página, apresentamos as práticas recomendadas para criar e otimizar plataformas de processamento em lote com o Google Kubernetes Engine (GKE), incluindo as práticas recomendadas para:
- arquitetura
- gerenciamento de jobs
- multilocação
- segurança
- enfileiramento
- armazenamento
- desempenho
- economia
- monitoramento
O GKE oferece 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:
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:
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:
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. Quando um job é excluído, os pods que ele criou são removidos. Quando um job é suspenso, os pods ativos são excluídos até que o job seja retomado.
|
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
|
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:
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:
|
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:
|
Especificar parâmetros de ajuste para sua carga de trabalho | Recomendamos que você use as seguintes configurações:
|
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:
|
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
- Saiba como implantar um sistema em lote usando o Kueue.
- Consulte as práticas recomendadas para executar aplicativos do Kubernetes otimizados para custo no GKE