Envía una imagen de contenedor de un clúster a otro

Los artefactos del sistema existen en Artifact Registry del clúster de administrador. Envía artefactos nuevos del sistema cuando este muestre errores o interrupciones que puedas corregir con parches de artefactos nuevos.

En este documento, se describe cómo enviar artefactos individuales de un clúster a otro.

Antes de comenzar

Para obtener los permisos que necesitas para acceder a los recursos en los proyectos del sistema de Artifact Registry como administrador, pídele a tu administrador de seguridad que te otorgue los siguientes roles según el clúster al que deseas enviar la imagen del contenedor:

  • Clúster de administrador de la organización: Para enviar la imagen del contenedor al Artifact Registry del sistema del clúster de administrador de la organización, necesitas el rol de administrador de Artifact Registry del sistema de la organización (organization-system-artifact-management-admin).
  • Clúster de administrador raíz: Para enviar la imagen del contenedor al Artifact Registry del sistema del clúster de administrador raíz, necesitas el rol de administrador de Artifact Registry del sistema (system-artifact-management-admin).

Después de obtener los permisos necesarios, sigue estos pasos antes de enviar una imagen al Artifact Registry del sistema del clúster de administrador raíz o del clúster de administrador de la organización:

  1. Descarga e instala la CLI de Distributed Cloud siguiendo las instrucciones de la interfaz de línea de comandos (CLI) de gdcloud.

  2. Instala el componente docker-credential-gdcloud siguiendo las instrucciones de Instala componentes.

    gdcloud components install docker-credential-gdcloud
    
  3. Accede con el proveedor de identidad configurado.

    gdcloud auth login
    
  4. Exporta el archivo kubeconfig.

    gdcloud clusters get-credentials CLUSTER_NAME
    

    Reemplaza CLUSTER_NAME por el nombre del clúster.

  5. Configura Docker.

    gdcloud auth configure-docker
    

Descarga una imagen de contenedor desde un bucket de S3

Para obtener los permisos que necesitas para descargar la imagen del contenedor del bucket de S3, pídele a tu administrador de seguridad que te otorgue el rol de Visualizador de objetos del bucket del proyecto (project-bucket-object-viewer) en el espacio de nombres del proyecto.

El administrador de seguridad te otorga acceso creando una vinculación de rol:

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

Reemplaza lo siguiente:

  • USER: Es el nombre de la cuenta del usuario que requiere la vinculación de rol.
  • PROJECT_NAMESPACE: Es el espacio de nombres del proyecto con el bucket de S3.

Obtienes acceso de solo lectura al bucket dentro del proyecto y a los objetos de ese bucket.

Después de obtener los permisos necesarios, sigue estos pasos para descargar la imagen del contenedor del bucket de S3 del espacio de nombres del proyecto:

  1. Obtén el nombre secreto del bucket. El nombre del secreto se ve como el siguiente ejemplo:

    object-storage-key-std-user-ID
    

    El nombre del secreto incluye un valor ID único para acceder al bucket.

  2. Copia el nombre secreto del bucket.

  3. Obtén credenciales de acceso al bucket y configura la herramienta de CLI s3cmd.

    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
    

    Reemplaza SECRET_NAME por el valor que copiaste en el paso anterior.

  4. Descarga la imagen del contenedor del bucket de S3 a tu estación de trabajo.

    s3cmd get s3://BUCKET_NAME /g/CONTAINER_IMAGE_NAME
    

    Reemplaza lo siguiente:

    • BUCKET_NAME: Es el nombre del bucket de S3 que contiene la imagen del contenedor.
    • CONTAINER_IMAGE_NAME: Es el nombre del archivo de imagen de contenedor que deseas descargar del bucket de S3.

Envía la imagen al registro de Artifact Registry del sistema

Sigue estos pasos para enviar el archivo de la imagen del contenedor que tienes en tu estación de trabajo al Artifact Registry del sistema en el clúster de administrador:

  1. Abre la consola.

  2. Obtén la ruta de acceso al extremo de Artifact Registry del sistema del clúster en el que deseas enviar la imagen de contenedor.

    export REGISTRY_ENDPOINT=harbor.$(kubectl get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}')
    
  3. Carga, etiqueta y envía la imagen del contenedor al extremo de Artifact Registry del sistema del clúster.

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

    Reemplaza CONTAINER_IMAGE_PATH por la ruta de acceso al archivo de imagen del contenedor en tu sistema de archivos local. Un valor válido para esta ruta es, por ejemplo, oracle_db.tar.