GitLabチャートと外部オブジェクトストレージの設定

GitLabは、Kubernetesの高可用性永続データのためにオブジェクトストレージに依存しています。デフォルトでは、minio というS3互換のストレージソリューションがChartと共にデプロイされます。プロダクション品質のデプロイには、Google Cloud StorageやAWS S3のようなホストされたオブジェクトストレージソリューションを使用することをお勧めします。

MinIOを無効にするには、このオプションを設定してから、以下の関連ドキュメントに従ってください:

--set global.minio.enabled=false

完全な設定例はサンプルに記載されています。

このドキュメントでは、AWS のアクセスキーとシークレットキーの使い方を説明しています。IAM ロールを使用することも可能です。

S3の暗号化

GitLab 13.4 で導入されました

GitLabはAmazon KMSをサポートし、S3バケットに保存されたデータを暗号化します。これを有効にするには2つの方法があります:

この二つのオプションは互いに排他的なものではありません。デフォルトの暗号化ポリシーを設定するだけでなく、サーバー側の暗号化ヘッダーを有効にしてデフォルトを上書きすることもできます。

詳細については、暗号化されたS3バケットに関するGitLabのドキュメントを参照してください。

Azure Blobストレージ

GitLab 13.4 で導入されました

Azure Blobストレージの直接サポートは、アップロードされた添付ファイル、CIジョブのアーティファクト、LFS、および統合設定でサポートされるその他のオブジェクトタイプで利用できます。以前のバージョンのGitLabでは、Azure MinIOゲートウェイが必要でした。

note
GitLabはDockerレジストリのストレージとしてAzure MinIOゲートウェイをサポートしていません。Dockerレジストリを設定する際は、対応するAzureの例を参照してください。

Azureはコンテナという言葉でBlobの集合を表しますが、GitLabはバケットという言葉を標準としています。

Azure Blobストレージでは、統合オブジェクトストレージ設定を使用する必要があります。単一のAzureストレージアカウント名とキーを複数のAzure Blobコンテナで使用する必要があります。オブジェクトの種類(例えば、artifactsuploadsなど)ごとにconnection の設定を個別にカスタマイズすることは許可されていません。

Azure Blob ストレージを有効にするには、Azureconnection を定義する例としてrails.azurerm.yaml を参照してください。経由でシークレットとしてロードできます:

kubectl create secret generic gitlab-rails-storage --from-file=connection=rails.azurerm.yml

次に、MinIOを無効にして、これらのグローバル設定を設定します:

--set global.minio.enabled=false
--set global.appConfig.object_store.enabled=true
--set global.appConfig.object_store.connection.secret=gitlab-rails-storage

デフォルトの名前で Azure コンテナを作成するか、バケット設定でコンテナ名を設定してください。

note
Requests to the local network are not allowed でリクエストが失敗する場合は、トラブルシューティングのセクションを参照してください。

Dockerレジストリイメージ

registry Chartのオブジェクトストレージの設定は、registry.storage キーとglobal.registry.bucket キーで行います。

--set registry.storage.secret=registry-storage
--set registry.storage.key=config
--set global.registry.bucket=bucket-name

注意: バケット名はシークレットとglobal.registry.bucketの両方で設定する必要があります。secretはレジストリサーバで使われ、globalはGitLabのバックアップで使われます。

ストレージに関するレジストリチャートのドキュメントに従ってシークレットを作成し、このシークレットを使用するようにチャートを設定します。

S3(S3と互換性のあるストレージですが、Azure MinIOゲートウェイはサポートされていません。Azure Blob Storageを参照してください)、AzureGCSドライバの例は、examples/objectstorageにあります。

レジストリ設定

  1. 使用するストレージサービスを決定します。
  2. registry-storage.yaml に適切なファイルをコピー。
  3. 環境に適した値で編集してください。
  4. シークレットを作成するには、ストレージに関するレジストリチャートのドキュメントに従ってください。
  5. ドキュメントに従ってChartを設定します。

LFS、アーティファクト、アップロード、パッケージ、外部差分、Terraformステート、依存プロキシ、セキュアファイル

LFS、アーティファクト、アップロード、パッケージ、外部差分、Terraformの状態、セキュアファイル、および仮名化のためのオブジェクトストレージの設定は、以下のキーで行います:

  • global.appConfig.lfs
  • global.appConfig.artifacts
  • global.appConfig.uploads
  • global.appConfig.packages
  • global.appConfig.externalDiffs
  • global.appConfig.dependencyProxy
  • global.appConfig.terraformState
  • global.appConfig.ciSecureFiles

