自定义资源定义 (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 类型 | 字段 | 说明 |
---|
postgresql | teamId | 团队标识符 |
| postgresql.version | PostgreSQL 版本 |
| numberOfInstances | 集群节点数量 |
| resources | 资源请求和限制 |
| volume | 存储配置 |
| backup | 备份配置 |
postgresbackup | cluster | 要备份的集群 |
| executeNode | 执行备份的节点 |
| status.state | 备份状态 |
postgresrestore | backupCluster | 源备份集群信息 |
| targetCluster | 目标恢复集群 |
| timestamp | 恢复时间点 |
使用场景
- 创建和管理 PostgreSQL 集群
- 配置自动备份和恢复
- 监控集群状态和操作进度
- 执行时间点恢复
- 管理集群资源分配
最佳实践
- 为生产环境配置定期备份
- 合理设置资源限制和存储大小
- 使用命名规范管理 CRD 资源
- 监控关键状态字段(state, error)
- 测试备份恢复流程
- 使用版本控制管理 CRD 配置
了解更多