Pular para o conteúdo

Arquitetura real · Staff

OpenAI: Kubernetes com 7.500 nós

Arquitetura real em produção. Pontos centrais: gang scheduling e escala de etcd e API server.

18 min de leitura · Fonte: OpenAI · Conteúdo revisado em 23 de outubro de 2026

Resposta curta

Arquitetura real em produção. Pontos centrais: gang scheduling e escala de etcd e API server. Em um post público, a OpenAI descreveu clusters de Kubernetes com 7.500 nós. Ela mesma diz que escalar um único cluster a esse tamanho raramente é feito e exige cuidado especial.

01 · CONTEXTO E CARGA

Um cluster enorme para uma carga incomum

Em um post público, a OpenAI descreveu clusters de Kubernetes com 7.500 nós. Ela mesma diz que escalar um único cluster a esse tamanho raramente é feito e exige cuidado especial.

A carga explica as escolhas. Em muitos jobs, um único pod ocupa o nó inteiro; por isso há muitos nós, mas pouca pressão sobre o escalonador. Essa pressão, porém, vem em picos: um job novo pode criar centenas de pods de uma vez e depois a rotatividade volta a ser baixa.

Se um pod participante de um job morre, o job inteiro para e precisa ser reiniciado, e ele retoma do último checkpoint. Os pods falam direto pelo IP, com MPI via SSH, e não por service endpoints.

02 · API SERVER E ETCD

O plano de controle como componente crítico

A OpenAI trata os API servers e o etcd como componentes críticos para um cluster saudável. Os API servers rodam fora do cluster, e tanto eles quanto o etcd ficam em nós dedicados.

  1. No diagrama, os pesquisadores falam com os API servers, que são o ponto central do plano de controle.

    Diagrama da arquitetura: Cluster de pesquisa: plano de controle
    CLPesquisadores
    CPAPI servers
    DBetcd principal
    DBetcd de eventos
    CPkube-scheduler
    CPNós de GPU
    DBArmazenamento de blobs
    NWMonitoramento
  2. Os eventos do Kubernetes ficam em um cluster etcd separado do principal; depois dessa separação, a equipe diz não ter tido problemas notáveis com o etcd.

    Diagrama da arquitetura: Cluster de pesquisa: plano de controle
    CLPesquisadores
    CPAPI servers
    DBetcd principal
    DBetcd de eventoseventos
    CPkube-scheduler
    CPNós de GPU
    DBArmazenamento de blobs
    NWMonitoramento
  3. Nos maiores clusters há 5 API servers e 5 nós de etcd, para repartir a carga e limitar o impacto se um deles cair.

    Diagrama da arquitetura: Cluster de pesquisa: plano de controle
    CLPesquisadores
    CPAPI servers
    DBetcd principal
    DBetcd de eventos
    CPkube-scheduler
    CPNós de GPU
    DBArmazenamento de blobs
    NWMonitoramento
  4. A taxa de respostas 429 e 5xx dos API servers é um sinal de alto nível de problemas, e a equipe alerta sobre ela.

    Diagrama da arquitetura: Cluster de pesquisa: plano de controle
    CLPesquisadores
    CPAPI servers
    DBetcd principal
    DBetcd de eventos
    CPkube-scheduler
    CPNós de GPU
    DBArmazenamento de blobs
    NWMonitoramentoalertas
  5. A memória de cada API server tende a crescer linearmente com o número de nós; no cluster de 7.500 nós, chega a até 70GB de heap por API server.

    Diagrama da arquitetura: Cluster de pesquisa: plano de controle
    CLPesquisadores
    CPAPI serversmemória alta
    DBetcd principal
    DBetcd de eventos
    CPkube-scheduler
    CPNós de GPU
    DBArmazenamento de blobs
    NWMonitoramento
  6. Os API servers são stateless e fáceis de rodar em grupo auto-recuperável; para o etcd não há automação de auto-recuperação, porque os incidentes foram raros.

    Diagrama da arquitetura: Cluster de pesquisa: plano de controle
    CLPesquisadores
    CPAPI servers
    DBetcd principal
    DBetcd de eventos
    CPkube-scheduler
    CPNós de GPU
    DBArmazenamento de blobs
    NWMonitoramento

Separar o estado (etcd) da camada sem estado (API server) permite tratar cada parte de um jeito: réplicas descartáveis na frente e um armazenamento que merece cuidado maior atrás. É o mesmo raciocínio de escalar na horizontal o que é stateless e proteger com mais rigor o que guarda estado replicado por consenso.

