正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

3ステップのインポート

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab Self-Managed

既存のコンテナレジストリメタデータをインポートします。以下の手順は、大規模なレジストリ(200 GiB以上)の場合、またはインポートの完了時にダウンタイムを最小限に抑えたい場合に推奨されます。

リポジトリの事前インポート(ステップ1)

ステップ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 -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

必要なダウンタイムを削減するために、できるだけ早く次のステップをスケジュールしてください。理想的には、ステップ1の完了後1週間以内です。ステップ1とステップ2の間にレジストリに書き込まれた新しいデータは、ステップ2の時間を長くします。

すべてのリポジトリデータをインポートする(ステップ2)

このステップでは、レジストリをシャットダウンするか、read-only読み取り専用モードに設定する必要があります。ただし、このステップはステップ1よりも約90% 早く完了すると予想できます。ステップ2の実行中は、ダウンタイムのために十分な時間を確保してください。

  1. レジストリがread-only読み取り専用モードに設定されていることを確認します。

    /etc/gitlab/gitlab.rbを編集し、maintenanceセクションをregistry['storage']設定に追加します。たとえば、gcsバックエンドレジストリで、gs://my-company-container-registryバケットを使用している場合、設定は次のようになります:

    ## 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を編集し、maintenanceセクションをregistry['storage']設定に追加します。たとえば、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)

レジストリは現在、メタデータにデータベースを完全に使用していますが、オンラインガベージコレクターによってこれらのblobが削除されるのを防ぐ、潜在的に未使用のレイヤーblobにまだアクセスできません。

ステップ3の完了中も、通常どおりレジストリを使用し続けることができます。

プロセスを完了するには、移行の最終ステップを実行します:

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

そのコマンドが正常に終了すると、レジストリメタデータがデータベースに完全にインポートされます。