Etepa 5 -Configurar Volumes com Longhorn Estimated reading: 3 minutes 262 views Contributors Ó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 backupsProvisionamento dinâmicoInterface Web para gestãoFácil instalação via Helm ou YAMLPasso a passo para instalar o Longhorn e usar com PostgreSQLPré-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 funcionandoAcesso entre si na rede (não pode usar nodes com storage separados sem rede privada entre eles)1. Instalar Longhorn via HelmAdicione o repositório Helm:helm repo add longhorn https://charts.longhorn.io helm repo updatehelm repo add longhorn https://charts.longhorn.io helm repo updateInstale 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-systemIsso 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:80Depois acesse: http://localhost:8080Ou expor via Ingress/LoadBalancer, se preferir.3. Verificar StorageClass criado pelo Longhornkubectl get storageclasskubectl get storageclassVocê 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 LonghornPVC 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: 10GiStatefulSet 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: 10Gi5. 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