Pular para o conteúdo

CloudNativePG

O CloudNativePG (CNPG) é o operador Kubernetes que cria e gerencia todos os clusters PostgreSQL da Serigy. O agente o instala no cluster rke-app e usa um padrão de manifesto único para todos os bancos.

O operador roda no namespace cnpg-system. Ele observa objetos Cluster e materializa os pods PostgreSQL, Services, Secrets e jobs de backup.

flowchart LR
    CNPG{{Operador CNPG<br/>cnpg-system}}
    CR["Cluster (CR)"] -->|observado por| CNPG
    CNPG -->|cria| Pods["Pods PostgreSQL<br/>(no rke-db-00)"]
    CNPG -->|cria| Svc["Service -rw / -ro"]
    CNPG -->|agenda| Bkp["Backups Wal-G → R2"]

Todo Cluster carrega o bloco de affinity + tolerations para ser fixado no rke-db-00, a StorageClass NVMe e a configuração de backup no R2.

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: nextcloud-db
namespace: nextcloud
spec:
instances: 1
storage:
storageClass: nvme-local # disco de alta performance no nó de banco
size: 50Gi
# Fixa o banco no nó dedicado (ver Scheduling)
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-role.kubernetes.io/database
operator: In
values: ["true"]
tolerations:
- key: "dedicated"
operator: "Equal"
value: "database"
effect: "NoSchedule"
# Backup contínuo via Wal-G para o Cloudflare R2 (ver Backup & DR)
backup:
barmanObjectStore:
destinationPath: s3://serigy-backups/nextcloud
endpointURL: https://<accountid>.r2.cloudflarestorage.com
s3Credentials:
accessKeyId:
name: r2-credentials
key: ACCESS_KEY_ID
secretAccessKey:
name: r2-credentials
key: SECRET_ACCESS_KEY
retentionPolicy: "30d"

O CNPG expõe dois Services:

ServiceUso
<cluster>-rwLeitura/escrita (primário)
<cluster>-roSomente leitura (réplicas)

A aplicação stateless se conecta pelo -rw via ClusterIP interno — ver Deploy em duas etapas.