配置 Redis、PostgreSQL 和账户凭证

本文档介绍如何配置 GitLab 实例所需的凭证。

先决条件

  • 本文档适用于平台提供的 GitLab 17 及更高版本。它基于 Operator 等技术与平台解耦。

Redis 凭证

要求

GitLab 对 Redis 的部署模式和版本有以下要求:

  • 部署模式支持 Standalone 和 Sentinel 两种模式,但不支持 Redis Cluster 模式
  • Redis 版本必须为 7.2 或更高版本

凭证格式

在计划部署 GitLab 实例的命名空间中创建一个 Secret,选择 Opaque 类型,并在配置中添加和填写以下字段:

字段描述架构示例值
hostRedis 连接地址。确保 GitLab 服务可以连接到该地址。standalone192.168.1.1
portRedis 连接端口。确保 GitLab 服务可以连接到该端口。standalone6379
passwordRedis 实例账户密码。启用 Redis 身份验证时必填。standalone,sentinelpassword111
addressSentinel 节点连接地址。sentinel192.168.1.1:26379,192.168.1.2:26379,192.168.1.3:26379
masterNamesentinel.conf 中由 Sentinel 监控的实例组名称。sentinelmymaster
sentinelPasswordSentinel 实例的 Sentinel 密码。启用 Sentinel 身份验证时必填。sentinelpassword111
WARNING
  1. 同时存在 sentinel 和 standalone 配置时,将优先使用 sentinel 配置。
  2. 使用高可用模板进行部署时,如果配置了 standalone Redis,则用户需要负责确保 Redis 实例的高可用性。

Standalone 示例

apiVersion: v1
data:
  host: <base64 encode host>
  password: <base64 encode password>
  port: <base64 encode port>
kind: Secret
metadata:
  name: gitlab-redis
  namespace: <ns-of-gitlab-instance>
type: Opaque

Sentinel 示例

apiVersion: v1
data:
  password: <base64 encode password>
  address: <base64 encode address>
  masterName: <base64 encode masterName>
  sentinelPassword: <base64 encode sentinelPassword>
kind: Secret
metadata:
  name: gitlab-redis
  namespace: <ns-of-gitlab-instance>
type: Opaque

更新凭证

如果要在部署 GitLab 实例后修改 Redis 连接信息,需要直接更新 GitLab 实例资源,而不是修改凭证内容。具体操作请参阅配置 Redis 访问凭证。

使用 Alauda Cache Service for Redis OSS

Redis 服务可以通过 Alauda Cache Service for Redis OSS 提供,请注意以下重要要求:

  • 选择 Redis 7.2 或更高版本
  • 架构类型选择 sentinel 模式
  • 参数模板选择 RDB 持久化模板,例如 system-rdb-redis-7.2-sentinel
  • 启用数据持久化,存储配额不低于 2G
  • 在多网卡场景下,Redis sentinel 将选择节点的默认 IP 来初始化每个 Redis 节点的访问地址,因此不支持通过非默认 IP + 暴露端口访问节点。在这种情况下,建议使用 LoadBalancer 访问方式创建 Redis 实例。更多详情请参阅 Alauda Cache Service for Redis OSS 功能说明文档。

创建 Redis 实例时,系统会自动生成包含连接信息的 Secret,可直接用于部署 GitLab。可以使用标签 middleware.instance/type: Redis 筛选此 Secret 资源。

kubectl get secret -n <ns-of-redis-instance> -l middleware.instance/type=Redis
INFO

如果 Redis 实例和 GitLab 实例不在同一个命名空间中,需要将 Secret 资源复制到 GitLab 实例所在的命名空间。

有关更多 Redis 部署参数和高可用部署要求,请参阅 Redis Deployment Documentation。

使用 Alauda Cache Service for Redis OSS

Redis 服务可以由 Alauda Cache Service for Redis OSS 提供。在某些特殊场景下,需要注意一些限制。

  • 在多网卡场景下,Redis sentinel 将选择节点的默认 IP 来初始化每个 Redis 节点的访问地址,因此不支持通过节点的非默认 IP + 暴露端口访问节点。在这种情况下,建议使用 LoadBalancer 访问方式创建 Redis 实例。更多详情请参阅 Alauda Cache Service for Redis OSS 功能说明文档。

PostgreSQL 凭证

要求

GitLab 对 PostgreSQL 版本有以下要求:

GitLab 版本支持的 PostgreSQL 版本
17.z14、16
18.z16、17
Info

将 GitLab 升级到新版本时,需要升级 PostgreSQL 版本,以满足新 GitLab 版本的要求。

凭证格式

在计划部署 GitLab 实例的命名空间中创建一个 Secret,选择 Opaque 类型,并在配置中添加和填写以下字段:

