Junior
Mantém-se algum estado ao fazer o deployment?
sobes.tech IA
Resposta da IA
Ao implementar um Deployment no Kubernetes, o estado não é guardado dentro do próprio controlador Deployment. O Deployment gere um ReplicaSet, que por sua vez gere os Pods. Os Pods são por natureza efémeros e podem ser reiniciados ou eliminados.
A preservação do estado para aplicações implementadas com Deployment geralmente é realizada através de outros mecanismos:
- Persistent Volumes (PV) e Persistent Volume Claims (PVC): Usados para armazenar dados que devem permanecer acessíveis mesmo após a eliminação ou reinício dos Pods. O PV fornece armazenamento, e o PVC faz a solicitação.
- ConfigMaps e Secrets: Usados para armazenar dados de configuração e informações sensíveis (senhas, chaves), separados da imagem do contêiner.
- StatefulSets: Controlador especificamente desenvolvido para gerir aplicações com estado. Os StatefulSets garantem uma identificação de rede estável e armazenamento persistente para cada Pod, bem como uma implementação e escalonamento ordenados.
Exemplo de pedido PVC num manifesto de Pod:
# Definição de um Pod que usa PVC
apiVersion: v1
kind: Pod
metadata:
name: minha-aplicacao-com-estado
spec:
containers:
- name: meu-conteiner
image: minha-imagem
volumeMounts:
- name: volume-de-dados
mountPath: /dados
volumes:
- name: volume-de-dados
persistentVolumeClaim:
claimName: minha-pvc
Exemplo de definição de StatefulSet:
# Definição de StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: meu-statefulset
spec:
serviceName: "meu-servico"
replicas: 3
selector:
matchLabels:
app: minha-aplicacao-com-estado
template:
metadata:
labels:
app: minha-aplicacao-com-estado
spec:
containers:
- name: meu-conteiner
image: minha-imagem
volumeMounts:
- name: meu-volume
mountPath: /dados
volumeClaimTemplates:
- metadata:
name: meu-volume
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
Portanto, o próprio Deployment não armazena estado. A sua tarefa é garantir a quantidade necessária de réplicas de Pods sem guardar a sua identidade ou estado entre reinícios. Para aplicações com estado, usam-se StatefulSets, PV/PVC, ConfigMaps e Secrets.