3단계 가져오기
GitLab v19.5Offering: GitLab Self-Managed
요약
기존 컨테이너 레지스트리 메타데이터를 가져옵니다. 사용자들은 1 단계 가져오기가 시간당 2 ~ 4 TB 속도로 완료되었다고 보고했습니다. 1 단계가 진행되는 동안에도 레지스트리를 평소대로 사용할 수 있습니다. /etc/gitlab/gitlab.rb 파일의 database 섹션에서 데이터베이스가 비활성화되어 있는지 확인합니다.
기존 컨테이너 레지스트리 메타데이터를 가져옵니다. 다음 절차는 대규모 레지스트리(200 GiB 이상)이거나 가져오기를 완료하는 동안 중단 시간을 최소화하려는 경우에 권장합니다.
리포지터리 사전 가져오기(1 단계)#
사용자들은 1 단계 가져오기가 시간당 2 ~ 4 TB 속도로 완료되었다고 보고했습니다. 속도가 느린 경우 100TB 이상의 데이터를 가진 레지스트리는 48 시간 넘게 걸릴 수 있습니다.
1 단계가 진행되는 동안에도 레지스트리를 평소대로 사용할 수 있습니다.
-
/etc/gitlab/gitlab.rb파일의database섹션에서 데이터베이스가 비활성화되어 있는지 확인합니다.registry['database'] = { 'enabled' => false, # Must be false! } -
파일을 저장하고 GitLab을 재구성합니다.
-
첫 번째 단계를 실행해 가져오기를 시작합니다.
sudo gitlab-ctl registry-database import --step-one --log-to-stdout
-
/etc/gitlab/gitlab.rb파일의database섹션에서 데이터베이스가 비활성화되어 있는지 확인합니다.registry['database'] = { 'enabled' => false, # Must be false! } -
파일을 저장하고 GitLab을 재구성합니다.
-
첫 번째 단계를 실행해 가져오기를 시작합니다.
sudo -u registry gitlab-ctl registry-database import --step-one --log-to-stdout
사전 요구 사항:
- 외부 데이터베이스를 생성합니다.
-
/etc/gitlab/gitlab.rb파일에database섹션을 추가하되, 메타데이터 데이터베이스는 비활성화된 상태로 시작합니다.registry['database'] = { 'enabled' => false, # Must be false! 'host' => '<registry_database_host_placeholder_change_me>', 'port' => 5432, # Default, but set to the port of your database instance if it differs. 'user' => '<registry_database_username_placeholder_change_me>', 'password' => '<registry_database_placeholder_change_me>', 'dbname' => '<registry_database_name_placeholder_change_me>', 'sslmode' => 'require', # See the PostgreSQL documentation for additional information https://www.postgresql.org/docs/16/libpq-ssl.html. 'sslcert' => '</path/to/cert.pem>', 'sslkey' => '</path/to/private.key>', 'sslrootcert' => '</path/to/ca.pem>' } -
파일을 저장하고 GitLab을 재구성합니다.
-
아직 적용하지 않았다면 데이터베이스 마이그레이션을 적용합니다.
-
첫 번째 단계를 실행해 가져오기를 시작합니다.
sudo gitlab-ctl registry-database import --step-one
필요한 중단 시간을 줄이려면 다음 단계를 가능한 한 빨리 예약하는 것이 좋습니다. 1 단계가 완료된 뒤 일주일 이내가 이상적입니다. 1 단계와 2 단계 사이에 레지스트리에 새로 기록된 데이터는 2 단계에 걸리는 시간을 늘립니다.
전체 리포지터리 데이터 가져오기(2 단계)#
이 단계에서는 레지스트리를 read-only 모드로 설정해야 합니다.
다만 이 단계는 1 단계보다 약 90% 빠르게 완료됩니다.
2 단계를 실행하는 동안 필요한 중단 시간을 충분히 확보합니다.
-
레지스트리가
read-only모드로 설정되어 있는지 확인합니다./etc/gitlab/gitlab.rb를 편집해registry['storage']구성에maintenance섹션을 추가합니다. 예를 들어gs://my-company-container-registry버킷을 사용하는gcs기반 레지스트리라면 구성은 다음과 같습니다.## Object Storage - Container Registry registry['storage'] = { 'gcs' => { 'bucket' => '<my-company-container-registry>', 'chunksize' => 5242880 }, 'maintenance' => { 'readonly' => { 'enabled' => true # Must be set to true. } } } -
파일을 저장하고 GitLab을 재구성합니다.
-
가져오기의 2 단계를 실행합니다.
sudo gitlab-ctl registry-database import --step-two --log-to-stdout -
명령이 성공적으로 완료되면 모든 이미지를 완전히 가져온 상태입니다. 이제 데이터베이스를 활성화하고 구성에서 읽기 전용 모드를 해제한 다음 레지스트리 서비스를 시작할 수 있습니다.
registry['database'] = { 'enabled' => true, # Must be set to true! } ## Object Storage - Container Registry registry['storage'] = { 'gcs' => { 'bucket' => '<my-company-container-registry>', 'chunksize' => 5242880 }, 'maintenance' => { # This section can be removed. 'readonly' => { 'enabled' => false } } } -
파일을 저장하고 GitLab을 재구성합니다.
-
레지스트리가
read-only모드로 설정되어 있는지 확인합니다./etc/gitlab/gitlab.rb를 편집해registry['storage']구성에maintenance섹션을 추가합니다. 예를 들어gs://my-company-container-registry버킷을 사용하는gcs기반 레지스트리라면 구성은 다음과 같습니다.## Object Storage - Container Registry registry['storage'] = { 'gcs' => { 'bucket' => '<my-company-container-registry>', 'chunksize' => 5242880 }, 'maintenance' => { 'readonly' => { 'enabled' => true # Must be set to true. } } } -
파일을 저장하고 GitLab을 재구성합니다.
-
가져오기의 2 단계를 실행합니다.
sudo -u registry gitlab-ctl registry-database import --step-two --log-to-stdout -
명령이 성공적으로 완료되면 모든 이미지를 완전히 가져온 상태입니다. 이제 데이터베이스를 활성화하고 구성에서 읽기 전용 모드를 해제한 다음 레지스트리 서비스를 시작할 수 있습니다.
registry['database'] = { 'enabled' => true, # Must be set to true! } ## Object Storage - Container Registry registry['storage'] = { 'gcs' => { 'bucket' => '<my-company-container-registry>', 'chunksize' => 5242880 }, 'maintenance' => { # This section can be removed. 'readonly' => { 'enabled' => false } } } -
파일을 저장하고 GitLab을 재구성합니다.
-
레지스트리가
read-only모드로 설정되어 있는지 확인합니다./etc/gitlab/gitlab.rb를 편집해registry['storage']구성에maintenance섹션을 추가합니다. 예를 들어gs://my-company-container-registry버킷을 사용하는gcs기반 레지스트리라면 구성은 다음과 같습니다.## Object Storage - Container Registry registry['storage'] = { 'gcs' => { 'bucket' => '<my-company-container-registry>', 'chunksize' => 5242880 }, 'maintenance' => { 'readonly' => { 'enabled' => true # Must be set to true. } } } -
파일을 저장하고 GitLab을 재구성합니다.
-
가져오기의 2 단계를 실행합니다.
sudo gitlab-ctl registry-database import --step-two -
명령이 성공적으로 완료되면 모든 이미지를 완전히 가져온 상태입니다. 이제 데이터베이스를 활성화하고 구성에서 읽기 전용 모드를 해제한 다음 레지스트리 서비스를 시작할 수 있습니다.
registry['database'] = { 'enabled' => true, # Must be set to true! 'host' => '<registry_database_host_placeholder_change_me>', 'port' => 5432, # Default, but set to the port of your database instance if it differs. 'user' => '<registry_database_username_placeholder_change_me>', 'password' => '<registry_database_placeholder_change_me>', 'dbname' => '<registry_database_name_placeholder_change_me>', 'sslmode' => 'require', # See the PostgreSQL documentation for additional information https://www.postgresql.org/docs/16/libpq-ssl.html. 'sslcert' => '</path/to/cert.pem>', 'sslkey' => '</path/to/private.key>', 'sslrootcert' => '</path/to/ca.pem>' } ## Object Storage - Container Registry registry['storage'] = { 'gcs' => { 'bucket' => '<my-company-container-registry>', 'chunksize' => 5242880 }, 'maintenance' => { # This section can be removed. 'readonly' => { 'enabled' => false } } } -
파일을 저장하고 GitLab을 재구성합니다.
이제 모든 작업에 메타데이터 데이터베이스를 사용할 수 있습니다.
남은 데이터 가져오기(3 단계)#
레지스트리가 메타데이터에 데이터베이스를 완전히 사용하게 되었더라도, 사용되지 않을 수 있는 레이어 블롭에는 아직 접근하지 못하며 이 때문에 온라인 가비지 컬렉터가 해당 블롭을 제거하지 못합니다.
3 단계가 진행되는 동안에도 레지스트리를 평소대로 사용할 수 있습니다.
이 과정을 마치려면 마이그레이션의 마지막 단계를 실행합니다.
sudo gitlab-ctl registry-database import --step-three --log-to-stdout
sudo -u registry gitlab-ctl registry-database import --step-three --log-to-stdout
sudo gitlab-ctl registry-database import --step-three
이 명령이 성공적으로 종료되면 레지스트리 메타데이터가 데이터베이스로 완전히 가져와집니다.
가져오기 이후#
대규모 레지스트리는 가져오기 후 수십만 개에서 수백만 개의 블롭이 가비지 컬렉션 검토 대기열에 쌓일 수 있습니다. 이는 예상된 동작이며, 기본 워커 간격에서는 처리에 시간이 걸립니다.
무엇을 예상해야 하는지와 처리 속도를 높이는 방법은 다음을 참고합니다.
- 가져오기를 마친 뒤 예상되는 동작의 개요는 가져오기 이후를 참고합니다.
- 가비지 컬렉션 검토 대기열을 모니터링하려면 온라인 가비지 컬렉션 상태 확인을 참고합니다.
- 대규모 백로그의 처리 속도를 일시적으로 높이려면 가비지 컬렉터 워커 간격 조정을 참고합니다.