跳至内容

数据库配置

PostgreSQL 版本

与最新版本 awx-operator 捆绑在一起的 AWX 版本的默认 PostgreSQL 版本为 PostgreSQL 15。您可以在默认值 supported_pg_version 中找到给定版本的此默认值。

我们只对 PostgreSQL 的默认版本提供覆盖范围。较新版本的 PostgreSQL 可能会工作,但应仅配置为外部数据库。如果您的数据库由 awx-operator 管理(如果您没有指定 postgres_configuration_secret,则为默认值),则不应覆盖默认版本,因为这可能会在 awx-operator 尝试升级您的 postgresql pod 时导致问题。

外部 PostgreSQL 服务

要将 AWX 配置为使用外部数据库,自定义资源需要了解连接详细信息。为此,请使用这些连接详细信息创建一个 k8s 密钥,并在 CR spec 级别将密钥的名称指定为 postgres_configuration_secret

密钥应按以下格式设置

---
apiVersion: v1
kind: Secret
metadata:
  name: <resourcename>-postgres-configuration
  namespace: <target namespace>
stringData:
  host: <external ip or url resolvable by the cluster>
  port: <external port, this usually defaults to 5432>
  database: <desired database name>
  username: <username to connect as>
  password: <password to connect with>
  sslmode: prefer
  target_session_attrs: read-write
  type: unmanaged
type: Opaque

警告

请确保变量 password 的值应包含单引号或双引号('")或反斜杠(\),以避免在部署、备份恢复期间出现任何问题。

提示

可以设置特定的用户名、密码、端口或数据库,但仍然可以让数据库由运营商管理。在这种情况下,在创建 postgres-configuration 密钥时,应添加 type: managed 字段。

注意

变量 sslmode 仅对external 数据库有效。允许的值为:preferdisableallowrequireverify-caverify-full

变量 target_session_attrs 仅对clustered external 数据库有用。允许的值为:any(默认)、read-writeread-onlyprimarystandbyprefer-standby,其中只有 read-writeprimary 在 AWX 使用中真正有意义,因为您希望连接到提供写入支持的数据库节点。

创建密钥后,您可以在您的规范中指定它

---
spec:
  ...
  postgres_configuration_secret: <name-of-your-secret>

从旧的 AWX 实例迁移数据

有关如何从旧版 AWX 迁移的说明,请参阅 migration.md

托管 PostgreSQL 服务

如果您无法访问外部 PostgreSQL 服务,则 AWX 运营商可以为您在 AWX 实例旁边部署一个。

以下变量可用于托管 PostgreSQL 服务

名称 描述 默认值
postgres_image 要拉取的镜像路径 quay.io/sclorg/postgresql-15-c9s
postgres_image_version 要拉取的镜像版本 latest
postgres_resource_requirements PostgreSQL 容器(和 initContainer)资源需求 requests: {cpu: 10m, memory: 64Mi}
postgres_storage_requirements PostgreSQL 容器存储需求 requests: {storage: 8Gi}
postgres_storage_class PostgreSQL PV 存储类 空字符串
postgres_priority_class 用于 PostgreSQL Pod 的优先级类 空字符串

自定义示例可能为

---
spec:
  ...
  postgres_resource_requirements:
    requests:
      cpu: 500m
      memory: 2Gi
    limits:
      cpu: '1'
      memory: 4Gi
  postgres_storage_requirements:
    requests:
      storage: 8Gi
    limits:
      storage: 50Gi
  postgres_storage_class: fast-ssd
  postgres_extra_args:
    - '-c'
    - 'max_connections=1000'

注意

如果未定义 postgres_storage_class,则 PostgreSQL 将将其数据存储在使用集群默认存储类的卷上。

关于覆盖 postgres 镜像的说明

我们建议您使用默认的 sclorg 镜像。如果您来自使用来自 dockerhub 的旧 postgres 镜像(postgres:13)的部署,从 awx-operator 版本 2.12.2 及以下版本升级到 2.15.0+ 将处理将您的数据迁移到新的 postgresql 镜像(postgresql-15-c9s)。

您无法再配置自定义 postgres_data_path,因为它在 quay.io/sclorg/postgresql-15-c9s 镜像中是硬编码的。

如果您覆盖 postgres 镜像以使用自定义 postgres 镜像(例如 postgres:15),则默认数据目录路径可能不同。这些镜像不能互换使用。

初始化 Postgres 数据卷

当使用 hostPath 支持的 PVC 和其他一些存储类(如 longhorn 存储)时,postgres 数据目录需要 postgres pod 中的用户(UID 26)能够访问。

要使用正确的权限初始化此目录,请配置以下设置,该设置将使用 init 容器在 postgres 卷中设置权限。

spec:
  postgres_data_volume_init: true

如果您需要修改 init 容器命令,下面有一个示例。

postgres_init_container_commands: |
  chown 26:0 /var/lib/pgsql/data
  chmod 700 /var/lib/pgsql/data