使用外部 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 实例组的名称(例如 mymaster
或 resque
) 在 sentinel.conf
中。 可以使用 global.redis.sentinels[0].host
和 global.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
灵活性的另一面是它不太用户友好。例如:
- 要将密码插入到
redis.yml
,您可以:- 使用现有的密码定义,并让 Helm 将其替换为 ERB 语句。
- 使用在容器中挂载 secret 的任何路径,自行编写正确的 ERB
<%= File.read('/path/to/secret').strip.to_json %>
语句。
- 在
redisYmlOverride
中,您必须遵循 Rails 的命名约定。例如,SharedState
实例不称为sharedState
,而是shared_state
。 - 没有配置值的继承。例如,您有三个共享一组 Sentinel 的 Redis 实例,则必须重复三次 Sentinel 配置。
- CNG 镜像期望有效的
resque.yml
和cable.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,您可能会在 webservice
和 sidekiq
日志文件中看到此错误。Redis 5 已经不再支持。
如果要修复此错误,请升级到 Redis 6 或更高版本。