创建实例

简介

此功能允许用户在 Kubernetes 集群中创建和管理 PostgreSQL 数据库实例。用户可以通过配置以下内容,快速部署满足其需求的数据库实例:

  • 资源规格
  • 账户信息
  • 存储要求

前提条件

在创建 PostgreSQL 实例之前,请确保:

  1. 已配置合适的存储类。
  2. Postgres Operator 已正确安装并正在运行。
  3. 你拥有创建资源所需的权限。

版本支持

当前支持 PostgreSQL 13、14、15 和 16 版本。新部署推荐使用 16 版本。

架构选择

Postgres Operator 支持以下架构:

  • 单节点:适用于开发和测试环境
  • 主从复制:推荐用于生产环境,具备以下特性:
    • 自动故障切换
    • 高可用
    • 数据冗余

操作步骤

CLI
Web 控制台

创建单节点实例

# Example minimal HA cluster configuration
cat << EOF | kubectl create -f -
apiVersion: acid.zalan.do/v1
kind: postgresql  # Custom resource definition for PostgreSQL clusters
metadata:
  name: pg-single
  namespace: c1-midautons
spec:
  ipFamilyPrefer: ""
  teamId: ACID
  enableExporter: true
  enablePgpool2: false
  spiloPrivileged: false
  spiloRunAsGroup: 103
  spiloRunAsUser: 101
  spiloAllowPrivilegeEscalation: false
  enableReadinessProbe: true
  restrictedPsaEnabled: true
  postgresql:
    parameters:
      log_directory: /var/log/pg_log
    version: "16"
  numberOfInstances: 1
  resources:
    requests:
      cpu: "1"
      memory: 2Gi
    limits:
      cpu: "1"
      memory: 2Gi
  volume:
    size: 5Gi
    storageClass: c1-topolvmsc
EOF

创建高可用集群

cat << EOF | kubectl -n $NAMESPACE create -f -
apiVersion: acid.zalan.do/v1
kind: postgresql
metadata:
  name: pg-ha
  namespace: default
spec:
  ipFamilyPrefer: ""
  teamId: ACID
  enableExporter: true
  enablePgpool2: false
  spiloPrivileged: false
  spiloRunAsGroup: 103
  spiloRunAsUser: 101
  spiloAllowPrivilegeEscalation: false
  enableReadinessProbe: true
  restrictedPsaEnabled: true
  postgresql:
    parameters:
      log_directory: /var/log/pg_log
    version: "14"
  numberOfInstances: 3
  resources:
    requests:
      cpu: "1"
      memory: 2Gi
    limits:
      cpu: "1"
      memory: 2Gi
  volume:
    size: 50Gi
    storageClass: default
  patroni:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
EOF

创建完成后,可以使用以下命令检查实例状态:

kubectl -n $NAMESPACE get postgresql

预期输出:

NAME                            AGE
pg-ha                           21h

输出字段:

FieldDescription
NAME实例名称
AGE自创建以来的时间
NOTE
  1. 对于生产环境,请使用主从架构
  2. 在部署前,请验证你的存储类是否支持动态供给
  3. 配置适当的 资源限制
  4. 为关键数据制定定期备份操作步骤
WARNING
  • 不当的资源限制可能导致性能问题或 Pod 驱逐
  • 如果没有备份,故障期间可能会发生数据丢失