- 디자인 선택
- 구성
- 설치 매개변수
- 차트 구성 예시
- 서브 차트 활성화
image
구성service
구성ingress
구성- TLS 구성
-
networkpolicy
구성 - KEDA 구성하기
- Registry 구성 정의
- 가비지 수집
컨테이너 레지스트리 사용하기
registry
서브 차트는 Kubernetes에서 전체 클라우드 네이티브 GitLab 배포를 위한 레지스트리 컴포넌트를 제공합니다. 이 서브 차트는
업스트림 차트를 기반으로 하며, GitLab 컨테이너 레지스트리를 포함합니다.
이 차트는 3개의 주요 부분으로 구성됩니다:
모든 구성은
레지스트리 구성 문서에 따라 /etc/docker/registry/config.yml
변수를 사용하여 Deployment
에 제공된 ConfigMap
에서 채워집니다. ConfigMap
는 업스트림 기본값을 재정의하지만,
기본값을 기반으로 합니다. 아래에서 자세한 내용을 참조하세요:
디자인 선택
Kubernetes Deployment
는 인스턴스의 간단한 확장을 허용하기 위해 이 차트의 배포 방법으로 선택되었으며,
롤링 업데이트를 허용합니다.
이 차트는 두 개의 필수 비밀과 하나의 선택적 비밀을 사용합니다:
필수
-
global.registry.certificate.secret
: 관련 GitLab 인스턴스에서 제공하는 인증 토큰을 확인하기 위해 공용 인증서 번들이 포함된 글로벌 비밀입니다. GitLab을 인증 엔드포인트로 사용하는 방법에 대한 문서를 참조하세요. -
global.registry.httpSecret.secret
: 레지스트리 포드 간의
공유 비밀을 포함하는 글로벌 비밀입니다.
선택적
-
profiling.stackdriver.credentials.secret
: Stackdriver 프로파일링이 활성화되고 명시적인 서비스 계정 자격 증명을 제공해야 하는 경우 이 비밀의 값(기본적으로credentials
키에 있음)은 GCP 서비스 계정 JSON 자격 증명입니다.
GKE를 사용하고 워크로드에 서비스 계정을 제공하는 경우
워크로드 아이덴티티
(또는 노드 서비스 계정, 권장하지 않음) 를 사용하는 경우 이 비밀은 필요하지 않으며 제공되지 않아야 합니다.
두 경우 모두, 서비스 계정은roles/cloudprofiler.agent
역할이 필요하며, 이와 동등한 수동 권한을 요구합니다.
구성
구성의 주요 섹션을 모두 설명하겠습니다. 상위 차트에서 구성할 때 이러한 값은 다음과 같습니다:
registry:
enabled:
maintenance:
readonly:
enabled: false
uploadpurging:
enabled: true
age: 168h
interval: 24h
dryrun: false
image:
tag: 'v4.10.0-gitlab'
pullPolicy: IfNotPresent
annotations:
service:
type: ClusterIP
name: registry
httpSecret:
secret:
key:
authEndpoint:
tokenIssuer:
certificate:
secret: gitlab-registry
key: registry-auth.crt
deployment:
terminationGracePeriodSeconds: 30
draintimeout: '0'
hpa:
minReplicas: 2
maxReplicas: 10
cpu:
targetAverageUtilization: 75
behavior:
scaleDown:
stabilizationWindowSeconds: 300
storage:
secret:
key: storage
extraKey:
validation:
disabled: true
manifests:
referencelimit: 0
payloadsizelimit: 0
urls:
allow: []
deny: []
notifications: {}
tolerations: []
affinity: {}
ingress:
enabled: false
tls:
enabled: true
secretName: redis
annotations:
configureCertmanager:
proxyReadTimeout:
proxyBodySize:
proxyBuffering:
networkpolicy:
enabled: false
egress:
enabled: false
rules: []
ingress:
enabled: false
rules: []
serviceAccount:
create: false
automountServiceAccountToken: false
tls:
enabled: false
secretName:
verify: true
caSecretName:
이 차트를 독립형으로 배포하기로 선택한 경우 최상위 수준의 registry
를 제거하세요.
설치 매개변수
매개변수 | 기본값 | 설명 |
---|---|---|
annotations |
포드 주석 | |
podLabels |
보조 포드 레이블. 선택자에 사용되지 않습니다. | |
common.labels |
이 차트에 의해 생성된 모든 객체에 적용되는 보조 레이블. | |
authAutoRedirect |
true |
인증 자동 리디렉션(Windows 클라이언트가 작동하려면 true이어야 함) |
authEndpoint |
global.hosts.gitlab.name |
인증 엔드포인트(호스트 및 포트만 해당) |
certificate.secret |
gitlab-registry |
JWT 인증서 |
debug.addr.port |
5001 |
디버그 포트 |
debug.tls.enabled |
false |
레지스트리의 디버그 포트에 TLS를 활성화합니다. 라이브니스 및 레디니스 프로브, 메트릭 엔드포인트(활성화된 경우)에 영향을 줍니다. |
debug.tls.secretName |
레지스트리 디버그 엔드포인트에 대한 유효한 인증서 및 키를 포함한 Kubernetes TLS 비밀의 이름. 설정되지 않은 경우 debug.tls.enabled=true 인 경우 디버그 TLS 구성은 레지스트리의 TLS 인증서를 기본값으로 사용합니다. |
|
debug.prometheus.enabled |
false |
사용 중단됨 metrics.enabled 사용 |
debug.prometheus.path |
"" |
사용 중단됨 metrics.path 사용 |
metrics.enabled |
false |
메트릭 엔드포인트가 스크래핑을 위해 사용 가능해야 하는지 여부 |
metrics.path |
/metrics |
메트릭 엔드포인트 경로 |
metrics.serviceMonitor.enabled |
false |
Prometheus Operator가 메트릭 스크래핑을 관리할 수 있도록 ServiceMonitor를 생성해야 하는지 여부, 이 기능을 활성화하면 prometheus.io 스크랩 주석이 제거됩니다. |
metrics.serviceMonitor.additionalLabels |
{} |
ServiceMonitor에 추가할 레이블 |
metrics.serviceMonitor.endpointConfig |
{} |
ServiceMonitor에 대한 추가 엔드포인트 구성 |
deployment.terminationGracePeriodSeconds |
30 |
포드가 정상적으로 종료되기 위해 필요한 선택적 시간(초) |
deployment.strategy |
{} |
배포에 의해 사용되는 업데이트 전략을 구성할 수 있습니다. |
draintimeout |
'0' |
SIGTERM 신호를 수신한 후 HTTP 연결이 소멸되기를 기다리는 시간(예: '10s' ) |
relativeurls |
false |
레지스트리가 위치 헤더에 상대 URL을 반환하도록 활성화합니다. |
enabled |
true |
레지스트리 플래그 활성화 |
hpa.behavior |
{scaleDown: {stabilizationWindowSeconds: 300 }} |
동적 스케일링 동작에 대한 사양 포함(최소 autoscaling/v2beta2 필요) |
hpa.customMetrics |
[] |
원하는 복제 수를 계산하는 데 사용할 사양을 포함하는 사용자 정의 메트릭(기본 CPU 사용량 평균을 사용하도록 구성된 targetAverageUtilization 사용 재정의) |
hpa.cpu.targetType |
Utilization |
오토스케일링 CPU 목표 유형을 설정합니다. Utilization 또는 AverageValue 중 하나여야 합니다. |
hpa.cpu.targetAverageValue |
오토스케일링 CPU 목표 값을 설정합니다. | |
hpa.cpu.targetAverageUtilization |
75 |
오토스케일링 CPU 목표 활용도를 설정합니다. |
hpa.memory.targetType |
오토스케일링 메모리 목표 유형을 설정합니다. Utilization 또는 AverageValue 중 하나여야 합니다. |
|
hpa.memory.targetAverageValue |
오토스케일링 메모리 목표 값을 설정합니다. | |
hpa.memory.targetAverageUtilization |
오토스케일링 메모리 목표 활용도를 설정합니다. | |
hpa.minReplicas |
2 |
최소 복제 수 |
hpa.maxReplicas |
10 |
최대 복제 수 |
httpSecret |
Https 비밀 | |
extraEnvFrom |
노출할 다른 데이터 소스의 추가 환경 변수 목록 | |
image.pullPolicy |
레지스트리 이미지에 대한 풀 정책 | |
image.pullSecrets |
이미지 저장소에 사용할 비밀 | |
image.repository |
registry.gitlab.com/gitlab-org/build/cng/gitlab-container-registry |
레지스트리 이미지 |
image.tag |
v4.10.0-gitlab |
사용할 이미지 버전 |
init.image.repository |
initContainer 이미지 | |
init.image.tag |
initContainer 이미지 태그 | |
init.containerSecurityContext |
initContainer 특정 securityContext | |
init.containerSecurityContext.runAsUser |
1000 |
initContainer 특정: 컨테이너가 시작되어야 하는 사용자 ID |
init.containerSecurityContext.allowPrivilegeEscalation |
false |
initContainer 특정: 프로세스가 부모 프로세스보다 더 많은 권한을 가질 수 있는지를 제어합니다. |
init.containerSecurityContext.runAsNonRoot |
true |
initContainer 특정: 컨테이너가 비 루트 사용자로 실행되는지를 제어합니다. |
init.containerSecurityContext.capabilities.drop |
[ "ALL" ] |
initContainer 특정: 컨테이너에 대한 Linux 기능을 제거합니다. |
keda.enabled |
false |
KEDA ScaledObjects 사용하여 HorizontalPodAutoscalers 대신 사용 |
keda.pollingInterval |
30 |
각 트리거를 확인하는 간격 |
keda.cooldownPeriod |
300 |
마지막 트리거가 활성으로 보고된 후 리소스를 0으로 다시 스케일하기까지 기다릴 기간 |
keda.minReplicaCount |
KEDA가 리소스를 축소할 최소 복제 수. 기본값은 hpa.minReplicas
|
|
keda.maxReplicaCount |
KEDA가 리소스를 늘릴 최대 복제 수. 기본값은 hpa.maxReplicas
|
|
keda.fallback |
KEDA 폴백 구성, 문서 참조 | |
keda.hpaName |
KEDA가 생성할 HPA 리소스의 이름. 기본값은 keda-hpa-{scaled-object-name}
|
|
keda.restoreToOriginalReplicaCount |
ScaledObject 가 삭제된 후 목표 리소스를 원래 복제 수로 다시 스케일할지 여부를 지정합니다. |
|
keda.behavior |
위 및 다운스케일링 동작에 대한 사양, 기본값은 hpa.behavior
|
|
keda.triggers |
대상 리소스의 스케일링을 활성화할 트리거 목록, 기본값은 hpa.cpu 및 hpa.memory 에서 계산된 트리거입니다. |
|
log |
{level: info, fields: {service: registry}} |
로깅 옵션 구성 |
minio.bucket |
global.registry.bucket |
레거시 레지스트리 버킷 이름 |
maintenance.readonly.enabled |
false |
레지스트리의 읽기 전용 모드를 활성화합니다. |
maintenance.uploadpurging.enabled |
true |
업로드 제거 활성화 |
maintenance.uploadpurging.age |
168h |
지정된 연령보다 오래된 업로드를 정리합니다. |
maintenance.uploadpurging.interval |
24h |
업로드 제거가 수행되는 빈도 |
maintenance.uploadpurging.dryrun |
false |
삭제 없이 삭제될 업로드 목록을 나열합니다. |
priorityClassName |
포드에 할당된 우선 순위 클래스 | |
reporting.sentry.enabled |
false |
Sentry를 사용한 보고 활성화 |
reporting.sentry.dsn |
Sentry DSN(데이터 소스 이름) | |
reporting.sentry.environment |
Sentry 환경 | |
profiling.stackdriver.enabled |
false |
Stackdriver를 사용한 지속적 프로파일링 활성화 |
profiling.stackdriver.credentials.secret |
gitlab-registry-profiling-creds |
자격 증명을 포함하는 비밀의 이름 |
profiling.stackdriver.credentials.key |
credentials |
자격 증명이 저장된 비밀 키 |
profiling.stackdriver.service |
RELEASE-registry (템플릿 서비스 이름) |
프로파일을 기록할 Stackdriver 서비스의 이름 |
profiling.stackdriver.projectid |
GCP 프로젝트에서 실행 중 | 프로파일을 보고할 GCP 프로젝트 |
database.configure |
false |
레지스트리 차트에서 데이터베이스 구성을 채우도록 설정, 기존 레지스트리 이전할 때 필요합니다. |
database.enabled |
false |
메타데이터 데이터베이스 활성화. 이는 실험적 기능이며 생산 환경에서 사용해서는 안 됩니다. |
database.host |
global.psql.host |
데이터베이스 서버 호스트 이름. |
database.port |
global.psql.port |
데이터베이스 서버 포트. |
database.user |
데이터베이스 사용자 이름. | |
database.password.secret |
RELEASE-registry-database-password |
데이터베이스 비밀번호를 포함하는 비밀의 이름. |
database.password.key |
password |
데이터베이스 비밀번호가 저장된 비밀 키. |
database.name |
데이터베이스 이름. | |
database.sslmode |
SSL 모드. disable , allow , prefer , require , verify-ca 또는 verify-full 중 하나일 수 있습니다. |
|
database.ssl.secret |
global.psql.ssl.secret |
클라이언트 인증서, 키 및 인증 기관이 포함된 비밀. 기본적으로 주요 PostgreSQL SSL 비밀을 사용합니다. |
database.ssl.clientCertificate |
global.psql.ssl.clientCertificate |
클라이언트 인증서를 참조하는 비밀 내 키. |
database.ssl.clientKey |
global.psql.ssl.clientKey |
클라이언트 키를 참조하는 비밀 내 키. |
database.ssl.serverCA |
global.psql.ssl.serverCA |
인증 기관(CA)을 참조하는 비밀 내 키. |
database.connecttimeout |
0 |
연결을 기다리는 최대 시간. 0 또는 지정하지 않으면 무한정 기다립니다. |
database.draintimeout |
0 |
종료 시 모든 연결을 드레인하는 데 기다리는 최대 시간. 0 또는 지정하지 않으면 무한정 기다립니다. |
database.preparedstatements |
false |
준비된 명령문을 활성화합니다. PgBouncer와의 호환성을 위해 기본적으로 비활성화되어 있습니다. |
database.primary |
false |
대상 기본 데이터베이스 서버. 레지스트리 database.migrations 를 실행할 때 대상 FQDN을 지정하는 데 사용됩니다. host 가 지정되지 않은 경우 database.migrations 를 실행하는 데 사용됩니다. |
database.pool.maxidle |
0 |
유휴 연결 풀의 최대 연결 수. maxopen 보다 maxidle 가 작으면 maxidle 이 maxopen 제한과 일치하도록 줄어듭니다. 0 또는 지정하지 않으면 유휴 연결이 없습니다. |
database.pool.maxopen |
0 |
데이터베이스에 대한 최대 열린 연결 수. maxopen 이 maxidle 보다 작으면 maxidle 이 maxopen 제한과 일치하도록 줄어듭니다. 0 또는 지정하지 않으면 무제한 열린 연결이 됩니다. |
database.pool.maxlifetime |
0 |
연결이 재사용될 수 있는 최대 시간입니다. 만료된 연결은 재사용 전에 게으르게 닫힐 수 있습니다. 0 또는 지정하지 않으면 무제한 재사용됩니다. |
database.pool.maxidletime |
0 |
연결이 유휴일 수 있는 최대 시간입니다. 만료된 연결은 재사용 전에 게으르게 닫힐 수 있습니다. 0 또는 지정하지 않으면 무제한 지속됩니다. |
database.migrations.enabled |
true |
초기 배포 및 차트 업그레이드 시 마이그레이션을 자동으로 실행하는 마이그레이션 작업 활성화. 실행 중인 Registry 포드 내에서 수동으로 마이그레이션을 실행할 수도 있습니다. |
database.migrations.activeDeadlineSeconds |
3600 |
마이그레이션 작업에 대한 activeDeadlineSeconds를 설정합니다. |
database.migrations.annotations |
{} |
마이그레이션 작업에 추가할 추가 주석. |
database.migrations.backoffLimit |
6 |
마이그레이션 작업에 대한 backoffLimit를 설정합니다. |
database.backgroundMigrations.enabled |
false |
데이터베이스에 대한 백그라운드 마이그레이션을 활성화합니다. 이는 레지스트리 메타데이터 데이터베이스용 실험적 기능입니다. 생산 환경에서 사용하지 마십시오. 사양에는 작동 방식에 대한 자세한 설명이 나와 있습니다. |
database.backgroundMigrations.jobInterval |
각 백그라운드 마이그레이션 작업자 실행 간의 대기 간격. 지정되지 않은 경우 레지스트리가 기본 값을 설정합니다. | |
database.backgroundMigrations.maxJobRetries |
실패한 백그라운드 마이그레이션 작업에 대한 최대 재시도 횟수. 지정되지 않은 경우 레지스트리가 기본 값을 설정합니다. | |
gc.disabled |
true |
true 로 설정되면 온라인 GC 작업자가 비활성화됩니다. |
gc.maxbackoff |
24h |
오류가 발생할 때 작업자 실행 간에 대기하는 데 사용되는 최대 지수 백오프 기간. 처리할 작업이 없을 때도 적용되며 gc.noidlebackoff 가 true 가 아닌 경우에만 적용됩니다. 이 점을 유의하십시오. 항상 최대 33%의 무작위 변동 요소가 추가됩니다. |
gc.noidlebackoff |
false |
true 로 설정하면 처리할 작업이 없을 때 작업자 실행 간의 지수 백오프가 비활성화됩니다. |
gc.transactiontimeout |
10s |
각 작업자 실행에 대한 데이터베이스 트랜잭션 시간 초과. 각 작업자는 시작 시 데이터베이스 트랜잭션을 시작합니다. 이 시간 초과를 초과하면 작업자 실행이 취소되어 지연되거나 오랜 시간이 걸리는 트랜잭션을 방지합니다. |
gc.blobs.disabled |
false |
true 로 설정하면 blobs를 위한 GC 작업자가 비활성화됩니다. |
gc.blobs.interval |
5s |
각 작업자 실행 간의 초기 대기 시간 간격. |
gc.blobs.storagetimeout |
5s |
저장 작업에 대한 시간 초과입니다. 스토리지 백엔드에서 남아있는 blobs를 삭제하는 요청의 지속 시간을 제한하는 데 사용됩니다. |
gc.manifests.disabled |
false |
true 로 설정하면 매니페스트를 위한 GC 작업자가 비활성화됩니다. |
gc.manifests.interval |
5s |
각 작업자 실행 간의 초기 대기 시간 간격. |
gc.reviewafter |
24h |
가비지 수집기가 검토할 레코드를 선택하는 데 필요한 최소 시간. -1 은 대기하지 않음을 의미합니다. |
securityContext.fsGroup |
1000 |
포드가 시작되는 그룹 ID |
securityContext.runAsUser |
1000 |
포드가 시작되는 사용자 ID |
securityContext.fsGroupChangePolicy |
볼륨의 소유권 및 권한을 변경하기 위한 정책(쿠버네티스 1.23 필요) | |
securityContext.seccompProfile.type |
RuntimeDefault |
사용할 Seccomp 프로파일 |
containerSecurityContext |
컨테이너를 시작할 때 사용하는 securityContext 재정의 | |
containerSecurityContext.runAsUser |
1000 |
컨테이너가 시작되는 특정 보안 컨텍스트 사용자 ID를 재정의합니다. |
containerSecurityContext.allowPrivilegeEscalation |
false |
Gitaly 컨테이너의 프로세스가 부모 프로세스보다 더 많은 권한을 가질 수 있는지를 제어합니다. |
containerSecurityContext.runAsNonRoot |
true |
컨테이너가 비 루트 사용자로 실행되는지를 제어합니다. |
containerSecurityContext.capabilities.drop |
[ "ALL" ] |
Gitaly 컨테이너에 대한 Linux 기능을 제거합니다. |
serviceAccount.automountServiceAccountToken |
false |
기본 ServiceAccount 액세스 토큰이 포드에 마운트되는지 여부를 나타냅니다. |
serviceAccount.enabled |
false |
ServiceAccount를 사용할지 여부를 나타냅니다. |
serviceLabels |
{} |
보조 서비스 레이블 |
tokenService |
container_registry |
JWT 토큰 서비스 |
tokenIssuer |
gitlab-issuer |
JWT 토큰 발급자 |
tolerations |
[] |
포드 할당에 대한 허용 레이블 |
affinity |
{} |
포드 할당에 대한 친화도 규칙 |
middleware.storage |
미들웨어 스토리지용 구성 계층 (예: s3) | |
redis.cache.enabled |
false |
true 로 설정하면 Redis 캐시가 활성화됩니다. 이 기능은 메타데이터 데이터베이스가 활성화되어야 합니다. 리포지토리 메타데이터는 구성된 Redis 인스턴스에 캐시됩니다. |
redis.cache.host |
<Redis URL> |
Redis 인스턴스의 호스트 이름. 비어 있으면 값이 global.redis.host:global.redis.port 로 채워집니다. |
redis.cache.port |
6379 |
Redis 인스턴스의 포트. |
redis.cache.sentinels |
[] |
호스트와 포트를 가진 센티넬 목록. |
redis.cache.mainname |
주요 서버 이름. 센티넬에만 해당합니다. | |
redis.cache.password.enabled |
false |
레지스트리에서 사용하는 Redis 캐시가 비밀번호로 보호되는지를 나타냅니다. |
redis.cache.password.secret |
gitlab-redis-secret |
Redis 비밀번호를 포함하는 비밀의 이름. shared-secrets 기능이 활성화되면 제공되지 않은 경우 자동으로 생성됩니다. |
redis.cache.password.key |
redis-password |
Redis 비밀번호가 저장된 비밀 키. |
redis.cache.sentinelpassword.enabled |
false |
Redis 센티넬이 비밀번호로 보호되는지 여부를 나타냅니다. redis.cache.sentinelpassword 가 비어 있으면 global.redis.sentinelAuth 의 값이 사용됩니다. redis.cache.sentinels 가 정의된 경우에만 사용됩니다. |
redis.cache.sentinelpassword.secret |
gitlab-redis-secret |
Redis 센티넬 비밀번호를 포함하는 비밀의 이름. |
redis.cache.sentinelpassword.key |
redis-sentinel-password |
Redis 센티넬 비밀번호가 저장된 비밀 키. |
redis.cache.db |
0 |
각 연결에 사용할 데이터베이스의 이름. |
redis.cache.dialtimeout |
0s |
Redis 인스턴스에 연결할 때의 시간 초과. 기본값은 시간 초과가 없습니다. |
redis.cache.readtimeout |
0s |
Redis 인스턴스에서 읽을 때의 시간 초과. 기본값은 시간 초과가 없습니다. |
redis.cache.writetimeout |
0s |
Redis 인스턴스에 쓸 때의 시간 초과. 기본값은 시간 초과가 없습니다. |
redis.cache.tls.enabled |
false |
true 로 설정하여 TLS를 활성화합니다. |
redis.cache.tls.insecure |
false |
TLS를 통해 연결할 때 서버 이름 검증을 비활성화하려면 true 로 설정합니다. |
redis.cache.pool.size |
10 |
최대 소켓 연결 수. 기본값은 10개의 연결입니다. |
redis.cache.pool.maxlifetime |
1h |
클라이언트가 연결을 종료하는 연결의 최대 연령. 기본값은 노수가 오래된 연결을 닫지 않습니다. |
redis.cache.pool.idletimeout |
300s |
비활성 연결을 닫기까지 대기할 시간입니다. |
차트 구성 예시
pullSecrets
pullSecrets
를 사용하면 개인 레지스트리에 인증하여 팟의 이미지를 가져올 수 있습니다.
개인 레지스트리와 해당 인증 방법에 대한 추가 세부정보는 Kubernetes 문서에서 확인할 수 있습니다.
다음은 pullSecrets
의 사용 예시입니다:
image:
repository: my.registry.repository
tag: latest
pullPolicy: Always
pullSecrets:
- name: my-secret-name
- name: my-secondary-secret-name
serviceAccount
이 섹션은 ServiceAccount를 생성할지 여부와 기본 액세스 토큰이 팟에 마운트될지 여부를 제어합니다.
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
automountServiceAccountToken |
Boolean | false |
기본 ServiceAccount 액세스 토큰이 팟에 마운트될지를 제어합니다. 특정 사이드카가 제대로 작동하는 데 필요하지 않는 한 이 옵션은 활성화하지 않아야 합니다 (예: Istio). |
enabled |
Boolean | false |
ServiceAccount를 사용할지 여부를 나타냅니다. |
tolerations
tolerations
를 사용하면 오염된 작업자 노드에 팟을 배치할 수 있습니다.
다음은 tolerations
의 사용 예시입니다:
tolerations:
- key: "node_label"
operator: "Equal"
value: "true"
effect: "NoSchedule"
- key: "node_label"
operator: "Equal"
value: "true"
effect: "NoExecute"
affinity
affinity
는 선택적 매개변수로, 다음 두 가지 중 하나 또는 모두를 설정할 수 있습니다:
-
podAntiAffinity
규칙:- 표현식에 해당하는 팟과 동일한 도메인에 팟을 스케줄하지 않도록 설정합니다.
- 두 가지 모드의
podAntiAffinity
규칙을 설정합니다: 필수(requiredDuringSchedulingIgnoredDuringExecution
) 및 선호(preferredDuringSchedulingIgnoredDuringExecution
).values.yaml
에서antiAffinity
변수를 사용하여 설정을soft
로 설정하여 선호 모드가 적용되도록 하거나,hard
로 설정하여 필수 모드가 적용되도록 합니다.
-
nodeAffinity
규칙:- 특정 존 또는 존에 속하는 노드에 팟을 스케줄합니다.
- 두 가지 모드의
nodeAffinity
규칙을 설정합니다: 필수(requiredDuringSchedulingIgnoredDuringExecution
) 및 선호(preferredDuringSchedulingIgnoredDuringExecution
).soft
로 설정할 경우 선호 모드가 적용되며,hard
로 설정할 경우 필수 모드가 적용됩니다. 이 규칙은registry
차트와gitlab
차트 및 모든 하위 차트에서만 구현됩니다. 단,webservice
및sidekiq
는 제외됩니다.
nodeAffinity
는 In
연산자만 구현합니다.
자세한 내용은 관련 Kubernetes 문서를 참조하세요.
다음 예시는 affinity
를 설정하며, nodeAffinity
와 antiAffinity
모두 hard
로 설정됩니다:
nodeAffinity: "hard"
antiAffinity: "hard"
affinity:
nodeAffinity:
key: "test.com/zone"
values:
- us-east1-a
- us-east1-b
podAntiAffinity:
topologyKey: "test.com/hostname"
주석
annotations
는 레지스트리 팟에 주석을 추가할 수 있게 해줍니다.
아래는 annotations
사용 예시입니다.
annotations:
kubernetes.io/example-annotation: annotation-value
서브 차트 활성화
우리가 선택한 컴파트먼트 서브 차트 구현 방식은 주어진 배포에서 원하지 않는 구성 요소를 비활성화할 수 있는 기능을 포함합니다. 이러한 이유로 먼저 결정해야 할 설정은 enabled
입니다.
기본적으로 레지스트리는 기본 설정으로 활성화되어 있습니다. 이를 비활성화하길 원하신다면 enabled: false
로 설정하세요.
image
구성
이 섹션은 이 서브 차트의 배포에서 사용되는 컨테이너 이미지의 설정을 자세히 설명합니다.
레지스트리의 포함된 버전과 pullPolicy
를 변경할 수 있습니다.
기본 설정:
tag: 'v4.10.0-gitlab'
pullPolicy: 'IfNotPresent'
service
구성
이 섹션은 서비스의 이름과 유형을 제어합니다.
이 설정들은 values.yaml
로 채워집니다.
기본적으로 서비스는 다음과 같이 구성됩니다:
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
name |
String | registry |
서비스의 이름을 구성합니다. |
type |
String | ClusterIP |
서비스의 유형을 구성합니다. |
externalPort |
Int | 5000 |
서비스가 노출하는 포트 |
internalPort |
Int | 5000 |
서비스로부터 요청을 수락하는 데 사용되는 포드의 포트 |
clusterIP |
String | null |
필요에 따라 사용자 정의 클러스터 IP를 구성할 수 있습니다. |
loadBalancerIP |
String | null |
필요에 따라 사용자 정의 로드 밸런서 IP 주소를 구성할 수 있습니다. |
ingress
구성
이 섹션은 레지스트리 인그레스를 제어합니다.
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
apiVersion |
String |
apiVersion 필드에 사용할 값입니다. |
|
annotations |
String | 이 필드는 Kubernetes Ingress에 대한 표준 annotations 와 정확히 일치합니다. |
|
configureCertmanager |
Boolean | Ingress 주석 cert-manager.io/issuer 및 acme.cert-manager.io/http01-edit-in-place 를 토글합니다. 더 많은 정보는 GitLab Pages의 TLS 요구 사항을 참조하세요. |
|
enabled |
Boolean | false |
서비스에 대한 Ingress 객체 생성 여부를 제어하는 설정입니다. false 일 경우 global.ingress.enabled 설정이 사용됩니다. |
tls.enabled |
Boolean | true |
false 로 설정하면 레지스트리 서브차트의 TLS가 비활성화됩니다. 이는 Ingress Controller 앞에 TLS 종료 프록시가 있는 경우와 같이 Ingress 수준에서 TLS 종료를 사용할 수 없는 경우에 유용합니다. |
tls.secretName |
String | 레지스트리 URL에 대한 유효한 인증서 및 키를 포함하는 Kubernetes TLS 비밀의 이름입니다. 설정되지 않을 경우 global.ingress.tls.secretName 이 대신 사용됩니다. 설정되지 않은 기본값입니다. |
TLS 구성
Container Registry는 TLS를 지원하여 다른 구성 요소와의 통신을 보호합니다,
nginx-ingress
를 포함하여.
TLS 구성을 위한 전제 조건:
- TLS 인증서에는 Registry 서비스 호스트 이름
(예:RELEASE-registry.default.svc
)이 Common
Name(CN) 또는 Subject Alternate Name(SAN)에 포함되어야 합니다. - TLS 인증서가 생성된 후:
- Kubernetes TLS Secret 생성
- CA 인증서로만 구성된 다른 Secret을
ca.crt
키와 함께 생성합니다.
TLS를 활성화하려면:
-
registry.tls.enabled
를true
로 설정합니다. -
global.hosts.registry.protocol
을https
로 설정합니다. - Secret 이름을
registry.tls.secretName
및global.certificates.customCAs
에 각각 전달합니다.
registry.tls.verify
가 true
일 때, CA 인증서 Secret
이름을 registry.tls.caSecretName
에 전달해야 합니다. 이는
자체 서명된 인증서 및 사용자 정의 인증 기관에 필요합니다. 이 Secret은 NGINX가 Registry의 TLS
인증서를 검증하는 데 사용됩니다.
예를 들어:
global:
certificates:
customCAs:
- secret: registry-tls-ca
hosts:
registry:
protocol: https
registry:
tls:
enabled: true
secretName: registry-tls
verify: true
caSecretName: registry-tls-ca
디버그 포트를 위한 TLS 구성
Registry 디버그 포트는 TLS를 지원합니다. 디버그 포트는
Kubernetes 생존성 및 준비 상태 검사에 사용되며, /metrics
엔드포인트를 Prometheus(활성화된 경우)용으로 노출합니다.
TLS는 registry.debug.tls.enabled
를 true
로 설정하여 활성화할 수 있습니다.
디버그 포트의 TLS 구성에서 사용할 전용 Kubernetes TLS Secret이 registry.debug.tls.secretName
에 제공될 수 있습니다.
전용 Secret이 지정되지 않은 경우, 디버그 구성은 레지스트리의 일반 TLS 구성과 registry.tls.secretName
을 공유하도록 되돌아갑니다.
Prometheus가 https
를 사용하여 /metrics/
엔드포인트를 스크랩하려면
인증서의 CommonName 속성이나 SubjectAlternativeName 항목에 대한 추가 구성이 필요합니다.
그 요구 사항은
TLS 활성화된 엔드포인트를 스크랩하기 위한 Prometheus 구성을 참조하세요.
networkpolicy
구성
이 섹션은 레지스트리의
NetworkPolicy를 제어합니다.
이 구성은 선택 사항이며, 레지스트리의 외부 발신 및 수신을 특정 엔드포인트로 제한하는 데 사용됩니다.
및 수신을 특정 엔드포인트로 제한하는 데 사용됩니다.
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
enabled |
Boolean | false |
이 설정은 레지스트리의 NetworkPolicy 를 활성화합니다. |
ingress.enabled |
Boolean | false |
true 로 설정 시, Ingress 네트워크 정책이 활성화됩니다. 이는 규칙이 지정되지 않은 경우 모든 Ingress 연결을 차단합니다. |
ingress.rules |
Array | [] |
Ingress 정책의 규칙으로, 자세한 내용은 https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource 및 아래 예제를 참조하세요. |
egress.enabled |
Boolean | false |
true 로 설정 시, Egress 네트워크 정책이 활성화됩니다. 이는 규칙이 지정되지 않은 경우 모든 외부 발신 연결을 차단합니다. |
egress.rules |
Array | [] |
외부 발신 정책의 규칙으로, 자세한 내용은 https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource 및 아래 예제를 참조하세요. |
모든 내부 엔드포인트에 대한 연결 방지를 위한 정책 예시
Registry 서비스는 일반적으로 오브젝트 스토리지에 대한 egress 연결, Docker 클라이언트로부터의 ingress 연결, DNS 조회를 위한 kube-dns를 필요로 합니다. 이는 Registry 서비스에 다음과 같은 네트워크 제약을 추가합니다:
-
10.0.0.0/8
포트 53에 대한 모든 egress 요청이 허용됩니다 (kubeDNS 용) -
10.0.0.0/8
에 대한 기타 egress 요청은 제한됩니다 -
10.0.0.0/8
외부의 egress 요청은 허용됩니다
레지스트리 서비스는 외부 오브젝트 스토리지의 이미지를 위해 공용 인터넷에 대한 아웃바운드 연결이 필요합니다.
networkpolicy:
enabled: true
egress:
enabled: true
# 다음 규칙은 모든 외부
# 엔드포인트로의 트래픽을 가능하게 하며,
# 로컬 네트워크는 제외합니다
# (DNS 요청 제외)
rules:
- to:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- port: 53
protocol: UDP
- to:
- ipBlock:
cidr: 0.0.0.0/0
except:
- 10.0.0.0/8
KEDA 구성하기
이 keda
섹션은 일반 HorizontalPodAutoscalers
대신 KEDA ScaledObjects
의 설치를 가능하게 합니다.
이 구성은 선택 사항이며, 사용자 정의 또는 외부 메트릭에 기반한 자동 스케일링이 필요할 때 사용할 수 있습니다.
대부분의 설정은 적용 가능한 경우 hpa
섹션에 설정된 값으로 기본값이 설정됩니다.
다음 조건이 참이면 CPU 및 메모리 트리거가 hpa
섹션에서 설정된 CPU 및 메모리 임계값에 따라 자동으로 추가됩니다:
-
triggers
가 설정되어 있지 않습니다. - 해당
request.cpu.request
또는request.memory.request
설정이 0이 아닌 값으로 설정되어 있습니다.
트리거가 설정되지 않으면 ScaledObject
가 생성되지 않습니다.
해당 설정에 대한 더 자세한 내용은 KEDA 문서를 참조하세요.
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
enabled |
Boolean | false |
KEDA ScaledObjects 를 사용하여 HorizontalPodAutoscalers 대신 활용합니다. |
pollingInterval |
Integer | 30 |
각 트리거를 확인하는 간격입니다. |
cooldownPeriod |
Integer | 300 |
마지막 트리거가 활성 상태로 보고된 후 리소스를 다시 0으로 스케일링하기 전 기다리는 기간입니다. |
minReplicaCount |
Integer | KEDA가 리소스를 축소할 최소 복제본 수로, 기본값은 hpa.minReplicas 입니다. |
|
maxReplicaCount |
Integer | KEDA가 리소스를 확장할 최대 복제본 수로, 기본값은 hpa.maxReplicas 입니다. |
|
fallback |
Map | KEDA의 폴백 구성으로, 문서를 참조하세요. | |
hpaName |
String | KEDA가 생성할 HPA 리소스의 이름으로, 기본값은 keda-hpa-{scaled-object-name} 입니다. |
|
restoreToOriginalReplicaCount |
Boolean |
ScaledObject 가 삭제된 후 목표 리소스를 원래 복제본 수로 되돌릴지 여부를 지정합니다. |
|
behavior |
Map | 업스케일 및 다운스케일 동작의 사양으로, 기본값은 hpa.behavior 입니다. |
|
triggers |
Array | 목표 리소스의 스케일링을 활성화하는 트리거 목록으로, 기본값은 hpa.cpu 및 hpa.memory 에서 계산된 트리거입니다. |
모든 내부 엔드포인트에 대한 연결을 방지하기 위한 정책 예시
Registry 서비스는 일반적으로 객체 저장소에 대한 egress 연결, Docker 클라이언트로부터의 ingress 연결, 그리고 DNS 조회를 위한 kube-dns를 필요로 합니다. 이는 Registry 서비스에 다음과 같은 네트워크 제한을 추가합니다:
-
10.0.0.0/8
포트 53에 대한 모든 egress 요청이 허용됩니다 (kubeDNS를 위해) -
10.0.0.0/8
에 대한 다른 egress 요청은 제한됩니다 -
10.0.0.0/8
외부에 대한 egress 요청은 허용됩니다
Registry 서비스는 외부 객체 저장소의 이미지를 위해 공용 인터넷에 대한 아웃바운드 연결을 필요로 합니다.
networkpolicy:
enabled: true
egress:
enabled: true
# 다음 규칙은 로컬
# 네트워크(및 DNS 요청 제외)를 제외한 모든 외부
# 엔드포인트에 대한 트래픽을 허용합니다.
rules:
- to:
- ipBlock:
cidr: 10.0.0.0/8
ports:
- port: 53
protocol: UDP
- to:
- ipBlock:
cidr: 0.0.0.0/0
except:
- 10.0.0.0/8
Registry 구성 정의
이 차트의 다음 속성은 기본 registry 컨테이너의 구성과 관련이 있습니다. GitLab과의 통합을 위해 가장 중요한 값만 노출됩니다. 이 통합에서는 JWT 인증 토큰을 통해 registry에 대한 인증을 제어하는 auth.token.x
설정을 사용합니다.
httpSecret
필드 httpSecret
은 secret
과 key
라는 두 가지 항목을 포함하는 맵입니다.
여기서 참조하는 키의 내용은 registry의 http.secret
값과 관련이 있습니다. 이 값은 암호학적으로 생성된 랜덤 문자열로 채워져야 합니다.
shared-secrets
작업은 제공되지 않은 경우 이 비밀을 자동으로 생성합니다. 이는 안전하게 생성된 128자리 알파-넘 문자 문자열로 채워지며 base64로 인코딩됩니다.
이 비밀을 수동으로 생성하려면:
kubectl create secret generic gitlab-registry-httpsecret --from-literal=secret=strongrandomstring
알림 비밀
알림 비밀은 다양한 방식으로 GitLab 애플리케이션에 콜백을 요청하는 데 사용되며, 예를 들어 Geo가 기본 및 보조 사이트 간에 Container Registry 데이터를 동기화하는 데 도움을 줍니다.
제공되지 않은 경우, shared-secrets
기능이 활성화되면 notificationSecret
비밀 객체가 자동으로 생성됩니다.
이 비밀을 수동으로 생성하려면:
kubectl create secret generic gitlab-registry-notification --from-literal=secret=[\"strongrandomstring\"]
그런 다음 설정을 진행합니다:
global:
# 자신의 비밀을 제공하기 위해
registry:
notificationSecret:
secret: gitlab-registry-notification
key: secret
# Geo를 활용하고 컨테이너 레지스트리를 동기화하려는 경우.
# 이 설정은 기본 사이트 구성에서만 정의합니다.
geo:
registry:
replication:
enabled: true
primaryApiUrl: <기본 레지스트리에 대한 URL>
위에서 생성한 비밀의 secret
값을 설정해야 합니다.
Redis 캐시 비밀
Redis 캐시 비밀은 global.redis.auth.enabled
가 true
로 설정된 경우에 사용됩니다.
shared-secrets
기능이 활성화되면, 제공되지 않은 경우 gitlab-redis-secret
비밀 객체가 자동으로 생성됩니다.
이 비밀을 수동으로 생성하려면 Redis 비밀번호 지침을 참조하세요.
authEndpoint
authEndpoint
필드는 문자열로, registry가 인증할 GitLab 인스턴스의 URL을 제공합니다.
값에는 프로토콜과 호스트 이름만 포함되어야 합니다. 차트 템플릿은 필요한 요청 경로를 자동으로 추가합니다. 결과 값은 컨테이너 내의 auth.token.realm
에 채워집니다. 예: authEndpoint: "https://gitlab.example.com"
기본적으로 이 필드는 Global Settings에서 설정한 GitLab 호스트 이름 구성으로 채워집니다.
certificate
certificate
필드는 secret
및 key
라는 두 항목을 포함하는 맵입니다.
secret
은 GitLab 인스턴스에서 생성한 토큰을 검증하는 데 사용될 인증서 번들을 포함하는 Kubernetes Secret의 이름을 포함하는 문자열입니다.
key
는 인증서 번들을 포함하는 Secret
에서 제공될 key
의 이름으로, registry 컨테이너에 auth.token.rootcertbundle
으로 제공됩니다.
기본 예시:
certificate:
secret: gitlab-registry
key: registry-auth.crt
readiness and liveness probe
기본적으로 /debug/health
에서 포트 5001
로 확인하는 readiness 및 liveness probe가 구성되어 있습니다. 이는 디버그 포트입니다.
validation
validation
필드는 registry에서 Docker 이미지 검증 프로세스를 제어하는 맵입니다. 이미지 검증이 활성화되면 registry는 manifests.urls.allow
필드 내에서 명시적으로 해당 레이어 URL을 허용하지 않는 한 외래 레이어가 있는 Windows 이미지를 거부합니다.
검증은 manifest 푸시 중에만 발생하므로, 이 섹션의 값 변경에 영향을 받지 않는 이미지는 이미 registry에 존재할 수 있습니다.
이미지 검증은 기본적으로 비활성화되어 있습니다.
이미지 검증을 활성화하려면 registry.validation.disabled: false
를 명시적으로 설정해야 합니다.
manifests
manifests
필드는 manifests에 특정한 검증 정책 구성을 허용합니다.
urls
섹션에는 allow
및 deny
필드가 모두 포함되어 있습니다. 검증을 통과하는 URL이 포함된 manifest 레이어는 allow
필드의 정규 표현식 중 하나와 일치해야 하며, deny
필드의 정규 표현식에는 일치하지 않아야 합니다.
Name | Type | Default | Description |
---|---|---|---|
referencelimit |
Int | 0 |
단일 manifest가 가질 수 있는 최대 참조 수로, 레이어, 이미지 구성 및 기타 manifests를 포함합니다. 0 으로 설정할 경우(기본값) 이 검증은 비활성화됩니다. |
payloadsizelimit |
Int | 0 |
manifest payload의 최대 데이터 크기(바이트)입니다. 0 으로 설정할 경우(기본값) 이 검증은 비활성화됩니다. |
urls.allow |
Array | [] |
manifests의 레이어에서 URL을 허용하는 정규 표현식 목록입니다. 비워두면(기본값) URL이 포함된 레이어는 거부됩니다. |
urls.deny |
Array | [] |
manifests의 레이어에서 URL을 제한하는 정규 표현식 목록입니다. 비워두면(기본값) urls.allow 목록을 통과한 URL이 있는 레이어는 거부됩니다. |
알림
notifications
필드는 Registry notifications를 구성하는 데 사용됩니다. 기본값으로 빈 해시를 가집니다.
이름 | тип | 기본값 | 설명 |
---|---|---|---|
endpoints |
Array | [] |
각 항목이 endpoint에 해당하는 항목 목록 |
events |
Hash | {} |
event 알림에 제공된 정보 |
예시 설정은 다음과 같이 보일 것입니다:
notifications:
endpoints:
- name: FooListener
url: https://foolistener.com/event
timeout: 500ms
# DEPRECATED: use `maxretries` instead https://gitlab.com/gitlab-org/container-registry/-/issues/1243.
# When using `maxretries`, `threshold` is ignored: https://gitlab.com/gitlab-org/container-registry/-/blob/master/docs/configuration.md?ref_type=heads#endpoints
threshold: 10
maxretries: 10
backoff: 1s
- name: BarListener
url: https://barlistener.com/event
timeout: 100ms
# DEPRECATED: use `maxretries` instead https://gitlab.com/gitlab-org/container-registry/-/issues/1243.
# When using `maxretries`, `threshold` is ignored: https://gitlab.com/gitlab-org/container-registry/-/blob/master/docs/configuration.md?ref_type=heads#endpoints
threshold: 3
maxretries: 5
backoff: 1s
events:
includereferences: true
hpa
hpa
필드는 registry 인스턴스의 수를 제어하는 객체입니다. 기본적으로 minReplicas
값이 2
, maxReplicas
값이 10으로 설정되어 있으며, cpu.targetAverageUtilization
이 75%로 구성됩니다.
저장소
storage:
secret:
key: config
extraKey:
storage
필드는 Kubernetes Secret 및 관련 키를 참조합니다. 이 비밀의 내용은 Registry Configuration: storage
에서 직접 가져옵니다. 더 자세한 내용은 해당 문서를 참조하십시오.
AWS s3 및
Google GCS 드라이버의 예시는 examples/objectstorage
에서 찾을 수 있습니다:
S3의 경우, 올바른 registry storage 권한을 부여했는지 확인하십시오. 저장소 구성에 대한 더 많은 정보는 Container Registry storage driver 관리 문서에서 확인할 수 있습니다.
storage
블록의 내용을 비밀에 넣고 다음 항목을 storage
맵에 제공하십시오:
-
secret
: YAML 블록을 포함하는 Kubernetes Secret의 이름. -
key
: 사용할 비밀의 키 이름. 기본값은config
입니다. -
extraKey
: (선택적) 비밀에서 추가 키의 이름으로, 이는 컨테이너 내에서/etc/docker/registry/storage/${extraKey}
에 마운트됩니다. 이는gcs
드라이버의keyfile
을 제공하는 데 사용될 수 있습니다.
# S3 사용 예시
kubectl create secret generic registry-storage \
--from-file=config=registry-storage.yaml
# JSON 키로 GCS 사용 예시
# - 참고: `registry.storage.extraKey=gcs.json`
kubectl create secret generic registry-storage \
--from-file=config=registry-storage.yaml \
--from-file=gcs.json=example-project-382839-gcs-bucket.json
저장소 드라이버에 대해 리디렉션을 비활성화할 수 있습니다, 이렇게 하면 모든 트래픽이 다른 백엔드로 리디렉션되는 대신 Registry 서비스로 흐릅니다:
storage:
secret: example-secret
key: config
redirect:
disable: true
filesystem
드라이버를 사용하기로 선택한 경우:
- 이 데이터에 대해 지속적인 볼륨을 제공해야 합니다.
-
hpa.minReplicas
는1
로 설정되어야 합니다. -
hpa.maxReplicas
는1
로 설정되어야 합니다.
회복력과 단순성을 위해 s3
, gcs
, azure
또는 기타 호환 가능한 객체 저장소와 같은 외부 서비스를 사용하는 것이 좋습니다.
참고:
차트는 기본적으로 사용자가 지정하지 않는 한 이 구성에 delete.enabled: true
를 채워 넣습니다. 이는 기본적으로 MinIO의 사용 및 Linux 패키지와 일치하도록 기대되는 동작을 유지합니다. 사용자가 제공한 값은 이 기본값을 초과합니다.
middleware.storage
middleware.storage
의 구성은 업스트림 규약을 따릅니다.
구성은 꽤 일반적이며 유사한 패턴을 따릅니다:
middleware:
# https://gitlab.com/gitlab-org/container-registry/-/blob/master/docs/configuration.md#middleware 참조
storage:
- name: cloudfront
options:
baseurl: https://abcdefghijklmn.cloudfront.net/
# `privatekey`는 privatekey Secret의 내용으로 자동 채워집니다.
privatekeySecret:
secret: cloudfront-secret-name
# "key" 값은 PEM 저장소의 파일 이름을 생성하는 데 사용됩니다:
# /etc/docker/registry/middleware.storage/<index>/<key>
key: private-key-ABC.pem
keypairid: ABCEDFGHIJKLMNOPQRST
위 코드 내 options.privatekeySecret
는 PEM 파일 내용에 해당하는 generic
Kubernetes 비밀입니다:
kubectl create secret generic cloudfront-secret-name --type=kubernetes.io/ssh-auth --from-file=private-key-ABC.pem=pk-ABCEDFGHIJKLMNOPQRST.pem
업스트림에서 사용되는 privatekey
는 privatekey Secret에서 차트에 의해 자동 채워지며 지정된 경우 무시됩니다.
keypairid
변형
다양한 공급자는 동일한 구조에 대해 서로 다른 필드 이름을 사용합니다:
공급자 | 필드 이름 |
---|---|
Google CDN | keyname |
CloudFront | keypairid |
주석:
현재 middleware.storage
섹션의 구성만 지원됩니다.
debug
디버그 포트는 기본적으로 활성화되어 있으며, 생존성/준비성 프로브에 사용됩니다. 추가적으로, metrics
값을 통해 Prometheus 메트릭을 활성화할 수 있습니다.
debug:
addr:
port: 5001
metrics:
enabled: true
health
health
속성은 선택적이며, 저장 드라이버의 백엔드 저장소에 대한 주기적인 건강 검사를 위한 기본 설정을 포함합니다. 자세한 내용은 Docker의 구성 문서를 참조하세요.
health:
storagedriver:
enabled: false
interval: 10s
threshold: 3
reporting
reporting
속성은 선택적이며 보고를 활성화합니다.
reporting:
sentry:
enabled: true
dsn: 'https://<key>@sentry.io/<project>'
environment: 'production'
profiling
profiling
속성은 선택적이며 지속적인 프로파일링을 활성화합니다.
profiling:
stackdriver:
enabled: true
credentials:
secret: gitlab-registry-profiling-creds
key: credentials
service: gitlab-registry
database
database
속성은 선택적이며 메타데이터 데이터베이스를 활성화합니다.
이 기능을 활성화하기 전에 관리 문서를 참조하세요.
주석: 이 기능은 PostgreSQL 12 이상이 필요합니다.
database:
enabled: true
host: registry.db.example.com
port: 5432
user: registry
password:
secret: gitlab-postgresql-password
key: postgresql-registry-password
dbname: registry
sslmode: verify-full
ssl:
secret: gitlab-registry-postgresql-ssl
clientKey: client-key.pem
clientCertificate: client-cert.pem
serverCA: server-ca.pem
connecttimeout: 5s
draintimeout: 2m
preparedstatements: false
primary: 'primary.record.fqdn'
pool:
maxidle: 25
maxopen: 25
maxlifetime: 5m
maxidletime: 5m
migrations:
enabled: true
activeDeadlineSeconds: 3600
backoffLimit: 6
backgroundMigrations:
enabled: true
maxJobRetries: 3
jobInterval: 10s
데이터베이스 관리
데이터베이스 생성에 대한 자세한 내용은 컨테이너 레지스트리 메타데이터 데이터베이스 페이지를 참조하세요.
gc
속성
gc
속성은 온라인 가비지 컬렉션 옵션을 제공합니다.
온라인 가비지 컬렉션을 사용하려면 메타데이터 데이터베이스가 활성화되어야 합니다. 데이터베이스를 사용할 때 온라인 가비지 컬렉션을 사용해야 하지만, 유지 관리 및 디버깅을 위해 임시로 온라인 가비지 컬렉션을 비활성화할 수 있습니다.
gc:
disabled: false
maxbackoff: 24h
noidlebackoff: false
transactiontimeout: 10s
reviewafter: 24h
manifests:
disabled: false
interval: 5s
blobs:
disabled: false
interval: 5s
storagetimeout: 5s
Redis 캐시
참고:
Redis 캐시는 16.4 버전 이상에서 베타 기능입니다. 이 기능을 활성화하기 전에 피드백 문제와 관련 문서를 검토하세요.
redis.cache
속성은 선택 사항이며 Redis 캐시와 관련된 옵션을 제공합니다. 레지스트리와 함께 redis.cache
를 사용하려면 메타데이터 데이터베이스를 활성화해야 합니다.
예를 들어:
redis:
cache:
enabled: true
host: localhost
port: 16379
password:
secret: gitlab-redis-secret
key: redis-password
db: 0
dialtimeout: 10ms
readtimeout: 10ms
writetimeout: 10ms
tls:
enabled: true
insecure: true
pool:
size: 10
maxlifetime: 1h
idletimeout: 300s
클러스터
redis.rateLimiting.cluster
속성은 Redis 클러스터에 연결할 호스트 및 포트 목록입니다. 예를 들어:
redis:
cache:
enabled: true
host: redis.example.com
cluster:
- host: host1.example.com
port: 6379
- host: host2.example.com
port: 6379
센티넬
redis.cache
는 global.redis.sentinels
구성을 사용할 수 있습니다. 로컬 값은 제공될 수 있으며 글로벌 값보다 우선합니다. 예를 들어:
redis:
cache:
enabled: true
host: redis.example.com
sentinels:
- host: sentinel1.example.com
port: 16379
- host: sentinel2.example.com
port: 16379
센티넬 비밀번호 지원
- 도입됨 GitLab 17.2에서.
redis.cache
는 또한 global.redis.sentinelAuth
구성을 사용하여 Redis 센티넬의 인증 비밀번호를 사용할 수 있습니다. 로컬 값은 제공될 수 있으며 글로벌 값보다 우선합니다. 예를 들어:
redis:
cache:
enabled: true
host: redis.example.com
sentinels:
- host: sentinel1.example.com
port: 16379
- host: sentinel2.example.com
port: 16379
sentinelpassword:
enabled: true
secret: registry-redis-sentinel
key: password
Redis 속도 제한기
경고:
Redis 속도 제한 기능은 개발 중입니다.
기능에 대한 자세한 내용은 제공되는 대로 이 섹션에 추가됩니다.
redis.rateLimiting
속성은 선택 사항이며 다음과 관련된 옵션을 제공합니다.
예를 들어:
redis:
rateLimiting:
enabled: true
host: localhost
port: 16379
username: registry
password:
secret: gitlab-redis-secret
key: redis-password
db: 0
dialtimeout: 10ms
readtimeout: 10ms
writetimeout: 10ms
tls:
enabled: true
insecure: true
pool:
size: 10
maxlifetime: 1h
idletimeout: 300s
가비지 수집
Docker 레지스트리는 시간이 지남에 따라 불필요한 데이터를 축적하며, 이를 사용하여 가비지 수집을 통해 해제할 수 있습니다.
현재로는 이 차트와 함께 가비지 수집을 실행하는 완전 자동화되거나 예약된 방법이 없습니다.
경고:
메타데이터 데이터베이스와 함께 온라인 가비지 수집을 사용해야 합니다. 메타데이터 데이터베이스로 수동 가비지 수집을 사용하면 데이터 손실이 발생합니다. 온라인 가비지 수집은 수동 가비지 수집을 완전히 대체합니다.
수동 가비지 수집
수동 가비지 수집을 위해서는 먼저 레지스트리를 읽기 전용 모드로 전환해야 합니다. 이미
Helm을 사용하여 GitLab 차트를 설치했으며, 이를 mygitlab
라고 명명하고 gitlabns
네임스페이스에 설치했다고 가정합니다.
아래 명령어에서 이러한 값을 실제 구성에 맞게 교체하세요.
# https://github.com/helm/helm/issues/2948로 인해 --reuse-values에 의존할 수 없으므로 현재 구성을 가져옵니다.
helm get values mygitlab > mygitlab.yml
# Helm 설치를 업그레이드하고 레지스트리를 읽기 전용으로 설정합니다.
# --wait 매개변수는 Helm이 모든 리소스가 준비 상태가 될 때까지 기다리게 하므로 안전하게 계속할 수 있습니다.
helm upgrade mygitlab gitlab/gitlab -f mygitlab.yml --set registry.maintenance.readonly.enabled=true --wait
# 이제 레지스트리가 읽기 전용 모드에 있으므로 레지스트리 Pod 중 하나의 이름을 가져옵니다.
# Pod 이름을 기록하고 아래의 '<registry-pod>' 자리 표시자를 해당 값으로 교체하세요.
# Windows의 cmd.exe와 함께 사용하는 경우 작은따옴표를 큰따옴표로 교체하세요 (' => ") .
kubectl get pods -n gitlabns -l app=registry -o jsonpath='{.items[0].metadata.name}'
# 실제 가비지 수집을 실행합니다. '-m' 매개변수를 정말로 원하신다면 레지스트리의 매뉴얼을 확인하세요.
kubectl exec -n gitlabns <registry-pod> -- /bin/registry garbage-collect -m /etc/docker/registry/config.yml
# 레지스트리를 원래 상태로 되돌립니다.
helm upgrade mygitlab gitlab/gitlab -f mygitlab.yml --wait
# 모두 완료되었습니다 :)
컨테이너 레지스트리에 대한 관리 명령 실행
관리 명령은 컨테이너 레지스트리에서만 실행할 수 있으며, 여기에는 registry
바이너리와 필수 구성 파일이 모두 제공되는 레지스트리 pod에서만 가능합니다. 이슈 #2629에서 툴박스 pod에서 이 기능을 제공하는 방법을 논의 중입니다.
관리 명령을 실행하려면:
-
레지스트리 pod에 연결합니다:
kubectl exec -it <registry-pod> -- bash
-
레지스트리 pod 내부에 들어가면
registry
바이너리가PATH
에 있으며 직접 사용할 수 있습니다. 구성 파일은/etc/docker/registry/config.yml
에 있습니다. 다음 예제는 데이터베이스 마이그레이션의 상태를 확인합니다:registry database migrate status /etc/docker/registry/config.yml
추가 세부정보 및 다른 사용 가능한 명령어에 대해서는 관련 문서를 참조하세요: