コンテナ イメージをクラスタ間で push する

システム アーティファクトは、管理クラスタの Artifact Registry に存在します。新しいアーティファクトをパッチ適用することで修正できるバグや停止がシステムで発生した場合は、新しいシステム アーティファクトをプッシュします。

このドキュメントでは、クラスタ間で個々のアーティファクトを push する方法について説明します。

始める前に

システム Artifact Registry プロジェクトのリソースに管理者としてアクセスするために必要な権限を取得するには、コンテナ イメージを push するクラスタに応じて、次のロールを付与するようセキュリティ管理者に依頼してください。

  • 組織管理クラスタ: コンテナ イメージを組織管理クラスタのシステム Artifact Registry に push するには、組織システム アーティファクト管理管理者(organization-system-artifact-management-admin)ロールが必要です。
  • ルート管理クラスタ: コンテナ イメージをルート管理クラスタのシステム Artifact Registry に push するには、システム アーティファクト管理管理者(system-artifact-management-admin)ロールが必要です。

必要な権限を取得したら、イメージをルート管理クラスタまたは組織管理クラスタのシステム Artifact Registry に push する前に、次の手順を行います。

  1. gdcloud コマンドライン インターフェース(CLI)の手順に沿って、Distributed Cloud CLI をダウンロードしてインストールします。

  2. コンポーネントをインストールするの手順に沿って、docker-credential-gdcloud コンポーネントをインストールします。

    gdcloud components install docker-credential-gdcloud
    
  3. 構成済みの ID プロバイダでログインします

    gdcloud auth login
    
  4. kubeconfig ファイルをエクスポートします。

    gdcloud clusters get-credentials CLUSTER_NAME
    

    CLUSTER_NAME はクラスタの名前で置き換えます。

  5. Docker を構成します。

    gdcloud auth configure-docker
    

S3 バケットからコンテナ イメージをダウンロードする

S3 バケットからコンテナ イメージをダウンロードするために必要な権限を取得するには、プロジェクトの Namespace でプロジェクト バケット オブジェクト閲覧者(project-bucket-object-viewer)ロールを付与するようセキュリティ管理者に依頼してください。

セキュリティ管理者は、ロール バインディングを作成してアクセス権を付与します。

kubectl create rolebinding IO_USER-bor-rb \
  --role=project-bucket-object-viewer \
  --user=USER \
  -n PROJECT_NAMESPACE

次のように置き換えます。

  • USER: ロール バインディングが必要なユーザーのアカウント名。
  • PROJECT_NAMESPACE: S3 バケットを含むプロジェクトの Namespace。

プロジェクト内のバケットと、そのバケット内のオブジェクトに対する読み取り専用アクセス権が付与されます。

必要な権限を取得したら、次の手順でプロジェクトの Namespace の S3 バケットからコンテナ イメージをダウンロードします。

  1. バケットの Secret 名を取得します。シークレット名は次のようになります。

    object-storage-key-std-user-ID
    

    シークレット名には、バケットにアクセスするための一意の ID 値が含まれています。

  2. バケットのシークレット名をコピーします。

  3. バケット アクセス認証情報を取得し、s3cmd CLI ツールを構成します。

    SECRET_NAME=SECRET_NAME
    ACCESS_KEY=$(kubectl get secret ${SECRET_NAME} -n object-storage-access-keys -o=jsonpath='{.data.access-key-id}' | base64 -d)
    SECRET_KEY=$(kubectl get secret ${SECRET_NAME} -n object-storage-access-keys -o=jsonpath='{.data.secret-access-key}' | base64 -d)
    S3_ENDPOINT=objectstorage.$(kubectl get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}')
    
    echo "Access Key: ${ACCESS_KEY}" \
    && echo "Secret Key: ${SECRET_KEY}" \
    && echo "S3 Endpoint: ${S3_ENDPOINT}"
    
    s3cmd --configure
    

    SECRET_NAME は、前のステップでコピーした値に置き換えます。

  4. コンテナ イメージを S3 バケットからワークステーションにダウンロードします。

    s3cmd get s3://BUCKET_NAME /g/CONTAINER_IMAGE_NAME
    

    次のように置き換えます。

    • BUCKET_NAME: コンテナ イメージを含む S3 バケットの名前。
    • CONTAINER_IMAGE_NAME: S3 バケットからダウンロードするコンテナ イメージ ファイルの名前。

イメージをシステム Artifact Registry に push する

ワークステーションにあるコンテナ イメージのファイルを管理クラスタのシステム Artifact Registry に push するには、次の操作を行います。

  1. Console を開きます。

  2. コンテナ イメージを push するクラスタのシステム Artifact Registry エンドポイントのパスを取得します。

    export REGISTRY_ENDPOINT=harbor.$(kubectl get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}')
    
  3. コンテナ イメージを読み込んでタグ付けし、クラスタのシステム Artifact Registry エンドポイントに push します。

    docker load --input CONTAINER_IMAGE_PATH
    
    docker tag CONTAINER_IMAGE_PATH ${REGISTRY_ENDPOINT}/CONTAINER_IMAGE_PATH
    
    docker push ${REGISTRY_ENDPOINT}/CONTAINER_IMAGE_PATH
    

    CONTAINER_IMAGE_PATH は、ローカル ファイル システム内のコンテナ イメージ ファイルのパスに置き換えます。このパスの有効な値は、たとえば oracle_db.tar です。