Custom Resource Definition (CRD)

What is CRD

CRD (Custom Resource Definition) is an extension mechanism in Kubernetes that allows users to define their own resource types. The PostgreSQL Operator provides multiple CRDs to manage PostgreSQL clusters and related operations.

Main CRD Types

1. PostgreSQL Cluster (postgresql)

The core CRD for managing PostgreSQL clusters, containing cluster configuration, resource allocation, backup settings etc.

apiVersion: acid.zalan.do/v1
kind: postgresql
metadata:
  name: pg-cluster
spec:
  teamId: ACID
  postgresql:
    version: "14"
    parameters:  # PostgreSQL configuration parameters
      shared_buffers: "1GB"
      work_mem: "64MB"
  numberOfInstances: 3
  resources:
    requests:
      cpu: "1"
      memory: 2Gi
  volume:
    size: 50Gi
    storageClass: standard
  backup:
    schedule: "0 0 * * *"  # Daily backup
    retainDay: 7           # Retain for 7 days
    storage:
      bucket: "my-backups"
      name: "backup-storage"
      namespace: "default"

2. PostgreSQL Backup (postgresbackup)

Manages backup operations for PostgreSQL clusters.

apiVersion: middleware.alauda.io/v1
kind: PostgresBackup
metadata:
  name: pg-backup
spec:
  cluster: pg-cluster  # Cluster to backup
  executeNode: node-1   # Node to execute backup
status:
  state: Succeeded      # Backup state
  backupName: backup-20230324
  startTime: "2023-03-24T00:00:00Z"
  finishTime: "2023-03-24T00:30:00Z"

3. PostgreSQL Restore (postgresrestore)

Manages restore operations for PostgreSQL clusters.

apiVersion: middleware.alauda.io/v1
kind: PostgresRestore
metadata:
  name: pg-restore
spec:
  backupCluster:
    name: pg-cluster
    storage:
      bucket: "my-backups"
      name: "backup-storage"
      namespace: "default"
  targetCluster: pg-new-cluster
  timestamp: "2023-03-24T00:00:00Z"  # Restore to specific point in time
status:
  state: InProgress
  error: ""  # Error message

Key Fields

CRD TypeFieldDescription
postgresqlteamIdTeam identifier
postgresql.versionPostgreSQL version
numberOfInstancesNumber of cluster nodes
resourcesResource requests and limits
volumeStorage configuration
backupBackup configuration
postgresbackupclusterCluster to backup
executeNodeNode to execute backup
status.stateBackup state
postgresrestorebackupClusterSource backup cluster info
targetClusterTarget restore cluster
timestampPoint-in-time to restore

Use Cases

  • Create and manage PostgreSQL clusters
  • Configure automated backups and restores
  • Monitor cluster state and operation progress
  • Perform point-in-time recovery
  • Manage cluster resource allocation

Best Practices

  1. Configure regular backups for production environments
  2. Set reasonable resource limits and storage sizes
  3. Use naming conventions for CRD resources
  4. Monitor key status fields (state, error)
  5. Test backup and restore procedures
  6. Use version control for CRD configurations

Learn More