また、以下のことにも注意してください:

  • バケツ設定で、デフォルト名またはカスタム名のバケツを作成する必要があります。
  • そうしないと、バックアップからのリストアが正しく機能しません。
  • MRの差分を外部ストレージに保存することは、デフォルトでは有効になっていません。そのため、externalDiffs のオブジェクトストレージの設定を有効にするには、global.appConfig.externalDiffs.enabled キーにtrue の値を指定する必要があります。
  • 依存プロキシ機能はデフォルトでは有効になっていないため、dependencyProxy のオブジェクトストレージ設定を有効にするには、global.appConfig.dependencyProxy.enabled キーにtrue の値を指定する必要があります。

以下は設定オプションの例です:

--set global.appConfig.lfs.bucket=gitlab-lfs-storage
--set global.appConfig.lfs.connection.secret=object-storage
--set global.appConfig.lfs.connection.key=connection

--set global.appConfig.artifacts.bucket=gitlab-artifacts-storage
--set global.appConfig.artifacts.connection.secret=object-storage
--set global.appConfig.artifacts.connection.key=connection

--set global.appConfig.uploads.bucket=gitlab-uploads-storage
--set global.appConfig.uploads.connection.secret=object-storage
--set global.appConfig.uploads.connection.key=connection

--set global.appConfig.packages.bucket=gitlab-packages-storage
--set global.appConfig.packages.connection.secret=object-storage
--set global.appConfig.packages.connection.key=connection

--set global.appConfig.externalDiffs.bucket=gitlab-externaldiffs-storage
--set global.appConfig.externalDiffs.connection.secret=object-storage
--set global.appConfig.externalDiffs.connection.key=connection

--set global.appConfig.terraformState.bucket=gitlab-terraform-state
--set global.appConfig.terraformState.connection.secret=object-storage
--set global.appConfig.terraformState.connection.key=connection

--set global.appConfig.dependencyProxy.bucket=gitlab-dependencyproxy-storage
--set global.appConfig.dependencyProxy.connection.secret=object-storage
--set global.appConfig.dependencyProxy.connection.key=connection

--set global.appConfig.ciSecureFiles.bucket=gitlab-ci-secure-files
--set global.appConfig.ciSecureFiles.connection.secret=object-storage
--set global.appConfig.ciSecureFiles.connection.key=connection

詳細はappConfigのchart/globalsドキュメントを参照してください。

接続の詳細のドキュメントに従ってシークレットを作成し、提供されたシークレットを使用するようにチャートを設定してください。すべてのシークレットに同じシークレットを使用することができます。

AWSMinIOを使用するAzureのようなS3互換のもの)とGoogleプロバイダーの例は、examples/objectstorageにあります。

appConfig設定

  1. 使用するストレージサービスを決定します。
  2. rails.yaml に適切なファイルをコピー。
  3. 環境に適した値で編集してください。
  4. シークレットを作成するには、接続の詳細ドキュメントに従ってください。
  5. ドキュメントに従ってChartを設定します。

バックアップ

バックアップもオブジェクトストレージに保存され、付属のMinIOサービスではなく外部を指すように設定する必要があります。バックアップ/リストア手順は、2つの別々のバケットを使用します:

  • バックアップを保存するバケット (global.appConfig.backups.bucket)
  • リストア処理中に内部データを保存するための一時的なバケツ (global.appConfig.backups.tmpBucket)

AWS S3互換のオブジェクトストレージシステム、Google Cloud Storage、Azure Blob Storageがサポートされているバックエンドです。バックエンドの種類を設定するには、global.appConfig.backups.objectStorage.backend を AWS S3 の場合はs3 に、Google Cloud Storage の場合はgcs に、Azure Blob Storage の場合はazure に設定します。また、gitlab.toolbox.backups.objectStorage.config キーで接続設定を提供する必要があります。

Google Cloud Storage を使用する場合は、GCP プロジェクトにglobal.appConfig.backups.objectStorage.config.gcpProject を設定する必要があります。

S3互換ストレージの場合:

--set global.appConfig.backups.bucket=gitlab-backup-storage
--set global.appConfig.backups.tmpBucket=gitlab-tmp-storage
--set gitlab.toolbox.backups.objectStorage.config.secret=storage-config
--set gitlab.toolbox.backups.objectStorage.config.key=config

Google Cloud Storage の場合(GCS) :

--set global.appConfig.backups.bucket=gitlab-backup-storage
--set global.appConfig.backups.tmpBucket=gitlab-tmp-storage
--set gitlab.toolbox.backups.objectStorage.backend=gcs
--set gitlab.toolbox.backups.objectStorage.config.gcpProject=my-gcp-project-id
--set gitlab.toolbox.backups.objectStorage.config.secret=storage-config
--set gitlab.toolbox.backups.objectStorage.config.key=config

