将容器映像从一个集群推送到另一个集群

系统制品存在于管理员集群的 Artifact Registry 中。当系统出现可通过修补新制品来修复的 bug 或中断时,推送新的系统制品。

本文档介绍了如何将单个制品从一个集群推送到另一个集群。

准备工作

如需获得以管理员身份访问系统 Artifact Registry 项目中资源所需的权限,请让您的 Security Admin 为您授予以下角色,具体取决于您要将容器映像推送到哪个集群:

  • 组织管理员集群:如需将容器映像推送到组织管理员集群的系统 Artifact Registry,您需要拥有 Organization System Artifact Management Admin (organization-system-artifact-management-admin) 角色。
  • 根管理员集群:如需将容器映像推送到根管理员集群的系统 Artifact Registry,您需要拥有“系统制品管理管理员”(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 存储桶下载容器映像

如需获得从 S3 存储桶下载容器映像所需的权限,请让您的 Security Admin 在项目的命名空间中为您授予 Project Bucket Object Viewer (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 存储桶的项目命名空间。

您将获得对项目内存储桶和该存储桶中对象的只读权限。

获得必要的权限后,请按以下步骤操作,从项目命名空间的 S3 存储桶中下载容器映像:

  1. 获取相应存储桶的 Secret 名称。密钥名称类似于以下示例:

    object-storage-key-std-user-ID
    

    Secret 名称包含用于访问相应分桶的唯一 ID 值。

  2. 复制相应存储桶的 Secret 名称。

  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

请按照以下步骤将工作站中的容器映像文件推送到管理员集群中的系统 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