InfoGrab DocsInfoGrab Docs

3단계 가져오기

요약

기존 컨테이너 레지스트리 메타데이터를 가져옵니다. 사용자들은 1 단계 가져오기가 시간당 2 ~ 4 TB 속도로 완료되었다고 보고했습니다. 1 단계가 진행되는 동안에도 레지스트리를 평소대로 사용할 수 있습니다. /etc/gitlab/gitlab.rb 파일의 database 섹션에서 데이터베이스가 비활성화되어 있는지 확인합니다.

기존 컨테이너 레지스트리 메타데이터를 가져옵니다. 다음 절차는 대규모 레지스트리(200 GiB 이상)이거나 가져오기를 완료하는 동안 중단 시간을 최소화하려는 경우에 권장합니다.

리포지터리 사전 가져오기(1 단계)#

사용자들은 1 단계 가져오기가 시간당 2 ~ 4 TB 속도로 완료되었다고 보고했습니다. 속도가 느린 경우 100TB 이상의 데이터를 가진 레지스트리는 48 시간 넘게 걸릴 수 있습니다.

1 단계가 진행되는 동안에도 레지스트리를 평소대로 사용할 수 있습니다.

  1. /etc/gitlab/gitlab.rb 파일의 database 섹션에서 데이터베이스가 비활성화되어 있는지 확인합니다.

    registry['database'] = {
      'enabled' => false, # Must be false!
    }
    
  2. 파일을 저장하고 GitLab을 재구성합니다.

  3. 데이터베이스 마이그레이션을 적용합니다.

  4. 첫 번째 단계를 실행해 가져오기를 시작합니다.

    sudo gitlab-ctl registry-database import --step-one --log-to-stdout
    
  1. /etc/gitlab/gitlab.rb 파일의 database 섹션에서 데이터베이스가 비활성화되어 있는지 확인합니다.

    registry['database'] = {
      'enabled' => false, # Must be false!
    }
    
  2. 파일을 저장하고 GitLab을 재구성합니다.

  3. 데이터베이스 마이그레이션을 적용합니다.

  4. 첫 번째 단계를 실행해 가져오기를 시작합니다.

    sudo -u registry gitlab-ctl registry-database import --step-one --log-to-stdout
    

사전 요구 사항:

  1. /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>'
    }
    
  2. 파일을 저장하고 GitLab을 재구성합니다.

  3. 아직 적용하지 않았다면 데이터베이스 마이그레이션을 적용합니다.

  4. 첫 번째 단계를 실행해 가져오기를 시작합니다.

    sudo gitlab-ctl registry-database import --step-one
    
Note

필요한 중단 시간을 줄이려면 다음 단계를 가능한 한 빨리 예약하는 것이 좋습니다. 1 단계가 완료된 뒤 일주일 이내가 이상적입니다. 1 단계와 2 단계 사이에 레지스트리에 새로 기록된 데이터는 2 단계에 걸리는 시간을 늘립니다.

전체 리포지터리 데이터 가져오기(2 단계)#

이 단계에서는 레지스트리를 read-only 모드로 설정해야 합니다. 다만 이 단계는 1 단계보다 약 90% 빠르게 완료됩니다. 2 단계를 실행하는 동안 필요한 중단 시간을 충분히 확보합니다.

  1. 레지스트리가 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.
        }
      }
    }
    
  2. 파일을 저장하고 GitLab을 재구성합니다.

  3. 가져오기의 2 단계를 실행합니다.

    sudo gitlab-ctl registry-database import --step-two --log-to-stdout
    
  4. 명령이 성공적으로 완료되면 모든 이미지를 완전히 가져온 상태입니다. 이제 데이터베이스를 활성화하고 구성에서 읽기 전용 모드를 해제한 다음 레지스트리 서비스를 시작할 수 있습니다.

    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
        }
      }
    }
    
  5. 파일을 저장하고 GitLab을 재구성합니다.

  1. 레지스트리가 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.
        }
      }
    }
    
  2. 파일을 저장하고 GitLab을 재구성합니다.

  3. 가져오기의 2 단계를 실행합니다.

    sudo -u registry gitlab-ctl registry-database import --step-two --log-to-stdout
    
  4. 명령이 성공적으로 완료되면 모든 이미지를 완전히 가져온 상태입니다. 이제 데이터베이스를 활성화하고 구성에서 읽기 전용 모드를 해제한 다음 레지스트리 서비스를 시작할 수 있습니다.

    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
        }
      }
    }
    
  5. 파일을 저장하고 GitLab을 재구성합니다.

  1. 레지스트리가 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.
        }
      }
    }
    
  2. 파일을 저장하고 GitLab을 재구성합니다.

  3. 가져오기의 2 단계를 실행합니다.

    sudo gitlab-ctl registry-database import --step-two
    
  4. 명령이 성공적으로 완료되면 모든 이미지를 완전히 가져온 상태입니다. 이제 데이터베이스를 활성화하고 구성에서 읽기 전용 모드를 해제한 다음 레지스트리 서비스를 시작할 수 있습니다.

    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
        }
      }
    }
    
  5. 파일을 저장하고 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

이 명령이 성공적으로 종료되면 레지스트리 메타데이터가 데이터베이스로 완전히 가져와집니다.

가져오기 이후#

대규모 레지스트리는 가져오기 후 수십만 개에서 수백만 개의 블롭이 가비지 컬렉션 검토 대기열에 쌓일 수 있습니다. 이는 예상된 동작이며, 기본 워커 간격에서는 처리에 시간이 걸립니다.

무엇을 예상해야 하는지와 처리 속도를 높이는 방법은 다음을 참고합니다.

3단계 가져오기