03 · CARGA QUE CRESCE COM O CLUSTER

WATCHes, DaemonSets e o API server

Uma das maiores fontes de carga no API server foi o WATCH em Endpoints. Todo nó do cluster é membro de serviços como kubelet e node-exporter, e quando um nó entra ou sai o WATCH dispara.

  1. Todo nó é membro desses serviços; quando um nó entra ou sai, o WATCH dispara no API server.

    Diagrama da arquitetura: Watches em Endpoints
    CPNós do cluster
    CPAPI server
    CHCache intermediário
  2. O WATCH em Endpoints foi uma das grandes fontes de carga do API server.

    Diagrama da arquitetura: Watches em Endpoints
    CPNós do cluster
    CPAPI servercarga alta
    CHCache intermediário
  3. Os EndpointSlices reduziram essa carga em 1000x.

    Diagrama da arquitetura: Watches em Endpoints
    CPNós do cluster
    CPAPI server
    CHCache intermediário
  4. A equipe evita que DaemonSets interajam com o API server.

    Diagrama da arquitetura: Watches em Endpoints
    CPNós do cluster
    CPAPI server
    CHCache intermediário
  5. Quando cada nó precisa acompanhar mudanças, um serviço de cache intermediário parece um bom padrão para evitar gargalos no cluster inteiro.

    Diagrama da arquitetura: Watches em Endpoints
    CPNós do cluster
    CPAPI server
    CHCache intermediáriocache

04 · GANG SCHEDULING

Tudo ou nada no agendamento

Em experimentos com StatefulSets, para os otimizadores todos os membros precisam estar agendados antes de qualquer treino, e o MPI é sensível a mudanças na composição do grupo.

Se dois experimentos pedem toda a capacidade, em vez de agendar um deles por inteiro o Kubernetes pode agendar só metade dos pods de cada um, e nenhum dos dois progride.

  1. Dois experimentos pedem, cada um, toda a capacidade do cluster ao escalonador.

    Diagrama da arquitetura: Gang scheduling de experimentos
    CPExperimento A
    CPExperimento B
    CPEscalonador
    CPNós de GPU
  2. O Kubernetes pode agendar só metade dos pods de cada experimento.

    Diagrama da arquitetura: Gang scheduling de experimentos
    CPExperimento A
    CPExperimento B
    CPEscalonador
    CPNós de GPU
  3. O resultado é um impasse: nenhum dos dois experimentos consegue progredir.

    Diagrama da arquitetura: Gang scheduling de experimentos
    CPExperimento Ametade dos pods
    CPExperimento Bmetade dos pods
    CPEscalonador
    CPNós de GPU
  4. A solução adotada foi o plugin Coscheduling no escalonador.

    Diagrama da arquitetura: Gang scheduling de experimentos
    CPExperimento A
    CPExperimento B
    CPEscalonadorCoscheduling
    CPNós de GPU

A equipe tentou soluções com escalonador customizado. O Kubernetes 1.18 trouxe uma arquitetura de plugins no escalonador central, o que facilitou adicionar esse tipo de recurso de forma nativa.

CritérioEscalonador customizadoPlugin do escalonador
ResultadoCasos de borda que conflitavam com o agendamento dos pods normaisArquitetura de plugins que facilita adicionar recursos nativamente
Papel no casoTentado pela equipeCoscheduling foi o plugin escolhido

05 · ISOLAMENTO E LIÇÕES

Clusters isolados e o que se repete

Na rede, os pesquisadores se conectam a um hub e a partir dele acessam cada cluster, os spokes. Os clusters não conversam entre si, o que mantém o isolamento de falhas.

Perguntas frequentes

O que é OpenAI: Kubernetes com 7.500 nós?

Arquitetura real em produção. Pontos centrais: gang scheduling e escala de etcd e API server.

O que o design de OpenAI: Kubernetes com 7.500 nós cobre?

Ele está organizado nestas seções: Um cluster enorme para uma carga incomum, O plano de controle como componente crítico, WATCHes, DaemonSets e o API server, Tudo ou nada no agendamento e Clusters isolados e o que se repete.

Quanto tempo leva OpenAI: Kubernetes com 7.500 nós e qual é o nível?

Leva cerca de 18 minutos para ler e tem nível Staff.

Agora projete você mesmo

Rode este caso como uma entrevista na escola de System Design: você toma as decisões, o tutor as questiona e você vê a nota do seu desenho.