GitLab 차트를 외부 Redis로 구성하기

이 문서는 이 Helm 차트를 외부 Redis 서비스로 구성하는 방법에 대한 문서를 제공합니다.

Redis가 구성되지 않은 경우, 온프레미스 또는 VM에 배포할 때는
우리의 Linux 패키지를 사용하는 것을 고려하세요.

현재 지원되는 Redis 버전에 대한 자세한 내용은 설치 시스템 요구 사항을 참조하세요.

차트 구성하기

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 클러스터에 연결하는 경우, global.redis.host 속성은
sentinel.conf에 지정된 Redis 인스턴스 그룹의 이름(예: mymaster 또는 resque)으로 설정해야 하며,
Redis 마스터의 호스트 이름으로 설정하지 않아야 합니다.

Sentinel 서버는 global.redis.sentinels[0].hostglobal.redis.sentinels[0].port
값을 --set 플래그에 사용하여 참조할 수 있습니다. 인덱스는 0부터 시작합니다.

여러 Redis 인스턴스 사용하기

GitLab은 여러 리소스 집약적인 Redis 작업을 여러 Redis 인스턴스에 분산하는 것을 지원합니다.
이 차트는 이러한 영속성 클래스를 다른 Redis 인스턴스에 분산하는 것을 지원합니다.

여러 Redis 인스턴스를 사용하기 위한 차트 구성에 대한 보다 자세한 정보는
globals 문서를 참조하세요.

안전한 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-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의 유연성의 단점은 사용자 친화적이지 않다는 것입니다. 예를 들어:

  1. redis.yml에 비밀번호를 삽입하려면 다음 두 가지 방법 중 하나를 선택할 수 있습니다:
    • 기존의 비밀번호 정의를 사용하여 Helm이 이를 ERB 문으로 대체하도록 합니다.
    • 올바른 ERB <%= File.read('/path/to/secret').strip.to_json %> 문을 직접 작성하여, 비밀이 컨테이너에 마운트된 경로를 사용합니다.
  2. redisYmlOverride에서는 GitLab Rails의 명명 규칙을 따라야 합니다. 예를 들어, “SharedState” 인스턴스는 sharedState가 아니라 shared_state로 불립니다.
  3. 구성 값의 상속은 없습니다. 예를 들어, 하나의 Sentinel 세트를 공유하는 세 개의 Redis 인스턴스가 있는 경우, Sentinel 구성을 세 번 반복해야 합니다.
  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를 사용하는 경우 webservicesidekiq 팟의 로그에서 이 오류를 볼 수 있습니다. Redis 5는 지원되지 않습니다.

문제를 해결하려면 외부 Redis 인스턴스를 6.x 이상으로 업그레이드하십시오.