字段描述示例值
host数据库连接地址。确保 GitLab 服务可以连接到此数据库地址。192.168.1.1
port数据库连接端口。确保 GitLab 服务可以连接到此数据库端口。5432
username数据库账户用户名gitlab
password数据库账户密码password111
database数据库名称。此数据库必须已存在且为空。可以使用命令 create database <database name> 创建数据库gitlab_db
sslmode是否为数据库连接启用 SSL。可选值:
- enable:启用 SSL 连接
- disable:禁用 SSL 连接,更多信息请参阅 sslmode
enable

YAML 示例:

apiVersion: v1
data:
  database: <base64 encode database name>
  host: <base64 encode host>
  password: <base64 encode password>
  port: <base64 encode port>
  username: <base64 encode username>
  sslmode: <base64 encode sslmode>
kind: Secret
metadata:
  name: gitlab-pg
  namespace: <ns-of-gitlab-instance>
type: Opaque

如何在 PG 实例上创建数据库

使用 psql CLI 连接到 PG 实例,并执行以下命令创建数据库:

create database <database name>;

为 gitaly 集群创建独立数据库

在高可用模式下,需要将 gitaly 组件配置为集群模式,并使用独立数据库存储 gitaly 元数据。需要创建另一个 Secret 来存储数据库连接信息,其字段与上述字段一致。

sslmode

sslmode 是用于控制 GitLab 服务与 PostgreSQL 数据库之间连接安全性的参数。可选值:

  • enable:启用 SSL 连接
  • disable:禁用 SSL 连接

使用 Alauda support for PostgreSQL 时,应将 sslmode 设置为 enable。
使用外部 PostgreSQL 时,sslmode 取决于 PostgreSQL 配置。

更新凭证

如果需要在部署 GitLab 实例后修改 PostgreSQL 连接信息,需要直接更新 GitLab 实例资源,而不是修改凭证内容。具体操作请参阅配置 PostgreSQL 凭证。

使用 Data Services 提供的 PostgreSQL

Data Services 支持部署可用于 GitLab 部署的 PostgreSQL 实例。创建 PostgreSQL 实例时,请注意以下重要要求:

  1. 选择与 GitLab 版本匹配的 PostgreSQL 版本,例如,部署 GitLab 17.z 时,需要选择 PostgreSQL 14.z
  2. 存储配额不得小于 5Gi

创建 PostgreSQL 实例时,系统会自动生成包含连接信息的 Secret。可以使用标签 middleware.instance/type: PostgreSQL 筛选此 Secret 资源。

kubectl get secret -n <ns-of-postgresql-instance> -l middleware.instance/type=PostgreSQL | grep -E '^postgres'
INFO

此 Secret 包含 host、port、username、password 信息。需要根据此 Secret 补充 database 和 sslmode(设置为 enable)信息,并在 GitLab 实例所在的命名空间中创建新的 Secret。

有关更多 PostgreSQL 部署参数和要求,请参阅 PostgreSQL Deployment Documentation。

GitLab 账户凭证

在计划部署 GitLab 实例的命名空间中创建 Secret,选择 Opaque 类型,并在配置中添加和填写以下字段:

字段描述示例值
password设置默认 root 账户的密码。密码必须包含字母、数字和特殊字符,长度至少为 8 个字符,并且不能使用常见的弱密码password111@
namespace设置为与 GitLab 实例相同的命名空间tools
apiVersion: v1
data:
  password: <base64 encode password>
kind: Secret
metadata:
  name: gitlab-root-password
  namespace: <ns-of-gitlab-instance>
type: Opaque

对象存储凭证

准备名为 rails-storage.yaml 的 MinIO 配置文件,内容如下:

provider: AWS
region: us-east-1
aws_access_key_id: example
aws_secret_access_key: example
endpoint: "http://minio.example.com"
path_style: true
  • provider 是对象存储的类型,MinIO 使用固定值 AWS
  • region 是对象存储的地域,MinIO 使用固定值 us-east-1
  • aws_access_key_id 是对象存储的访问密钥 ID
  • aws_secret_access_key 是对象存储的访问密钥
  • endpoint 是对象存储的访问地址
  • path_style 是对象存储的访问方式,此处使用固定值 true

将配置文件作为 Secret 保存到集群中,并注意命名空间必须与 GitLab 实例的命名空间一致:

kubectl create secret generic gitlab-object-storage -n <ns-of-gitlab-instance> --from-file=connection=rails-storage.yaml

更多详细信息,请参阅使用对象存储保存 LFS 文件。


GitLab 是 GitLab Inc. 的商标。

Alauda 是独立供应商。本产品与 GitLab Inc. 不存在关联,也未获得其认可或赞助。所有商标均为其各自所有者的财产,此处仅用于标识目的。