ANÚNCIO

~/questoes/devops

Para qual tipo de aplicação é mais apropriado usar StatefulSet em vez de Deployment?

Responda, confira o feedback e use o resultado para orientar sua revisão.
Aula de referência Como Migrar do Docker Compose para Kubernetes
Para fixar

StatefulSet vs Deployment: Quando Usar Cada Um

Conceito central

StatefulSet é um recurso Kubernetes projetado para aplicações que precisam manter estado, como bancos de dados. Diferentemente do Deployment, que é ideal para aplicações sem estado, o StatefulSet garante que cada Pod tenha uma identidade estável e uma ordem previsível de criação e destruição.

Por que essa resposta faz sentido

Bancos de dados e serviços stateful exigem ordenação garantida e identidade de Pod estável. O StatefulSet fornece essas garantias, permitindo que serviços como MySQL, MongoDB ou Redis mantenham consistência de dados quando replicados. O Deployment não oferece essas garantias, tornando-o inadequado para esses casos.

Armadilhas comuns

  • Confundir StatefulSet com Deployment e achar que ambos servem para o mesmo propósito. Na verdade, StatefulSet é mais especializado e pesado, ideal apenas para aplicações com estado.
  • Pensar que StatefulSet é sempre melhor ou mais poderoso. Na verdade, é apenas mais adequado para casos específicos; Deployment é a escolha padrão e mais eficiente para a maioria das aplicações.
  • Esquecer que StatefulSet requer PersistentVolume para armazenar dados entre reinicializações. Sem volumes persistentes configurados, o StatefulSet perde seu valor principal.

Entenda as alternativas

A

Aplicações sem estado devem usar Deployment, não StatefulSet. O Deployment oferece escalabilidade horizontal mais rápida e leve, enquanto StatefulSet adiciona complexidade desnecessária para casos que não precisam de identidade estável.

B

Esta é a resposta correta. Bancos de dados, caches distribuídos e sistemas de fila precisam de ordenação e identidade estável de Pod, características que StatefulSet fornece nativamente através de nomes previsíveis e volumes persistentes associados.

C

Se uma aplicação não necessita de persistência ou identidade estável, deve usar Deployment. StatefulSet é especificamente para aplicações que exigem essas características, então usar StatefulSet aqui seria sobre-engenharia.

D

Microserviços simples que comunicam por REST devem usar Deployment, que é mais leve e rápido de escalar. StatefulSet é desnecessário quando não há estado a manter entre as instâncias.

Dica prática: Ao migrar um serviço do Docker Compose para Kubernetes, comece sempre com Deployment. Apenas se o serviço for um banco de dados, cache ou sistema de fila (aplicações que mantêm estado), considere mudar para StatefulSet. Isso simplifica sua arquitetura inicial.

Revise pensando: Se você precisa escalar um serviço de API REST sem dados sensíveis, qual recurso você escolheria: Deployment ou StatefulSet? Por quê?