Los artefactos del sistema se encuentran en Artifact Registry del clúster de infraestructura de la organización. Cuando un administrador de plataforma crea una organización en el dispositivo aislado de Google Distributed Cloud (GDC), todos los artefactos del sistema se replican desde el clúster de infraestructura de la organización.
El operador de infraestructura debe enviar nuevos artefactos del sistema al clúster de infraestructura de la organización. El envío de nuevos artefactos del sistema solo se produce cuando el PA solicita habilitar funciones opcionales o cuando el sistema muestra errores o interrupciones que puedes solucionar aplicando parches a los nuevos artefactos.
Antes de empezar
Para obtener los permisos que necesitas para acceder a los recursos de los proyectos de Artifact Registry del sistema como administrador, pide a tu administrador de seguridad que te conceda los siguientes roles en función del clúster al que quieras enviar la imagen de contenedor.
Después de obtener los permisos necesarios, sigue estos pasos antes de enviar una imagen al registro de artefactos del sistema del clúster de infraestructura:
Descarga e instala la CLI de Distributed Cloud siguiendo las instrucciones de la interfaz de línea de comandos (CLI) de gdcloud.
Instala el componente
docker-credential-gdcloud
siguiendo las instrucciones de Instalar componentes:gdcloud components install docker-credential-gdcloud
Inicia sesión con el proveedor de identidades configurado:
gdcloud auth login
Exporta el archivo kubeconfig:
gdcloud clusters get-credentials CLUSTER_NAME
Sustituye
CLUSTER_NAME
por el nombre del clúster.Configura Docker:
gdcloud auth configure-docker
Descargar una imagen de contenedor de un segmento de almacenamiento
Sigue las instrucciones de esta sección cuando el PA solicite descargar la imagen de un segmento de almacenamiento y subirla al Artifact Registry del sistema. El PA debe proporcionar detalles como los nombres del proyecto y del segmento.
Como IO, necesitas permisos para descargar la imagen del contenedor del segmento de almacenamiento:
- Pide a tu administrador de seguridad que te conceda el rol Lector de objetos de segmentos de proyecto (
project-bucket-object-viewer
) en el espacio de nombres del proyecto.
Para obtener más información, consulta el runbook IAM R0005.
Obtendrás acceso de solo lectura al segmento del proyecto y a los objetos de ese segmento.
Una vez que hayas obtenido los permisos necesarios, sigue estos pasos para descargar la imagen de contenedor del segmento de almacenamiento del espacio de nombres del proyecto de PA:
Pídele al asistente que te diga el nombre secreto del contenedor. El nombre del secreto es similar al siguiente ejemplo:
object-storage-key-std-user-ID
El nombre del secreto incluye un valor
ID
único para acceder al contenedor.Copia el nombre secreto del segmento.
Obtén las credenciales de acceso al segmento y configura la CLI de gdcloud:
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}" gdcloud config set storage/s3_access_key_id ${ACCESS_KEY} gdcloud config set storage/s3_secret_access_key ${SECRET_KEY} gdcloud config set storage/s3_endpoint ${S3_ENDPOINT}
Sustituye
SECRET_NAME
por el valor que has copiado en el paso anterior.Descarga la imagen de contenedor del segmento de almacenamiento en tu estación de trabajo:
gdcloud cp s3://BUCKET_NAME/g/CONTAINER_IMAGE_NAME
Haz los cambios siguientes:
BUCKET_NAME
: nombre del segmento de almacenamiento que contiene la imagen del contenedor. La PA proporciona este nombre.CONTAINER_IMAGE_NAME
: el nombre del archivo de imagen del contenedor que quieres descargar del contenedor de almacenamiento.
Envía la imagen a System Artifact Registry
Sigue estos pasos para enviar el archivo de la imagen de contenedor que tienes en tu estación de trabajo al registro de artefactos del sistema en el servidor de la API Management:
Abre la consola.
Obtén la ruta al endpoint de System Artifact Registry del clúster en el que quieras enviar la imagen de contenedor:
export REGISTRY_ENDPOINT=harbor.$(kubectl get configmap dnssuffix -n gpc-system -o jsonpath='{.data.dnsSuffix}')
Carga, etiqueta y envía la imagen de contenedor al endpoint de System Artifact Registry 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
Sustituye
CONTAINER_IMAGE_PATH
por la ruta del archivo de imagen del contenedor en tu sistema de archivos local. Un valor válido para esta ruta es, por ejemplo,oracle_db.tar
.
Extraer artefacto de Harbor
En la mayoría de los casos, el sistema de GDC interactúa automáticamente con el registro de artefactos del sistema (SAR) para extraer el artefacto más reciente de Harbor. En algunos casos concretos, puede realizar esta operación manualmente. Sigue estos pasos para extraer manualmente la imagen del artefacto de Harbor:
Defina los detalles de los artefactos por aplicación:
APP_NAME=APP HARBOR_PROJECT=HARBOR_PROJECT_NAME REPOSITORY=REPOSITORY
Haz los cambios siguientes:
APP
: el nombre de la aplicación.HARBOR_PROJECT_NAME
: el nombre del proyecto de Harbor.REPOSITORY
: el nombre del repositorio.
Obtén la información de Harbor:
HARBOR_URL=$(kubectl --kubeconfig=${ADMIN_KUBECONFIG} get harborcluster harbor -n harbor-system -o=jsonpath='{.spec.externalURL}') HARBOR_IP=${HARBOR_URL#https://}
Obtén la etiqueta del artefacto. Hay dos métodos para obtener la etiqueta:
Método 1: esta es la opción preferida:
- Lista los artefactos del paquete local y obtiene la etiqueta correspondiente:
TAG=$(gdcloud artifacts tree ${BUNDLE_SUB_FOLDER:?} | grep ${HARBOR_PROJECT:?}/${REPOSITORY:?} | cut -d ":" -f2 | grep -v '.sig')
Método 2: utiliza este método solo si el método 1 no funciona como esperabas:
Enumera las etiquetas de Harbor y selecciona la más reciente:
ADMIN_PASS=$(kubectl --kubeconfig=${ADMIN_KUBECONFIG} -n harbor-system get secret harbor-admin -o jsonpath="{.data.secret}" | base64 -d) curl -k -X GET \ --header 'Accept: application/json' \ --header "authorization: Basic $(echo -n admin:${ADMIN_PASS:?} | base64)" \ "${HARBOR_URL}/api/v2.0/projects/${HARBOR_PROJECT:?}/repositories/${REPOSITORY:?}/artifacts?with_tag=true" | jq -r '.[] | select(.tags != null) | .tags[] | {tag: .name, updated:.push_time}'
La salida debe ser similar al siguiente ejemplo:
{ "tag": "<tag1>", "updated": "<date1>" } { "tag": "<tag2>", "updated": "<date2>" }
Exporta el valor de la etiqueta con la hora de actualización más reciente:
TAG=MOST_RECENT_TAG
Sustituye
MOST_RECENT_TAG
por la etiqueta con la hora de actualización más reciente.
Descarga los artefactos de Harbor:
gdcloud artifacts pull --single-manifest-repo \ ${HARBOR_IP:?}/${HARBOR_PROJECT:?}/${REPOSITORY:?}:${TAG:?} \ ${APP_NAME:?}-${TAG:?}
Si ves el siguiente mensaje de error, puedes ignorarlo:
tee: '/root/logs/artifacts_pull_--single-manifest-repo_2023.07.13:14.59.24.log': Permission denied
Problemas conocidos
Hay varios problemas conocidos asociados a la extracción del artefacto de Harbor:
- Es posible que tengas que añadir el argumento
--kubeconfig ${INFRA_ORG_KUBECONFIG:?}
. El comando
curl
puede mostrar el siguiente mensaje de error:certificate signed by unknown authority
. Para solucionar este error, utilice uno de los siguientes métodos:- Solución temporal: añade la marca
--insecure
al comandogdcloud artifacts pull
. - Corrección fiable: confía en la AC de la infraestructura de la organización. Para obtener más información, consulta Error al extraer la imagen.
- Solución temporal: añade la marca
Es posible que tengas que extraer el contenido:
gdcloud artifacts extract ${APP_NAME:?}-${TAG:?} ${APP_NAME:?}-${TAG:?}-extracted