外部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インスタンスグループの名前(mymasterやresqueなど)に設定する必要があります。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=redissredis.ymlオーバーライド
GitLab 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ステートメントに置き換えさせます。
- 正しいERB
<%= File.read('/path/to/secret').strip.to_json %>ステートメントを自分で記述します。コンテナにシークレットがマウントされているパスを使用します。
redisYmlOverrideでは、GitLab Railsの命名規則に従う必要があります。たとえば、「SharedState」インスタンスはsharedStateとは呼び出されず、shared_stateとは呼び出されます。- 設定値の継承はありません。たとえば、単一のSentinelセットを共有する3つのRedis Redisインスタンスがある場合は、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チャート7.2以降で外部Redis 5を使用している場合は、webserviceおよびsidekiqポッドのログにこのエラーが表示されることがあります。Redis 5はサポートされていません。
これを修正するには、外部Redisインスタンスを6.x以降にアップグレードします。