컨테이너 레지스트리 메타데이터 데이터베이스 관리
Offering: Self-Managed
Status: Beta
- GitLab 16.4에서 베타 기능으로 소개되었습니다.
메타데이터 데이터베이스는 온라인 가비지 수집을 포함한 많은 새로운 레지스트리 기능을 활성화하고 많은 레지스트리 작업의 효율성을 높입니다. 이 페이지에는 데이터베이스를 생성하는 방법에 대한 정보가 포함되어 있습니다.
메타데이터 데이터베이스 기능 지원
기존 레지스트리를 메타데이터 데이터베이스로 마이그레이션하고 온라인 가비지 수집을 사용할 수 있습니다.
일부 데이터베이스 기능은 GitLab.com 전용이며, 레지스트리 데이터베이스의 자동 프로비저닝은 사용할 수 없습니다. 컨테이너 레지스트리 데이터베이스와 관련된 기능 지원 테이블을 피드백 이슈에서 확인하세요.
데이터베이스 생성
다음 단계를 따라 데이터베이스와 역할을 매뉴얼으로 생성합니다.
-
데이터베이스 암호를 사용하여 시크릿을 생성합니다.
kubectl create secret generic RELEASE_NAME-registry-database-password --from-literal=password=randomstring
-
데이터베이스 인스턴스에 로그인합니다.
kubectl exec -it $(kubectl get pods -l app.kubernetes.io/name=postgresql -o custom-columns=NAME:.metadata.name --no-headers) -- bash
PGPASSWORD=${POSTGRES_POSTGRES_PASSWORD} psql -U postgres -d template1
-
데이터베이스 사용자를 생성합니다.
CREATE ROLE registry WITH LOGIN;
-
데이터베이스 사용자 암호를 설정합니다.
-
암호를 가져옵니다.
kubectl get secret RELEASE_NAME-registry-database-password -o jsonpath="{.data.password}" | base64 --decode
-
psql
프롬프트에서 암호를 설정합니다.\password registry
-
-
데이터베이스를 생성합니다.
CREATE DATABASE registry WITH OWNER registry;
-
PostgreSQL 명령줄에서 안전하게 나가고, 컨테이너에서
exit
를 사용하여 나갑니다.template1=# exit ...@gitlab-postgresql-0/$ exit
Helm 차트 설치를 위한 메타데이터 데이터베이스 활성화
필수 컴포넌트:
- GitLab 16.4 이상.
- PostgreSQL 데이터베이스 버전 12 이상, 레지스트리 pod에서 접근 가능해야 함.
- Kubernetes 클러스터 및 Helm 배포에 대한 액세스.
- 레지스트리 pod에 대한 SSH 액세스.
귀하의 상황에 맞는 지침을 따르세요:
- 신규 설치 또는 컨테이너 레지스트리를 처음으로 활성화합니다.
- 기존 컨테이너 이미지를 메타데이터 데이터베이스로 마이그레이션합니다:
- 일괄 마이그레이션. 상대적으로 작은 레지스트리 또는 다운타임을 피할 필요가 없는 경우에만 추천됩니다.
- 삼단계 마이그레이션. 큰 컨테이너 레지스트리에 권장됩니다.
시작하기 전에
Registry 관리 가이드의 시작하기 전에 섹션을 읽으세요.
신규 설치
데이터베이스를 활성화하려면:
- 데이터베이스 및 Kubernetes 시크릿 생성.
-
릴리스의 현재 Helm 값 가져와 파일로 저장합니다. 예를 들어,
gitlab
이라는 릴리스와values.yml
이라는 파일의 경우:helm get values gitlab > values.yml
-
다음 줄을
values.yml
파일에 추가하세요:registry: enabled: true database: enabled: true name: registry # 위에서 생성한 데이터베이스 이름과 일치해야 함 user: registry # 위에서 생성한 데이터베이스 사용자 이름과 일치해야 함 password: secret: gitlab-registry-database-password # 시크릿 이름과 일치해야 함 key: password # 암호를 읽기 위한 시크릿 키와 일치해야 함 sslmode: verify-full ssl: secret: gitlab-registry-postgresql-ssl # 이 시크릿은 매뉴얼으로 생성해야 함 clientKey: client-key.pem clientCertificate: client-cert.pem serverCA: server-ca.pem migrations: enabled: true # 이 옵션은 레지스트리 배포의 일부로 스키마 마이그레이션을 실행합니다
- 선택 사항. 스키마 마이그레이션이 올바르게 적용되었는지 확인할 수 있습니다.
다음 중 하나를 선택할 수 있습니다:
-
마이그레이션 작업의 로그 출력을 확인합니다. 예:
kubectl logs jobs/gitlab-registry-migrations-1 ... OK: applied 154 migrations in 13.752s
-
또는, PostgreSQL 데이터베이스에 연결하여
schema_migrations
테이블을 쿼리합니다:SELECT * FROM schema_migrations;
모든 행에
applied_at
열의 타임스탬프가 채워졌는지 확인하세요.
-
이제 레지스트리는 메타데이터 데이터베이스를 사용할 준비가 되었습니다!
기존 레지스트리
기존 컨테이너 레지스트리 데이터를 일괄 또는 삼단계로 마이그레이션할 수 있습니다. 마이그레이션 기간에 영향을 미치는 여러 가지 요소가 있습니다:
- 기존 레지스트리 데이터의 크기.
- 귀하의 PostgreSQL 인스턴스의 사양.
- 클러스터에서 실행 중인 레지스트리 pod의 수.
- 레지스트리, PostgreSQL 및 구성된 오브젝트 스토리지 간의 네트워크 지연.
일괄 마이그레이션
일괄 마이그레이션을 수행할 때 다음 사항에 유의하세요:
- 마이그레이션이 진행 중일 때 레지스트리는
읽기 전용
모드여야 합니다. - 마이그레이션이 실행 중인 Pod가 종료된 경우, 프로세스를 완전히 다시 시작해야 합니다. 이 프로세스를 개선하기 위한 작업은 이슈 5293에서 추적 중입니다.
- 데이터베이스 및 Kubernetes 시크릿 생성.
-
릴리스의 현재 Helm 값 가져와 파일로 저장합니다.
예를 들어,gitlab
이라는 릴리스와values.yml
이라는 파일의 경우:helm get values gitlab > values.yml
-
values.yml
파일에서registry:
섹션을 찾아database
섹션을 추가하고,maintenance.readonly.enabled
플래그를true
로 설정하고migrations.enabled
를true
로 설정하세요:registry: priorityClassName: system-node-critical enabled: true maintenance: readonly: enabled: true # 마이그레이션이 실행 중일 때는 true로 유지되어야 합니다 database: enabled: true name: registry # 위에서 생성한 데이터베이스 이름과 일치해야 함 user: registry # 위에서 생성한 데이터베이스 사용자 이름과 일치해야 함 password: secret: gitlab-registry-database-password # 시크릿 이름과 일치해야 함 key: password # 암호를 읽기 위한 시크릿 키와 일치해야 함 sslmode: verify-full ssl: secret: gitlab-registry-postgresql-ssl # 이 시크릿은 매뉴얼으로 생성해야 함 clientKey: client-key.pem clientCertificate: client-cert.pem serverCA: server-ca.pem migrations: enabled: true # 이 옵션은 레지스트리 배포의 일부로 스키마 마이그레이션을 실행합니다
-
배포의 변경 사항을 적용하기 위해 Helm 설치를 업그레이드하세요:
helm upgrade gitlab gitlab/gitlab -f values.yml
-
예를 들어,
gitlab-registry-5ddcd9f486-bvb57
라는 pod에 SSH로 연결하세요:kubectl exec -ti gitlab-registry-5ddcd9f486-bvb57 bash
-
홈 디렉터리로 이동한 후 다음 명령을 실행하세요:
cd ~ /usr/bin/registry database import /etc/docker/registry/config.yml
-
레지스트리 구성을 업데이트하여 읽기 전용 모드를 비활성화합니다:
registry: enabled: true maintenance: readonly: enabled: false database: enabled: true name: registry user: registry password: secret: gitlab-registry-database-password key: password migrations: enabled: true
-
배포의 변경 사항을 적용하기 위해 Helm 설치를 업그레이드하세요:
helm upgrade gitlab gitlab/gitlab -f values.yml
이제 모든 작업에 메타데이터 데이터베이스를 사용할 수 있습니다!