외부 Redis를 사용하여 GitLab 차트 구성

이 문서는 외부 Redis 서비스를 사용하여이 Helm 차트를 구성하는 방법에 대한 설명서를 제공하고자 합니다.

Redis가 구성되지 않은 경우 온프레미스 또는 VM에 배포하려는 경우, Linux package를 사용을 고려하십시오.

현재 지원되는 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 속성은 Redis 인스턴스 그룹의 이름 (예: mymaster 또는 resque)으로 설정해야 합니다. --set 플래그에 일치하도록 sentinel.conf에 명시된 Redis 마스터의 호스트 이름이 아니어야 합니다. Sentinel 서버는 global.redis.sentinels[0].hostglobal.redis.sentinels[0].port 값을 사용하여 참조할 수 있습니다. 인덱스는 0부터 시작합니다.

여러 Redis 인스턴스 사용

GitLab은 여러 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 하위 값 및 값을 정의합니다.

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에 비밀번호를 삽입하려면 다음 중 하나를 사용할 수 있습니다:
    • 기존의 password 정의를 사용하여 Helm에서 ERB 문으로 대체하도록 하십시오.
    • 컨테이너에 장착 된 시크릿 경로를 사용하여 <%%= File.read(‘/path/to/secret’).strip.to_json %> 문을 직접 작성하십시오. (경로는 어디에 있든 상관없음)
  2. redisYmlOverride에서는 GitLab Rails의 명명 규칙을 따라야 합니다. 예를 들어, “SharedState” 인스턴스를 sharedState라고 부르지 않고 shared_state라고 해야합니다.
  3. 구성 값에는 상속이 없습니다. 예를 들어, 세 개의 Redis 인스턴스가 단일 Sentinels 세트를 공유하는 경우 Sentinel 구성을 세 번 반복해야 합니다.
  4. CNG 이미지에서는 유효한 resque.ymlcable.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 이상으로 업그레이드하십시오.