Depois de algumas experiências, descobri que não é relacionado ao GKE ou ao GCP. E nem sequer está relacionado à imagem COS.
Na verdade, é como o kernel Linux lida com o OOM. O OOM killer começa tarde demais e está atuando em um ambiente altamente limitado à memória. Ele decide qual processo será eliminado usando os processos ' oom_score
.
Ao executar o Kubernetes em um host, há muitos processos com alto valor oom_score_adjust
(eles são pods sem limites de memória em sua especificação ). Se seu pod de comedor de RAM tiver limites definidos, seu oom_score
resultante provavelmente será menor do que muitos outros processos.
Neste caso, o killer da OOM irá primeiro matar aqueles muitos processos com o maior oom_score
antes que ele tenha chance de matar o processo realmente ganancioso. Eu não sei porque, mas nessas situações o Linux congela totalmente.
Como solução alternativa, encontrei esta ferramenta . Instalá-lo como DaemonSet resolve o problema. Mata processos gananciosos sem piedade.