Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

23.2.3. GCP の OpenShift Container Platform レジストリーの設定

Google Cloud Platform (GCP) は、OpenShift Container Platform が OpenShift Container Platform コンテナーイメージレジストリーを使用してコンテナーイメージを保存するために、使用可能なオブジェクトクラウドストレージを提供します。

詳細情報は、GCP ドキュメントのクラウドストレージ を参照してください。

前提条件

インストールする前に、バケットを作成して、レジストリーイメージをホストする必要があります。以下のコマンドでは、設定したサービスアカウントを使用してリージョンバケットを作成します。

gsutil mb -c regional -l <region> gs://ocp-registry-bucket
cat <<EOF > labels.json
{
  "ocp-cluster": "mycluster"
}
EOF
gsutil label set labels.json gs://ocp-registry-bucket
rm -f labels.json
注記

デフォルトでは、バケットのデータは、Google が管理するキーを使用して自動的に暗号化されます。データの暗号化に別のキーを指定する場合には、GCP で利用可能な データ暗号化オプション を参照してください。

詳細情報は、ストレージバケットの作成ドキュメント を参照してください。

手順

レジストリーが Google Cloud Storage (GCS) バケットを使用できるように、Ansible インベントリーファイル を設定します。

[OSEv3:vars]
# GCP Provider Configuration
openshift_hosted_registry_storage_provider=gcs
openshift_hosted_registry_storage_kind=object
openshift_hosted_registry_replicas=1 1
openshift_hosted_registry_storage_gcs_bucket=<bucket_name> 2
openshift_hosted_registry_storage_gcs_keyfile=<bucket_keyfile> 3
openshift_hosted_registry_storage_gcs_rootdirectory=<registry_directory> 4
1
設定するレプリカ数
2
レジストリーストレージのバケット名
3
データの暗号化にカスタムのキーファイルを使用する場合にバケットのキーファイルが配置されているインストーラーホストのパス
4
データの保存に使用するディレクトリー。デフォルトで /registry です。

詳細情報は、GCP ドキュメントのクラウドストレージ を参照してください。

23.2.3.1. GCP 向けの OpenShift Container Platform レジストリーの手動設定

GCP オブジェクトストレージを使用するには、レジストリーの設定ファイルを編集してレジストリー Pod にマウントします。

ストレージドライバーの設定ファイルに関する詳細情報は、Google Cloud ストレージドライバーのドキュメント を参照してください。

手順

  1. 現在の/etc/registry/config.yml ファイルをエクスポートします。

    $ oc get secret registry-config \
        -o jsonpath='{.data.config\.yml}' -n default | base64 -d \
      >> config.yml.old
  2. 以前の /etc/registry/config.yml ファイルから新規の設定ファイルを作成します。

    $ cp config.yml.old config.yml
  3. このファイルを編集して GCP パラメーターを追加します。レジストリーの設定ファイルの storage セクションに、バケットと keyfile を指定します。

    storage:
      delete:
        enabled: true
      cache:
        blobdescriptor: inmemory
      gcs:
        bucket: ocp-registry 1
        keyfile: mykeyfile 2
    1
    GCP バケット名に置き換えます。
    2
    JSON 形式のサービスアカウントの秘密鍵ファイル。Google アプリケーションのデフォルトの認証情報を使用する場合は、keyfile パラメーターは指定しないでください。
  4. registry-config シークレットを削除します。

    $ oc delete secret registry-config -n default
  5. シークレットを再作成して、更新された設定ファイルを参照します。

    $ oc create secret generic registry-config \
        --from-file=config.yml -n default
  6. 更新された設定を読み取るためにレジストリーを再デプロイします。

    $ oc rollout latest docker-registry -n default
23.2.3.1.1. レジストリーが GCP オブジェクトストレージを使用していることを確認します。

レジストリーが GCP バケットストレージを使用しているかどうかを確認します。

