创建实例

目录

介绍

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

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

前提条件

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

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

版本支持

当前支持 PostgreSQL 版本 11、12、14,推荐使用最新的稳定版本。

架构选择

Postgres Operator 支持以下架构:

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

操作步骤

CLI
Web Console

创建单节点实例

# 示例最小 HA 集群配置
cat << EOF | kubectl create -f -
apiVersion: acid.zalan.do/v1
kind: postgresql  # PostgreSQL 集群的自定义资源定义
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
  postgresql:
    parameters:
      log_directory: /var/log/pg_log
    version: "14"
  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
  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

输出字段说明:

字段说明
NAME实例名称
AGE创建时间长度
NOTE
  1. 生产环境建议使用主从架构
  2. 部署前请确认存储类支持动态供应
  3. 配置合适的资源限制
  4. 对关键数据实施定期备份操作
WARNING
  • 资源限制设置不当可能导致性能问题或 Pod 被驱逐
  • 未备份时,故障可能导致数据丢失