使用外部 Redis 配置 chart

本文档旨在提供有关如何使用外部 Redis 服务配置此 Helm chart 的文档。

如果您没有配置 Redis,对于本地部署或部署到 VM,请考虑使用我们的 Linux 软件包

目前支持的 Redis 版本,请参见安装系统要求

配置 Chart

禁用 redis chart 及其提供的 Redis 服务,将其它服务指向外部服务。 您必须设置以下参数:

  • redis.install:设置为 false 以禁用包括 Redis chart。
  • global.redis.host:设置为外部 Redis 的主机名,可以是域名或 IP 地址。
  • global.redis.auth.enabled:如果外部 Redis 不需要密码,则设置为 false
  • global.redis.auth.secret包含身份验证令牌的 secret 的名称。
  • global.redis.auth.key:包含令牌内容的 secret 中的键。

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

  • global.redis.port:数据库可用的端口,默认为6379

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

helm install gitlab gitlab-jh/gitlab  \
  --set redis.install=false \
  --set global.redis.host=redis.example \
  --set global.redis.auth.secret=gitlab-redis \
  --set global.redis.auth.key=redis-password \

如果您要连接到运行 Sentinel 服务器的 Redis HA 集群,则需要将 global.redis.host 属性设置为指定的 Redis 实例组的名称(例如 mymasterresque) 在 sentinel.conf 中。 可以使用 global.redis.sentinels[0].hostglobal.redis.sentinels[0].port 值作为 --set 标志来引用 Sentinel 服务器。 该指数从零开始。

使用多个 Redis 实例

GitLab 支持将多个资源密集型 Redis 操作拆分到多个 Redis 实例。 此 chart 支持将以下持久类分发到其它 Redis 实例。

有关配置 chart 以使用多个 Redis 实例的更多详细信息,请参见 全局配置 文档。

指定安全 Redis 方案 (SSL)

为了使用 SSL 连接到 Redis,需要 rediss(注意双 s)方案参数:

  --set global.redis.scheme=rediss

redis.yml 覆盖

如果您想覆盖 15.8 版本中引入的 redis.yml 配置文件的内容,您可以通过在 global.redis.redisYmlOverride 下定义值来实现。该键下的所有值和子值都将按原样呈现到 redis.yml 中。

global.redis.redisYmlOverride 设置旨在与外部 Redis 服务一起使用。您必须将 redis.install 设置为 false。有关详细信息,请参阅配置 Redis 设置

示例:

redis:
  install: false
global:
  redis:
    redisYmlOverride:
      raredis:
        host: rare-redis.example.com:6379
        password:
          enabled: true
          secret: secretname
          key: password
      exotic_redis:
        host: redis.example.com:6379
        password: <%= File.read('/path/to/secret').strip.to_json %>
      mystery_setting:
        deeply:
          nested: value

假设 /path/to/secret 包含 THE SECRET,并且 /path/to/secret/raredis-override-password 包含 RARE SECRET,将导致 redis.yml 中呈现以下内容:

production:
  raredis:
    host: rare-redis.example.com:6379
    password: "RARE SECRET"
  exotic_redis:
    host: redis.example.com:6379
    password: "THE SECRET"
  mystery_setting:
    deeply:
      nested: value

需要注意的事项

redisYmlOverride 灵活性的另一面是它不太用户友好。例如:

  1. 要将密码插入到 redis.yml,您可以:
    • 使用现有的密码定义,并让 Helm 将其替换为 ERB 语句。
    • 使用在容器中挂载 secret 的任何路径,自行编写正确的 ERB <%= File.read('/path/to/secret').strip.to_json %> 语句。
  2. redisYmlOverride 中,您必须遵循 Rails 的命名约定。例如,SharedState 实例不称为 sharedState,而是 shared_state
  3. 没有配置值的继承。例如,您有三个共享一组 Sentinel 的 Redis 实例,则必须重复三次 Sentinel 配置。
  4. CNG 镜像期望有效的 resque.ymlcable.yml,所以您仍然需要至少配置 global.redis.host 来获取 resque.yml 文件。

故障排查

ERR Error running script (call to f_5962bd591b624c0e0afce6631ff54e7e4402ebd8): @user_script:7: ERR syntax error

如果您在使用 Helm chart 7.2 或更高版本并搭配使用 Redis 5,您可能会在 webservicesidekiq 日志文件中看到此错误。Redis 5 已经不再支持

如果要修复此错误,请升级到 Redis 6 或更高版本。