手順

  1. GCP ストレージを使用して正常にレジストリーをデプロイした後に、GCP バケットストレージではなく emptydir が使用される場合には、deploymentconfig のレジストリーは、何も情報を表示しません。

    $ oc describe dc docker-registry -n default
    ...
    Mounts:
      ...
      /registry from registry-storage (rw)
    Volumes:
    registry-storage:
    Type:       EmptyDir 1
    ...
    1
    Pod の寿命を共有する一時ディレクトリー
  2. /registry のマウントポイントが空かどうかを確認します。これは、GCP ストレージが使用するボリュームです。

    $ oc exec \
        $(oc get pod -l deploymentconfig=docker-registry \
        -o=jsonpath='{.items[0].metadata.name}')  -i -t -- ls -l /registry
    total 0
  3. 空の場合は、GCP バケット設定が registry-config シークレットで実行されているためです。

    $ oc describe secret registry-config
    Name:         registry-config
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Type:  Opaque
    
    Data
    ====
    config.yml:  398 bytes
  4. インストーラーは、インストールドキュメントのストレージセクション で記載されているように、拡張されたレジストリー機能を使用して、希望の設定で config.yml ファイルを作成します。以下のコマンドで、ストレージバケット設定が保存されている storage セクションを含めて設定ファイルを表示します。

    $ oc exec \
        $(oc get pod -l deploymentconfig=docker-registry \
          -o=jsonpath='{.items[0].metadata.name}') \
      cat /etc/registry/config.yml
    
    version: 0.1
    log:
      level: debug
    http:
      addr: :5000
    storage:
      delete:
        enabled: true
      cache:
        blobdescriptor: inmemory
      gcs:
        bucket: ocp-registry
    auth:
      openshift:
        realm: openshift
    middleware:
      registry:
      - name: openshift
      repository:
      - name: openshift
        options:
          pullthrough: True
          acceptschema2: True
          enforcequota: False
      storage:
      - name: openshift

    または、以下でシークレットを表示できます。

    $ oc get secret registry-config -o jsonpath='{.data.config\.yml}' | base64 -d
    version: 0.1
    log:
      level: debug
    http:
      addr: :5000
    storage:
      delete:
        enabled: true
      cache:
        blobdescriptor: inmemory
      gcs:
        bucket: ocp-registry
    auth:
      openshift:
        realm: openshift
    middleware:
      registry:
      - name: openshift
      repository:
      - name: openshift
        options:
          pullthrough: True
          acceptschema2: True
          enforcequota: False
      storage:
      - name: openshift

    GCP コンソールで Storage を表示して Browser をクリックし、バケットを選択するか、gsutil コマンドを実行して、イメージのプッシュが正常に行われたことを確認します。

    $ gsutil ls gs://ocp-registry/
    gs://ocp-registry/docker/
    
    $ gsutil du gs://ocp-registry/
    7660385     gs://ocp-registry/docker/registry/v2/blobs/sha256/03/033565e6892e5cc6dd03187d00a4575720a928db111274e0fbf31b410a093c10/data
    7660385     gs://ocp-registry/docker/registry/v2/blobs/sha256/03/033565e6892e5cc6dd03187d00a4575720a928db111274e0fbf31b410a093c10/
    7660385     gs://ocp-registry/docker/registry/v2/blobs/sha256/03/
    ...

emptyDir ボリュームを使用する場合には、/registry マウントポイントは以下のようになります。

$ oc exec \
    $(oc get pod -l deploymentconfig=docker-registry \
    -o=jsonpath='{.items[0].metadata.name}')  -i -t -- df -h /registry
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc         30G  226M   30G   1% /registry


$ oc exec \
    $(oc get pod -l deploymentconfig=docker-registry \
    -o=jsonpath='{.items[0].metadata.name}')  -i -t -- ls -l /registry
total 0
drwxr-sr-x. 3 1000000000 1000000000 22 Jun 19 12:24 docker