Etepa 5 -Configurar Volumes com Longhorn Estimated reading: 3 minutes 94 views Ó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 updatehelm 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-systemkubectl 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:80kubectl -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 storageclasskubectl get storageclass Você verá algo como: longhorn (default)longhorn (default) Se não for default, você pode definir: kubectl patch storageclass longhorn -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'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: 10GiapiVersion: 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: 10GiapiVersion: 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<br>kubectl get pvc<br>kubectl get volumes.longhorn.io -n longhorn-systemkubectl get pods<br>kubectl get pvc<br>kubectl get volumes.longhorn.io -n longhorn-system