自定义资源定义 (CRD)

什么是 CRD

CRD(Custom Resource Definition)是 Kubernetes 的一种扩展机制,允许用户定义自己的资源类型。PostgreSQL Operator 提供了多个 CRD 来管理 PostgreSQL 集群及其相关操作。

主要 CRD 类型

1. PostgreSQL 集群 (postgresql)

管理 PostgreSQL 集群的核心 CRD,包含集群配置、资源分配、备份等设置。

apiVersion: acid.zalan.do/v1
kind: postgresql
metadata:
  name: pg-cluster
spec:
  teamId: ACID
  postgresql:
    version: "14"
    parameters:  # PostgreSQL 配置参数
      shared_buffers: "1GB"
      work_mem: "64MB"
  numberOfInstances: 3
  resources:
    requests:
      cpu: "1"
      memory: 2Gi
  volume:
    size: 50Gi
    storageClass: standard
  backup:
    schedule: "0 0 * * *"  # 每日备份
    retainDay: 7           # 保留7天
    storage:
      bucket: "my-backups"
      name: "backup-storage"
      namespace: "default"

2. PostgreSQL 备份 (postgresbackup)

管理 PostgreSQL 集群的备份操作。

apiVersion: middleware.alauda.io/v1
kind: PostgresBackup
metadata:
  name: pg-backup
spec:
  cluster: pg-cluster  # 要备份的集群
  executeNode: node-1   # 执行备份的节点
status:
  state: Succeeded      # 备份状态
  backupName: backup-20230324
  startTime: "2023-03-24T00:00:00Z"
  finishTime: "2023-03-24T00:30:00Z"

3. PostgreSQL 恢复 (postgresrestore)

管理 PostgreSQL 集群的恢复操作。

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"  # 恢复到指定时间点
status:
  state: InProgress
  error: ""  # 错误信息

关键字段说明

CRD 类型字段说明
postgresqlteamId团队标识符
postgresql.versionPostgreSQL 版本
numberOfInstances集群节点数量
resources资源请求和限制
volume存储配置
backup备份配置
postgresbackupcluster要备份的集群
executeNode执行备份的节点
status.state备份状态
postgresrestorebackupCluster源备份集群信息
targetCluster目标恢复集群
timestamp恢复时间点

使用场景

  • 创建和管理 PostgreSQL 集群
  • 配置自动备份和恢复
  • 监控集群状态和操作进度
  • 执行时间点恢复
  • 管理集群资源分配

最佳实践

  1. 为生产环境配置定期备份
  2. 合理设置资源限制和存储大小
  3. 使用命名规范管理 CRD 资源
  4. 监控关键状态字段(state, error)
  5. 测试备份恢复流程
  6. 使用版本控制管理 CRD 配置

了解更多