外部のRedisを使ったGitLab Chartの設定
このドキュメントでは、外部のRedisサービスを使ってHelmチャートを設定する方法を説明します。
オンプレミスやVMへのデプロイでRedisを設定していない場合は、Linuxパッケージの利用を検討してください。
現在サポートされているRedisのバージョンの詳細については、インストールシステム要件を参照してください。
Chartの設定
redis
チャートとそれが提供する Redis サービスを無効にし、他のサービスを外部サービスに向けます。
以下のパラメータを設定する必要があります:
-
redis.install
:Redisチャートを含めないようにするには、false
に設定します。 -
global.redis.host
:外部Redisのホスト名を設定します。ドメインでもIPアドレスでもかまいません。 -
global.redis.auth.enabled
:外部Redisがパスワードを必要としない場合は、false
。 -
global.redis.auth.secret
:認証用のトークンを含むシークレットの名前。 -
global.redis.auth.key
:トークンの内容を含むシークレットのキー。
デフォルトを使用しない場合は、以下の項目をさらにカスタマイズすることができます:
-
global.redis.port
:データベースが利用可能なポート。デフォルトは6379
です。
たとえば、デプロイ時に Helm の--set
フラグでこれらの値を渡します:
helm install gitlab gitlab/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クラスターに接続する場合は、sentinel.conf
で指定したように、global.redis.host
属性にRedisインスタンスグループの名前(mymaster
やresque
など)を設定する必要があります。 Sentinelサーバーは、global.redis.sentinels[0].host
とglobal.redis.sentinels[0].port
の値を使用して、--set
フラグで参照できます。インデックスはゼロベースです。
複数のRedisインスタンスの使用
GitLabはリソースを大量に消費するRedisのオペレーションを複数のRedisインスタンスに分割することをサポートしています。このChartはこれらの永続化クラスを他のRedisインスタンスにディストリビューションすることをサポートしています。
複数のRedisインスタンスを使うためのChartの設定に関するより詳しい情報は、globalsのドキュメントにあります。
セキュアなRedisスキームの指定(SSL)
SSLを使用してRedisに接続するには、rediss
(二重のs
)スキームパラメータを使用します:
--set global.redis.scheme=rediss
redis.yml
オーバーライド
GitLab 15.8](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106854) で導入された[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 ステートメントで置換させます。
- シークレットがコンテナにマウントされているパスを使用して、正しい ERB
<%= File.read('/path/to/secret').strip.to_json %>
ステートメントを自分で記述します。
-
redisYmlOverride
では、GitLab Railsの命名規則に従う必要があります。例えば、”SharedState” インスタンスはsharedState
とは呼ばず、shared_state
とします。 - 設定値の継承はありません。例えば、3つのRedisインスタンスで1セットのSentinelを共有する場合、Sentinelの設定を3回繰り返す必要があります。
- CNGイメージは有効な
resque.yml
とcable.yml
を期待するので、resque.yml
ファイルを取得するには少なくともglobal.redis.host
を設定する必要があります。
トラブルシューティング
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.x 以降にアップグレードしてください。