Azure Blob Storageの場合:

--set global.appConfig.backups.bucket=gitlab-backup-storage
--set global.appConfig.backups.tmpBucket=gitlab-tmp-storage
--set gitlab.toolbox.backups.objectStorage.backend=azure
--set gitlab.toolbox.backups.objectStorage.config.secret=storage-config
--set gitlab.toolbox.backups.objectStorage.config.key=config

詳細については、オブジェクトストレージのバックアップ/リストアのドキュメントを参照してください。

note
他のオブジェクトストレージからファイルをバックアップしたりリストアしたりするには、GitLabのすべてのバケットに対して読み書きできる十分なアクセス権を持つユーザーとして認証するように設定ファイルを構成する必要があります。

バックアップストレージの例

  1. storage.config ファイルを作成します:

    • Amazon S3では、内容はs3cmd設定ファイル形式でなければなりません。

       [default]
       access_key = BOGUS_ACCESS_KEY
       secret_key = BOGUS_SECRET_KEY
       bucket_location = us-east-1
       multipart_chunk_size_mb = 128 # default is 15 (MB)
      
    • Google Cloud Storageの場合、storage.admin ロールでサービスアカウントを作成し、サービスアカウントキーを作成することでファイルを作成できます。以下は、gcloud CLIを使用してファイルを作成する例です。

       export PROJECT_ID=$(gcloud config get-value project)
       gcloud iam service-accounts create gitlab-gcs --display-name "Gitlab Cloud Storage"
       gcloud projects add-iam-policy-binding --role roles/storage.admin ${PROJECT_ID} --member=serviceAccount:gitlab-gcs@${PROJECT_ID}.iam.gserviceaccount.com
       gcloud iam service-accounts keys create --iam-account gitlab-gcs@${PROJECT_ID}.iam.gserviceaccount.com storage.config
      
    • Azure Storageの場合

       [default]
       # Setup endpoint: hostname of the Web App
       host_base = https://your_minio_setup.azurewebsites.net
       host_bucket = https://your_minio_setup.azurewebsites.net
       # Leave as default
       bucket_location = us-west-1
       use_https = True
       multipart_chunk_size_mb = 128 # default is 15 (MB)
            
       # Setup access keys
       # Access Key = Azure Storage Account name
       access_key = BOGUS_ACCOUNT_NAME
       # Secret Key = Azure Storage Account Key
       secret_key = BOGUS_KEY
            
       # Use S3 v4 signature APIs
       signature_v2 = False
      
  2. シークレットの作成

    kubectl create secret generic storage-config --from-file=config=storage.config
    

Google Cloud CDN

GitLab 15.5 で導入されました

Google Cloud CDNを使って、アーティファクトバケットからデータをキャッシュしたりフェッチしたりすることができます。これにより、パフォーマンスを向上させ、ネットワークのイグレスコストを削減することができます。

Cloud CDN の設定は以下のキーで行います:

  • global.appConfig.artifacts.cdn.secret
  • global.appConfig.artifacts.cdn.key (デフォルトはcdn)

クラウドCDNを利用するには

  1. アーティファクトバケットをバックエンドとして使用するようにCloud CDNを設定します。
  2. 署名付きURL用のキーを作成します。
  3. Cloud CDN サービスアカウントにバケットからの読み込み権限を与えます。
  4. rails.googlecdn.yamlにある例を使って、パラメータを含む YAML ファイルを用意します。 以下の情報を入力する必要があります:
    • url:ステップ1のCDNホストのベースURL
    • key_name:ステップ2のキー名
    • key:ステップ2のシークレット
  5. このYAMLファイルをcdn キー下のKubernetesシークレットに読み込みます。例えば、シークレットを作成するにはgitlab-rails-cdn

    kubectl create secret generic gitlab-rails-cdn --from-file=cdn=rails.googlecdn.yml
    
  6. global.appConfig.artifacts.cdn.secretgitlab-rails-cdn に設定します。helm パラメータで設定する場合は、次のようにします:

    --set global.appConfig.artifacts.cdn.secret=gitlab-rails-cdn
    

トラブルシューティング

Azure Blob:URL[FILTERED]がブロックされています:ローカルネットワークへのリクエストは許可されていません

これは、Azure Blobホスト名がRFC1918(ローカル/非公開)IPアドレスに解決された場合に発生します。回避策として、Azure Blob ホスト名 (yourinstance.blob.core.windows.net) に対するアウトバウンドリクエストを許可します。