外部の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 以降にアップグレードしてください。
