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

이 문서는이 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 구성의 이름(mymaster 또는 resque와 같은)으로 설정해야 합니다. 그러나 Redis 마스터의 호스트 이름은 설정하지 않아야 합니다. Sentinel 서버는 --set 플래그에 대해 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 하위에 정의해야 합니다. 해당 키 아래의 모든 값과 하위 값이 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 / secret에는 THE 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. 구성 값의 상속이 없습니다. 예를 들어, 세 개의 Redis 인스턴스가 하나의 센티넬 구성을 공유하는 경우 센티넬 구성을 세 번 반복해야 합니다.
  4. CNG 이미지 유효한 resque.ymlcable.yml을 예상합니다, 따라서 적어도global.redis.host를 구성해야resque.yml 파일을 가져올 수 있습니다.

문제 해결

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 이상으로 업그레이드하십시오.