[Pergunta reescrita com detalhes das descobertas.]
Estou executando um cluster do Google Container Engine com cerca de 100 contêineres que realizam cerca de 100.000 chamadas de API por dia. Alguns dos pods começaram a receber 50% de falha na resolução do DNS. Eu investiguei isso e isso só acontece para pods em nós que estão executando kube-dns
. Eu também notei que isso acontece apenas antes de um nó no sistema ser desligado por falta de memória.
Os trabalhos de segundo plano são anexados às APIs do Google e, em seguida, enviados para o S3. Quando vejo trabalhos com falha, eles falham com "Falha temporária na resolução de nomes". Isso acontece para "accounts.google.com" e "s3.amazonaws.com".
Quando eu faço login no servidor e tento me conectar a esses (ou outros hosts) com host
, nslookup
ou dig
, parece funcionar muito bem. Quando me conecto ao console rails e executo o mesmo código que está falhando nas filas, não consigo fazer com que uma falha aconteça. Howerver, como eu disse, essas falhas de fundo parecem ser intermitentes (cerca de 50% do tempo para os trabalhadores rodando em nós rodando kube-dns
).
Até agora, minha correção provisória era excluir os pods que estavam falhando e deixar o Kubernetes reagendá-los e continuar fazendo isso até que o Kubernetes os agendasse para um nó que não estivesse executando kube-dns
.
Por acaso, a remoção do nó com falha não resolveu isso. Isso apenas fez com que o kubernetes movesse tudo para outros nós e movesse o problema.