외부 Redis로 GitLab 차트 구성
이 문서는 외부 Redis 서비스로 Helm 차트를 구성하는 방법에 대한 설명서를 제공하는 것을 목적으로 합니다.
만약 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 \
만약 연결하려는 Redis HA 클러스터에 Sentinel 서버가 실행 중이라면, global.redis.host
속성을 sentinel.conf
에 지정된 Redis 인스턴스 그룹(예: mymaster
또는 resque
)의 이름으로 설정해야 하며, Redis 마스터의 호스트 이름으로는 설정하면 안 됩니다. Sentinel 서버는 --set
플래그를 사용하여 global.redis.sentinels[0].host
및 global.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.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
로 불립니다. - 구성 값의 상속이 없습니다. 예를 들어, 세 개의 Redis 인스턴스가 동일한 Sentinels를 공유하는 경우, Sentinel 구성을 세 번 반복해야 합니다.
- CNG 이미지는 유효한
resque.yml
및cable.yml
을 예상합니다, 그래서 적어도global.redis.host
를 구성해야 합니다.
문제 해결
ERR Error running script (call to f_5962bd591b624c0e0afce6631ff54e7e4402ebd8): @user_script:7: ERR syntax error
라는 오류가 발생할 수 있습니다.
외부 Redis 5를 사용하는 경우, Helm 차트 7.2 이상에서 webservice
및 sidekiq
팟 로그에서 이 오류를 볼 수 있습니다. Redis 5는 지원되지 않습니다.
이를 해결하려면 외부 Redis 인스턴스를 6.x 이상으로 업그레이드하십시오.