正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

外部RedisでGitLabチャートを設定します

このドキュメントでは、外部RedisサービスでこのHelmチャートを設定する方法について説明します。

Redisが設定されていない場合は、オンプレミスまたは仮想マシンへのデプロイのために、弊社のLinuxパッケージの使用をご検討ください。

現在サポートされているRedisのバージョンの詳細については、インストールシステムの要件を参照してください。

チャートを設定します

redisチャートとそれが提供するRedisサービスを無効にし、他のサービスを外部サービスに接続します。

次のパラメータを設定する必要があります:

  • redis.install: falseに設定して、Redisチャートを含めないようにします。
  • global.redis.host: 外部Redisのホスト名に設定します。これはドメインまたはIPアドレスにすることができます。
  • global.redis.auth.enabled: 外部Redisがパスワードを必要としない場合は、falseに設定します。
  • global.redis.auth.secret: 認証用のトークンを含むシークレットの名前。
  • global.redis.auth.key: シークレット内のキー。これには、トークンコンテンツが含まれています。

デフォルトを使用していない場合は、以下の項目をさらにカスタマイズできます:

  • global.redis.port: データベースが利用可能なポート。 デフォルトは6379です。
  • global.redis.database: Redisサーバー上で接続するデータベース。 0がデフォルトです。

たとえば、デプロイ中に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高可用性クラスタリングに接続している場合は、global.redis.host属性を、sentinel.confで指定されているように、Redis Redisインスタンスグループの名前(mymasterresqueなど)に設定する必要があります。Redis mainのホスト名には設定しないでください。Sentinelサーバーは、--setフラグのglobal.redis.sentinels[0].hostおよびglobal.redis.sentinels[0].port値を使用して参照できます。インデックスはゼロから始まります。

複数のRedis Redisインスタンスを使用する

GitLabは、リソースを大量に消費する複数のRedis操作を複数のRedis Redisインスタンスに分割することをサポートしています。このチャートは、これらの永続属性を他のRedis Redisインスタンスに分散することをサポートしています。

複数のRedis Redisインスタンスを使用するためのチャートの設定に関する詳細については、グローバルドキュメントを参照してください。

セキュアなRedisスキーム(SSL)を指定する

SSLを使用してRedisに接続するには、rediss(二重のsに注意してください)スキームパラメータを使用します:

--set global.redis.scheme=rediss

redis.ymlオーバーライド

GitLab 15.8で導入されたredis.yml設定ファイルの内容をオーバーライドする場合は、global.redis.redisYmlOverrideで値を定義することで呼び出すことができます。そのキーの下のすべての値とサブ値は、そのままredis.ymlにレンダリングされます。

global.redis.redisYmlOverride設定は、外部Redisサービスで使用することを目的としています。redis.installfalseに設定する必要があります。詳細については、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. 設定値の継承はありません。たとえば、単一のSentinelセットを共有する3つのRedis Redisインスタンスがある場合は、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チャート7.2以降で外部Redis 5を使用している場合は、webserviceおよびsidekiqポッドのログにこのエラーが表示されることがあります。Redis 5はサポートされていません

これを修正するには、外部Redisインスタンスを6.x以降にアップグレードします。