Para responder a minha própria pergunta com base em algumas pessoas bastante úteis no canal slack do Kubernetes.
- Minha experiência de falha de um nó devido à OOM'ing do contêiner é provavelmente devida a um efeito secundário, pois o gerenciador de recursos foi projetado para evitar isso. O culpado sugerido foi, na verdade, o subsistema de E / S tornar-se sobrecarregado ao ponto de desestabilizar o nó, o que, após algumas medições, parece muito provável.
In GKE, the OS, Docker, K8S, and any temporary directories the pods request are all on one non-local 100GB (by default, I believe) ext4 filesystem.
A maioria dos pods que criamos estava pedindo e escrevendo para diretórios temporários e o I / O coletivo sobrecarrega o sistema a ponto de não responder e, no nosso caso, travar o próprio sistema operacional .
- Um teste inicial, configurando meu próprio K8S com o SO em seu próprio disco ext4, docker e espaço efêmero em seus próprios pools do ZFS e os mesmos manifestos de implantação fazem stress, mas não chega perto de travar o sistema operacional.
- Uma solução alternativa proposta mas ainda não testada é usar Jobs e gerenciar as dependências entre eles com algum processo de coordenação, presumivelmente porque isso espalharia os contêineres individuais pelo cluster. Isso pode funcionar, mas me parece um problema subjacente.
Embora eu ainda não tenha medido a atribuição de discos permanentes para o espaço de rascunho que estávamos usando emptyDir para, presumo que isso também diminuiria a carga no disco primário e poderia ser suficiente para mascarar o problema.
Infelizmente, a configuração padrão do GKE assume que o sda será capaz de lidar com toda a carga do sistema operacional, logs do K8S, Docker e scratch space que aparentemente devem funcionar para a maioria das pessoas, pois não encontrei outro problema como o nosso.Vindo do bare metal, eu esperava evitar alguns detalhes de baixo nível em ter o cluster gerenciado, mas tanto o dataproc quanto o GKE, até agora pelo menos me inclinei a construir os clusters.
Espero que isso ajude alguém cuja carga de trabalho seja adequada ao padrão de trabalho ou que use principalmente discos provisionados.
Surpreende-me que qualquer prática recomendada tenha esperado muito da unidade de inicialização e sinalize isso com o suporte, pois mesmo o mecanismo de computação "regular" parece desencorajar isso, considerando os tamanhos de unidade de inicialização padrão.