GitLab v19.5
Tier: Free, Premium, Ultimate
Offering: GitLab Self-Managed
원문 보기

요약

기존 컨테이너 레지스트리 메타데이터를 가져옵니다. 사용자들은 1 단계 가져오기가 시간당 2 ~ 4 TB 속도로 완료되었다고 보고했습니다. 1 단계가 진행되는 동안에도 레지스트리를 평소대로 사용할 수 있습니다. /etc/gitlab/gitlab.rb 파일의 database 섹션에서 데이터베이스가 비활성화되어 있는지 확인합니다.

기존 컨테이너 레지스트리 메타데이터를 가져옵니다. 다음 절차는 대규모 레지스트리(200 GiB 이상)이거나 가져오기를 완료하는 동안 중단 시간을 최소화하려는 경우에 권장합니다.

리포지터리 사전 가져오기(1 단계)#

사용자들은 1 단계 가져오기가 시간당 2 ~ 4 TB 속도로 완료되었다고 보고했습니다. 속도가 느린 경우 100TB 이상의 데이터를 가진 레지스트리는 48 시간 넘게 걸릴 수 있습니다.

1 단계가 진행되는 동안에도 레지스트리를 평소대로 사용할 수 있습니다.

  1. /etc/gitlab/gitlab.rb 파일의 database 섹션에서 데이터베이스가 비활성화되어 있는지 확인합니다.

    registry['database'] = {
      'enabled' => false, # Must be false!
    }
    
  2. 파일을 저장하고 GitLab을 재구성합니다.

  3. 데이터베이스 마이그레이션을 적용합니다.

  4. 첫 번째 단계를 실행해 가져오기를 시작합니다.

    sudo gitlab-ctl registry-database import --step-one --log-to-stdout
    
  1. /etc/gitlab/gitlab.rb 파일의 database 섹션에서 데이터베이스가 비활성화되어 있는지 확인합니다.

    registry['database'] = {
      'enabled' => false, # Must be false!
    }
    
  2. 파일을 저장하고 GitLab을 재구성합니다.

  3. 데이터베이스 마이그레이션을 적용합니다.

  4. 첫 번째 단계를 실행해 가져오기를 시작합니다.

    sudo -u registry gitlab-ctl registry-database import --step-one --log-to-stdout
    

사전 요구 사항:

  1. /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>'
    }
    
  2. 파일을 저장하고 GitLab을 재구성합니다.

  3. 아직 적용하지 않았다면 데이터베이스 마이그레이션을 적용합니다.

  4. 첫 번째 단계를 실행해 가져오기를 시작합니다.

    sudo gitlab-ctl registry-database import --step-one
    
Note

필요한 중단 시간을 줄이려면 다음 단계를 가능한 한 빨리 예약하는 것이 좋습니다. 1 단계가 완료된 뒤 일주일 이내가 이상적입니다. 1 단계와 2 단계 사이에 레지스트리에 새로 기록된 데이터는 2 단계에 걸리는 시간을 늘립니다.

전체 리포지터리 데이터 가져오기(2 단계)#

이 단계에서는 레지스트리를 read-only 모드로 설정해야 합니다. 다만 이 단계는 1 단계보다 약 90% 빠르게 완료됩니다. 2 단계를 실행하는 동안 필요한 중단 시간을 충분히 확보합니다.

  1. 레지스트리가 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.
        }
      }
    }
    
  2. 파일을 저장하고 GitLab을 재구성합니다.

  3. 가져오기의 2 단계를 실행합니다.

    sudo gitlab-ctl registry-database import --step-two --log-to-stdout
    
  4. 명령이 성공적으로 완료되면 모든 이미지를 완전히 가져온 상태입니다. 이제 데이터베이스를 활성화하고 구성에서 읽기 전용 모드를 해제한 다음 레지스트리 서비스를 시작할 수 있습니다.

    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
        }
      }
    }
    
  5. 파일을 저장하고 GitLab을 재구성합니다.

  1. 레지스트리가 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.
        }
      }
    }
    
  2. 파일을 저장하고 GitLab을 재구성합니다.

  3. 가져오기의 2 단계를 실행합니다.

    sudo -u registry gitlab-ctl registry-database import --step-two --log-to-stdout
    
  4. 명령이 성공적으로 완료되면 모든 이미지를 완전히 가져온 상태입니다. 이제 데이터베이스를 활성화하고 구성에서 읽기 전용 모드를 해제한 다음 레지스트리 서비스를 시작할 수 있습니다.

    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
        }
      }
    }
    
  5. 파일을 저장하고 GitLab을 재구성합니다.

  1. 레지스트리가 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.
        }
      }
    }
    
  2. 파일을 저장하고 GitLab을 재구성합니다.

  3. 가져오기의 2 단계를 실행합니다.

    sudo gitlab-ctl registry-database import --step-two
    
  4. 명령이 성공적으로 완료되면 모든 이미지를 완전히 가져온 상태입니다. 이제 데이터베이스를 활성화하고 구성에서 읽기 전용 모드를 해제한 다음 레지스트리 서비스를 시작할 수 있습니다.

    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
        }
      }
    }
    
  5. 파일을 저장하고 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

이 명령이 성공적으로 종료되면 레지스트리 메타데이터가 데이터베이스로 완전히 가져와집니다.

가져오기 이후#

대규모 레지스트리는 가져오기 후 수십만 개에서 수백만 개의 블롭이 가비지 컬렉션 검토 대기열에 쌓일 수 있습니다. 이는 예상된 동작이며, 기본 워커 간격에서는 처리에 시간이 걸립니다.

무엇을 예상해야 하는지와 처리 속도를 높이는 방법은 다음을 참고합니다.