外部の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インスタンスグループの名前(mymasterresque など)を設定する必要があります。 Sentinelサーバーは、global.redis.sentinels[0].hostglobal.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/secretTHE SECRET を含み、/path/to/secret/raredis-override-passwordRARE 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 ステートメントで置換させます。
    • シークレットがコンテナにマウントされているパスを使用して、正しい ERB<%= File.read('/path/to/secret').strip.to_json %> ステートメントを自分で記述します。
  2. redisYmlOverride では、GitLab Railsの命名規則に従う必要があります。例えば、”SharedState” インスタンスはsharedState とは呼ばず、shared_state とします。
  3. 設定値の継承はありません。例えば、3つのRedisインスタンスで1セットのSentinelを共有する場合、Sentinelの設定を3回繰り返す必要があります。
  4. CNGイメージは有効なresque.ymlcable.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 以降にアップグレードしてください。