Etepa 5 -Configurar Volumes com Longhorn
Ótima escolha! 🎯 Longhorn é uma solução de armazenamento distribuído altamente integrada ao Kubernetes, ideal para workloads stateful como o PostgreSQL. Ele fornece:
- Replicação de volumes (alta disponibilidade)
- Snapshots e backups
- Provisionamento dinâmico
- Interface Web para gestão
- Fácil instalação via Helm ou YAML
🚀 Passo a passo para instalar o Longhorn e usar com PostgreSQL
✅ Pré-requisitos:
- Cluster Kubernetes (bare-metal ou VM, mínimo 3 nodes recomendados)
- Todos os nodes devem ter:
- Um disco disponível para Longhorn (pode ser um disco separado ou uma pasta montada via NFS/local)
- Docker/containerd funcionando
- Acesso entre si na rede (não pode usar nodes com storage separados sem rede privada entre eles)
1. Instalar Longhorn via Helm
📦 Adicione o repositório Helm:
helm repo add longhorn https://charts.longhorn.io helm repo update
🧱 Instale o Longhorn no namespace longhorn-system
:
kubectl create namespace longhorn-system helm install longhorn longhorn/longhorn \ --namespace longhorn-system
Isso instalará o Longhorn Manager, UI, Engine e outros componentes.
2. Acessar a interface do Longhorn (opcional)
Você pode usar um port-forward:
kubectl -n longhorn-system port-forward service/longhorn-frontend 8080:80
Depois acesse: http://localhost:8080
Ou expor via Ingress/LoadBalancer, se preferir.
3. Verificar StorageClass criado pelo Longhorn
kubectl get storageclass
Você verá algo como:
longhorn (default)
Se não for default, você pode definir:
kubectl patch storageclass longhorn -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
4. Criar PVC e PostgreSQL usando o Longhorn
🧾 PVC para PostgreSQL:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: postgres-pvc spec: accessModes: - ReadWriteOnce storageClassName: longhorn resources: requests: storage: 10Gi
🐘 StatefulSet PostgreSQL:
apiVersion: apps/v1 kind: StatefulSet metadata: name: postgres spec: selector: matchLabels: app: postgres serviceName: "postgres" replicas: 1 template: metadata: labels: app: postgres spec: containers: - name: postgres image: postgres:15 ports: - containerPort: 5432 name: postgres env: - name: POSTGRES_USER value: user - name: POSTGRES_PASSWORD value: password - name: POSTGRES_DB value: mydb volumeMounts: - name: postgres-storage mountPath: /var/lib/postgresql/data volumeClaimTemplates: - metadata: name: postgres-storage spec: accessModes: ["ReadWriteOnce"] storageClassName: longhorn resources: requests: storage: 10Gi
5. Verificar que está tudo funcionando:
kubectl get pods kubectl get pvc kubectl get volumes.longhorn.io -n longhorn-system