Temos um cluster de produção do Kubernetes que tem sofrido várias interrupções de aproximadamente 1 a 5 minutos semirregularmente. Estamos tentando solucionar o problema, mas nos deparamos com várias lacunas de informação/conhecimento e gostaríamos de receber ajuda.
Todos os nossos códigos e softwares personalizados estão altamente disponíveis e implantados em pelo menos duas réplicas, e sua alta disponibilidade foi testada sob carga.
O cluster Kuberneteséexecutando instâncias spot, e quando as instâncias spot contêm apenas nossos pods, as coisas continuam funcionando perfeitamente, sem interrupções. No entanto, o que notamos é que quando os nós que contêm eles são desativados kube-dns
, tendemos a sofrer - mas nem sempre - essas interrupções.
Estamos executando a versão 1.25 no GKE e, portanto, estamos restritos ao uso do kube-dns
. Estamos executando 1 kube-dns
réplica para cada 3 nós (normalmente temos 9 nós em execução),eespecificou um mínimo de 3 kube-dns
nós por meio do kube-dns-autoscaler
configmap. Também estamos executando o Istio 1.17.1 por vários motivos, masnãopara mTLS. Também temos um PDB kube-dns
que permite apenas 1 interrupção.
O que vemos é que a maioria dos nossos serviços começará a expirar em suas solicitações entre si (os istio-proxy
logs de acesso tendem a registrar um 504
UT
erro), e alguns dos serviços realmente registrarão um EAI_AGAIN
erro, o que implica que o tempo limite do DNS expirou. Também temos um aplicativo separado em execução que executa ping em uma combinação de nomes de serviços, bem como no endereço IP do serviço diretamente (começando a fazer isso para fins de solução de problemas), e podemos ver que durante os momentos em que os EAI_AGAIN
erros estão acontecendo, o Os pings de endereço IP foram bem-sucedidos, mas as solicitações de nome de serviço não - apontando ainda que kube-dns
estão relacionadas ao problema.
Também verificamos esses pings de serviço versus IP em pods que têm ou não um istio-proxy
sidecar e podemos ver o mesmo comportamento, o que implica que o problema énãodevido a istio
.
A única coisa que estamos começando a pensar em fazer é implementar o NodeLocal DNSCache
para que todos os nós tenham um cache DNS e - possam - resolver quaisquer kube-dns
problemas intermitentes. No entanto, não temos certeza se isso vai ajudar e tememos que isso esteja mascarando um problema maior.
Também podemos ver esse mesmo problema em execução em nosso ambiente de não produção, mas ainda não conseguimos reproduzi-lo em qualquer lugar. Simplesmente acontece. Mesmo reiniciar/excluir nós não parece fazer com que isso aconteça.
Também não consigo aumentar o nível de registro kube-dns
porque o GKE bloqueou o recurso de implantação e reverteu os níveis de registro...
Esperamos alguns conselhos sobre como solucionar problemas e resolver isso. Obrigado