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

StatefulSet vs Deployment na prática

O exemplo da aula usa StatefulSet no sistema-noticias, mas na prática não mudou absolutamente nada e se eu mantivesse o Deployment do sistema-noticias e configurasse os volumes como foi feito no último vídeo, o resultado seria exatamente o mesmo. Então na prática eu não entendi a diferença entre ambos.

Eu entendi que StatefulSet mantém uma suposta identidade dos pods e garante uma ordem ao criar e remover os pods, mas como isso seria útil?

Nessa outra pergunta do fórum (não solucionada) há uma indicação de vídeo onde o exemplo de main-replica em um banco relacional é utilizado, mas na prática, continuei não entendendo como aplicar. As configurações do banco principal é diferente das réplicas, então eu provavelmente teria um Deployment para o DB principal com seu volume configurado e outro deployment com minhas réplicas de leitura.

2 respostas
solução!

Oi, Vinicius.

Beleza?

Em resumo, StatefulSet é uma abstração do Kubernetes para gerenciar aplicações stateful (ou seja, que mantêm estado), enquanto Deployment é mais adequado para aplicações stateless (sem estado).

A diferença principal entre eles é que, com StatefulSet, cada réplica é garantida a ter um identificador único e estável, que é mantido mesmo se o pod for recriado. Além disso, os pods são criados e deletados em uma ordem específica. Isso é útil para sistemas que precisam de uma ordem específica para inicialização ou desligamento, ou que utilizam o identificador do pod para distinguir entre si.

No exemplo da aula, o StatefulSet foi utilizado para garantir que, mesmo que o pod seja recriado, a conexão com o volume persistente seja mantida e os dados não sejam perdidos. Se nós usássemos um Deployment em vez disso, não teríamos essa garantia.

Em relação ao exemplo de banco de dados com main-replica, a ideia é que você pode usar StatefulSet para garantir que o banco principal e suas réplicas tenham identificadores únicos e estáveis. Isso pode ser útil, por exemplo, se você quiser garantir que uma réplica específica seja promovida a principal se o banco principal falhar.

Ficou bem teórico mas espero ter ajudado de alguma forma. Valeu.

No exemplo da aula, o StatefulSet foi utilizado para garantir que, mesmo que o pod seja recriado, a conexão com o volume persistente seja mantida e os dados não sejam perdidos. Se nós usássemos um Deployment em vez disso, não teríamos essa garantia.

Na verdade temos sim a conexão com o volume persistente sem nenhum problema. Caso o pod "morra" e um novo seja criado, o volume não é afetado e o próximo pod terá acesso aos mesmos dados. Inclusive é exatamente para isso que servem volumes persistentes. Inclusive localmente eu usei Deployment ao invés de StatefulSet e tudo funcionou perfeitamente.

Isso pode ser útil, por exemplo, se você quiser garantir que uma réplica específica seja promovida a principal se o banco principal falhar.

Ok, aqui parece ser um caso de útil real. Eu preciso ver como faria na prática, mas entendi a ideia desse exemplo.

Obrigado, Renan.