Tenho pesquisado muito o Kubernetes e estou gostando muito do que vejo! Uma coisa que não consigo ter uma ideia clara é quais são as distinções exatas entre os recursos Deployment e StatefulSet e em quais cenários você usaria cada um (ou é geralmente preferido um em relação ao outro).
Qualquer experiência que as pessoas possam compartilhar seria incrível!
fonte
deployment
configuração com uma especificação simples para definir 1 por nó (daemonset), réplicas ou ordenação com estado.Implantação - você especifica um PersistentVolumeClaim que é compartilhado por todas as réplicas de pod. Em outras palavras, volume compartilhado.
O armazenamento de apoio obviamente deve ter ReadWriteMany ou ReadOnlyMany accessMode se você tiver mais de um pod de réplica.
StatefulSet - você especifica um volumeClaimTemplates para que cada pod de réplica obtenha um PersistentVolumeClaim exclusivo associado a ele. Em outras palavras, nenhum volume compartilhado.
Aqui, o armazenamento de apoio pode ter accessMode ReadWriteOnce .
StatefulSet é útil para executar coisas em cluster, por exemplo, cluster Hadoop, cluster MySQL, onde cada nó tem seu próprio armazenamento.
fonte
TL; DR
A implantação é um recurso para implantar um aplicativo sem estado, se estiver usando um PVC, todas as réplicas estarão usando o mesmo volume e nenhuma terá seu próprio estado.
Statefulsets é usado para aplicativos com estado, cada réplica do pod terá seu próprio estado e usará seu próprio volume.
DaemonSet é um controlador que garante que o pod seja executado em todos os nós do cluster. Se um nó for adicionado / removido de um cluster, o DaemonSet adiciona / exclui automaticamente o pod.
Eu escrevi sobre as diferenças detalhadas entre implantações, StatefulSets e Daemonsets e como implantar um aplicativo de amostra usando estes recursos K8s: implantações vs StatefulSets vs DaemonSets .
fonte
StatefulSet
Use 'StatefulSet' com aplicativos distribuídos com estado, que exigem que cada nó tenha um estado persistente . StatefulSet fornece a capacidade de configurar um número arbitrário de nós, para um aplicativo / componente com estado, por meio de uma configuração (réplicas = N).
Existem dois tipos de aplicativos distribuídos com estado: Master-Master e Master-Slave. Todos os nós em uma configuração Master-Master e nós Slave em uma configuração Master-Slave podem fazer uso de um StatefulSet.
Exemplos:
Master-Slave -> Datanodes (slaves) em um cluster Hadoop
Master-Master -> Nós de banco de dados (master-master) em um cluster Cassandra
Cada pod (réplica / nó) em um StatefulSet tem uma identidade de rede única e estável. Por exemplo, em um Cassandra StatefulSet com nome como 'cassandra' e número de nós de réplica como N, cada pod (nó) do Cassandra tem:
Consulte: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
Desdobramento, desenvolvimento
A 'implantação', por outro lado, é adequada para aplicativos / serviços sem estado em que os nós não requerem nenhuma identidade especial. Um balanceador de carga pode alcançar qualquer nó que ele escolher. Todos os nós são iguais. Uma implantação é útil para criar qualquer número de nós arbitrários, por meio de uma configuração (réplicas = N).
fonte
A diferença entre StatefulSet e implantação
StatefulSet é equivalente a uma implantação especial. Cada pod no StatefulSet tem um identificador de rede único e estável que pode ser usado para descobrir outros membros no cluster. Se o nome de StatefulSet for Kafka, o primeiro pod será chamado de Kafka-0, o segundo Kafka-1 e assim por diante; a sequência de início e parada da cópia do pod controlada pelo StatefulSet é controlada. Quando o enésimo pod é operado, os primeiros N-1 pods já estão em execução e prontos. Bom estado; o pod no StatefulSet usa um volume de armazenamento persistente estável, implementado por PV ou PVC. Ao excluir o pod, o volume de armazenamento associado ao StatefulSet não é excluído por padrão (para segurança de dados); o StatefulSet está vinculado ao volume do PV. Usado para armazenar dados de estado do pod e também usado em conjunto com serviços sem comando, declarado pertencer a esse serviço sem comando;
fonte