將容器映像檔從一個叢集推送到另一個叢集

系統構件位於管理員叢集的 Artifact Registry 中。如果系統出現錯誤或中斷,而您可透過修補新構件修正問題,請推送新的系統構件。

本文說明如何將個別構件從一個叢集推送至另一個叢集。

事前準備

如要取得權限,以管理員身分存取系統 Artifact Registry 專案中的資源,請要求安全管理員根據您要推送容器映像檔的叢集,授予下列角色:

  • 機構組織管理員叢集:如要將容器映像檔推送至機構組織管理員叢集的系統 Artifact Registry,您需要「機構組織系統 Artifact 管理管理員」角色 (organization-system-artifact-management-admin)。
  • 根管理員叢集:如要將容器映像檔推送至根管理員叢集的系統 Artifact Registry,您需要「系統 Artifact 管理員」(system-artifact-management-admin) 角色。

取得必要權限後,請完成下列步驟,再將映像檔推送至根管理員叢集或機構管理員叢集的系統 Artifact Registry:

  1. 按照「gdcloud 指令列介面 (CLI)」的說明,下載並安裝 Distributed Cloud CLI。

  2. 按照「安裝元件」的指示安裝 docker-credential-gdcloud 元件。

    gdcloud components install docker-credential-gdcloud
    
  3. 使用已設定的識別資訊提供者登入

    gdcloud auth login
    
  4. 匯出 kubeconfig 檔案。

    gdcloud clusters get-credentials CLUSTER_NAME
    

    CLUSTER_NAME 替換為叢集名稱。

  5. 設定 Docker。

    gdcloud auth configure-docker
    

從 S3 bucket 下載容器映像檔

如要取得從 S3 bucket 下載容器映像檔所需的權限,請要求安全管理員在專案的命名空間中,授予您專案 bucket 物件檢視者 (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 bucket 的專案命名空間。

您將取得專案內值區和該值區中物件的唯讀存取權。

取得必要權限後,請按照下列步驟,從專案命名空間的 S3 bucket 下載容器映像檔:

  1. 取得 bucket 的密鑰名稱。密鑰名稱如下所示:

    object-storage-key-std-user-ID
    

    密鑰名稱包含存取 bucket 的專屬 ID 值。

  2. 複製 bucket 的密鑰名稱。

  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 bucket 下載到工作站。

    s3cmd get s3://BUCKET_NAME /g/CONTAINER_IMAGE_NAME
    

    更改下列內容:

    • BUCKET_NAME:含有容器映像檔的 S3 bucket 名稱。
    • CONTAINER_IMAGE_NAME:要從 S3 bucket 下載的容器映像檔名稱。

將映像檔推送至系統 Artifact Registry

請按照下列步驟,將工作站中的容器映像檔推送至管理員叢集中的系統 Artifact Registry:

  1. 開啟控制台。

  2. 取得要推送容器映像檔的叢集系統 Artifact Registry 端點路徑。

    export REGISTRY_ENDPOINT=harbor.$(kubectl get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}')
    
  3. 將容器映像檔載入、加上標記,然後推送至叢集的系統 Artifact Registry 端點。

    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