Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Quando um pod deve ser removido na atualização do deployment?

Quando ocorre a atualização do deployment como uma nova imagem, como o kubernetes sabe que o novo pod já está rodando e funcional?

Um exemplo para facilitar o entendimento: Se o meu deployment estiver rodando um node com express na porta 3000, mas antes de subir o servidor faço algumas operações que levam 10 segundos, como o kubernetes sabe que o novo pod com a nova imagem já está respondendo na porta 3000 e pode remover o pod anterior?

Tem como configurar isso?

4 respostas

Olá Mateus, tudo bem? Nesse caso, você precisa substituir o arquivo deployment referentes aos pods em questão, assim o Kubernetes consegue identificar a alteração e remover os pods que tinham a configuração antiga e em seguida subir os novos pods com a nova configuração.

Espero ter esclarecido!

Olá, Jonilson, tudo certo e ai?

Sim, isso já estou fazendo e a atualização do deployment e está ok, a minha duvida é com relação a indisponibilidade do servidor enquanto existe a troca dos pods, no exemplo que falei, se o kubernetes já enviar as requisições para o novo pod, como ele demora 10 segundos para estar pronto, ficará inacessível, o que queria é que só fossem enviadas requisições depois de ter certeza que o pod novo está funcional.

Não falei do loadbalancer para simplificar e também creio que não seja nele onde a configuração tenha que ser feita (posso estar errado)

solução!

Certo, agora entendi sua dúvida Mateus, bem nesse caso, existe um outro recurso que não é abordado no curso, mais que é bem interessante, esse recurso é o readiness probes, com ele podemos definir um tempo para começarmos a verificar se o pod já está apto para receber requisições, e também definimos a quantidade de intervalo de tempo que o vamos fazer a verificação novamente. Você pode ler mais a respeito aqui na documentação do kubernetes. Explicando um pouco melhor:

Podemos definir um bloco da seguinte forma:

readinessProbe:
  exec:
    command:
    - cat
    - /tmp/healthy
  initialDelaySeconds: 10
  periodSeconds: 5
  successThreshold: 3

Nesse bloco, queremos executar o comando cat do arquivo /tmp/healthy dentro do nosso pod, porém já indicamos que antes de enviar o primeiro teste de verificação de prontidão queremos esperar 10 segundos (initialDelaySeconds: 10) e caso o pod ainda não consiga realizar o cat queremos realizar este teste a cada 5 segundos (periodSeconds: 5) até que o pod responda "OK", e continuamos fazendo o teste até que ele reponda uma certa quantidade de "OK", nesse exemplo determinamos que após o pod responder 3 "OK" (successThreshold: 3) podemos enviar as requisições.

Espero ter esclarecido sua dúvida!

Obrigado, era isso mesmo que precisava!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software