配置 Redis、PostgreSQL 及账户凭证

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

前提条件

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

Redis 凭证

要求

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

  • 部署模式支持 StandaloneSentinel 两种模式,但不支持 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 认证时必填。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。该 Secret 资源可通过标签 middleware.instance/type: Redis 进行筛选。

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

若 Redis 实例与 GitLab 实例不在同一命名空间,需要将 Secret 资源复制到 GitLab 实例所在命名空间。

更多 Redis 部署参数及高可用部署要求,请参考 Redis 部署文档

使用 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 凭证

使用数据服务提供的 PostgreSQL

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

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

创建 PostgreSQL 实例时,会自动生成包含连接信息的 Secret。该 Secret 资源可通过标签 middleware.instance/type: PostgreSQL 进行筛选。

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

该 Secret 包含 hostportusernamepassword 信息。需基于此 Secret 补充 databasesslmode(设置为 enable)信息,并在 GitLab 实例所在命名空间创建新的 Secret。

更多 PostgreSQL 部署参数及要求,请参考 PostgreSQL 部署文档

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 文件使用对象存储