外部 PostgreSQL 数据库

本文档假设您已经拥有自己的 PostgreSQL 数据库。

如果您没有,请考虑使用云提供的解决方案,例如 AWS RDS PostgreSQLGCP Cloud SQL。对于内部自有部署或部署到 VM,请考虑我们的 Omnibus GitLab 安装包

外部数据库要求

要使用带有 gitlab chart 的外部数据库,有一些先决条件。

  1. 需要 PostgreSQL 12.x 或更新版本
  2. 要使用的空数据库,默认命名为:gitlabhq_production。 请参阅下文如何更改默认名称。
  3. pg_trgmbtree_gist 扩展必须可用。如果不存在,GitLab 将尝试加载这两个扩展。如果没有向 GitLab 提供具有超级用户标志的帐户,请确保在继续安装数据库之前加载此扩展。
  4. 对上述数据库具有完全访问权限的用户如我们的外部数据库文档中所述
  5. 一个 Kubernetes Secret 和上面用户的密码。
  6. 确保可以从集群访问数据库。确保防火墙策略正确以允许流量通过。
notepg_trgmbtree_gist 扩展需要添加到 GitLab 数据库中。 这意味着 CREATE EXTENSION 命令应该在连接到 GitLab 数据库(默认名为 gitlabhq_production)而不是 PostgreSQL 默认数据库时执行。

如果打算使用 PostgreSQL 作为负载均衡集群,使用 Kubernetes DNS 进行服务发现,那么在安装 bitnami/postgresql chart 时,建议使用 --set slave.service.clusterIP=None 安装 chart。 这会将 PostgreSQL 辅助服务正确设置为 headless 服务,允许为每个次要实例创建 DNS A 记录。请检查文件 examples/database/values-loadbalancing-discover.yaml 以获取使用 Kubernetes DNS 进行服务发现的示例。

配置 gitlab 使用外部数据库

您需要设置以下参数:

  • postgresql.install:设置为 false 以禁用嵌入式数据库。
  • global.psql.host:设置为外部数据库的主机名,可以是域名或IP地址。
  • global.psql.password.secret包含 gitlab 用户的数据库密码的 secret 的名称
  • global.psql.password.key:包含密码的 secret 中的键。

如果您不使用默认值,可以进一步自定义以下项目:

  • global.psql.port:数据库可用的端口,默认为 5432
  • global.psql.database:数据库的名称。
  • global.psql.username:有权访问数据库的用户。

如果您使用到数据库的双向 TLS 连接:

  • global.psql.ssl.secret:包含客户端证书、密钥和证书颁发机构的机密。
  • global.psql.ssl.serverCA:secret 中引用证书颁发机构 (CA) 的键。
  • global.psql.ssl.clientCertificate:secret 中引用客户端证书密钥的键。
  • global.psql.ssl.clientKey:secret 中的客户端。

例如,在部署时通过 Helm 的 --set 标志传递这些值:

helm install gitlab gitlab/gitlab
  --set postgresql.install=false
  --set global.psql.host=psql.example
  --set global.psql.password.secret=gitlab-postgresql-password
  --set global.psql.password.key=postgres-password