컨테이너 레지스트리 메타데이터 데이터베이스 관리

Tier: Free, Premium, Ultimate
Offering: Self-Managed
Status: Beta

메타데이터 데이터베이스는 온라인 가비지 수집을 포함한 많은 새로운 레지스트리 기능을 활성화하고 많은 레지스트리 작업의 효율성을 높입니다. 이 페이지에는 데이터베이스를 생성하는 방법에 대한 정보가 포함되어 있습니다.

메타데이터 데이터베이스 기능 지원

기존 레지스트리를 메타데이터 데이터베이스로 마이그레이션하고 온라인 가비지 수집을 사용할 수 있습니다.

일부 데이터베이스 기능은 GitLab.com 전용이며, 레지스트리 데이터베이스의 자동 프로비저닝은 사용할 수 없습니다. 컨테이너 레지스트리 데이터베이스와 관련된 기능 지원 테이블을 피드백 이슈에서 확인하세요.

데이터베이스 생성

다음 단계를 따라 데이터베이스와 역할을 매뉴얼으로 생성합니다.

note
이 지침은 번들 PostgreSQL 서버를 사용하는 것을 가정합니다. 직접 서버를 사용하는 경우 연결 방법에 약간의 차이가 있을 수 있습니다.
  1. 데이터베이스 암호를 사용하여 시크릿을 생성합니다.

    kubectl create secret generic RELEASE_NAME-registry-database-password --from-literal=password=randomstring
    
  2. 데이터베이스 인스턴스에 로그인합니다.

    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
    
  3. 데이터베이스 사용자를 생성합니다.

    CREATE ROLE registry WITH LOGIN;
    
  4. 데이터베이스 사용자 암호를 설정합니다.

    1. 암호를 가져옵니다.

      kubectl get secret RELEASE_NAME-registry-database-password -o jsonpath="{.data.password}" | base64 --decode
      
    2. psql 프롬프트에서 암호를 설정합니다.

      \password registry
      
  5. 데이터베이스를 생성합니다.

    CREATE DATABASE registry WITH OWNER registry;
    
  6. PostgreSQL 명령줄에서 안전하게 나가고, 컨테이너에서 exit를 사용하여 나갑니다.

    template1=# exit
    ...@gitlab-postgresql-0/$ exit
    

Helm 차트 설치를 위한 메타데이터 데이터베이스 활성화

필수 컴포넌트:

  • GitLab 16.4 이상.
  • PostgreSQL 데이터베이스 버전 12 이상, 레지스트리 pod에서 접근 가능해야 함.
  • Kubernetes 클러스터 및 Helm 배포에 대한 액세스.
  • 레지스트리 pod에 대한 SSH 액세스.

귀하의 상황에 맞는 지침을 따르세요:

  • 신규 설치 또는 컨테이너 레지스트리를 처음으로 활성화합니다.
  • 기존 컨테이너 이미지를 메타데이터 데이터베이스로 마이그레이션합니다:
note
다양한 테스트 및 사용자 레지스트리의 가져오기 시간에 대한 디렉터리을 보려면 이슈 423459의 테이블을 참조하세요. 귀하의 레지스트리 배포는 고유합니다. 가져오기 시간이 해당 이슈에서 보고된 시간보다 길 수 있습니다.

시작하기 전에

Registry 관리 가이드의 시작하기 전에 섹션을 읽으세요.

신규 설치

데이터베이스를 활성화하려면:

  1. 데이터베이스 및 Kubernetes 시크릿 생성.
  2. 릴리스의 현재 Helm 값 가져와 파일로 저장합니다. 예를 들어, gitlab이라는 릴리스와 values.yml이라는 파일의 경우:

    helm get values gitlab > values.yml
    
  3. 다음 줄을 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  # 이 옵션은 레지스트리 배포의 일부로 스키마 마이그레이션을 실행합니다
    
  4. 선택 사항. 스키마 마이그레이션이 올바르게 적용되었는지 확인할 수 있습니다. 다음 중 하나를 선택할 수 있습니다:
    • 마이그레이션 작업의 로그 출력을 확인합니다. 예:

      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 및 구성된 오브젝트 스토리지 간의 네트워크 지연.
note
마이그레이션 프로세스를 자동화하기 위한 작업은 이슈 5293에서 추적 중입니다.

일괄 마이그레이션

일괄 마이그레이션을 수행할 때 다음 사항에 유의하세요:

  • 마이그레이션이 진행 중일 때 레지스트리는 읽기 전용 모드여야 합니다.
  • 마이그레이션이 실행 중인 Pod가 종료된 경우, 프로세스를 완전히 다시 시작해야 합니다. 이 프로세스를 개선하기 위한 작업은 이슈 5293에서 추적 중입니다.
  1. 데이터베이스 및 Kubernetes 시크릿 생성.
  2. 릴리스의 현재 Helm 값 가져와 파일로 저장합니다.
    예를 들어, gitlab이라는 릴리스와 values.yml이라는 파일의 경우:

    helm get values gitlab > values.yml
    
  3. values.yml 파일에서 registry: 섹션을 찾아 database 섹션을 추가하고, maintenance.readonly.enabled 플래그를 true로 설정하고 migrations.enabledtrue로 설정하세요:

    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  # 이 옵션은 레지스트리 배포의 일부로 스키마 마이그레이션을 실행합니다
    
  4. 배포의 변경 사항을 적용하기 위해 Helm 설치를 업그레이드하세요:

    helm upgrade gitlab gitlab/gitlab -f values.yml
    
  5. 예를 들어, gitlab-registry-5ddcd9f486-bvb57라는 pod에 SSH로 연결하세요:

    kubectl exec -ti gitlab-registry-5ddcd9f486-bvb57 bash
    
  6. 홈 디렉터리로 이동한 후 다음 명령을 실행하세요:

    cd ~
    /usr/bin/registry database import /etc/docker/registry/config.yml
    
  7. 레지스트리 구성을 업데이트하여 읽기 전용 모드를 비활성화합니다:

    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
    
  8. 배포의 변경 사항을 적용하기 위해 Helm 설치를 업그레이드하세요:

    helm upgrade gitlab gitlab/gitlab -f values.yml
    

이제 모든 작업에 메타데이터 데이터베이스를 사용할 수 있습니다!

세 단계의 이전

caution
알려진 제한 사항(https://gitlab.com/gitlab-org/charts/gitlab/-/issues/5292)으로 인해 Helm 차트 설치에 대한 세 단계 프로세스는 아직 사용할 수 없습니다.