Administrar agentes de transferencia

Los agentes del Servicio de transferencia de almacenamiento son aplicaciones que se ejecutan dentro de un contenedor de Open Container Initiative (OCI) que se coordinan con el Servicio de transferencia de almacenamiento para las transferencias que involucran sistemas de archivos o almacenamiento compatible con S3.

De forma predeterminada, el Servicio de transferencia de almacenamiento usa Docker para compilar y ejecutar contenedores de OCI. El Servicio de transferencia de almacenamiento también admite Podman para la administración de contenedores. Para usar Podman, debes instalar tus agentes con el comando podman run.

Si tu transferencia no implica un sistema de archivos ni un almacenamiento compatible con S3, no necesitas configurar agentes.

En este documento, se describe cómo administrar agentes de transferencia en tus servidores.

Descripción general

  • Los procesos de los agentes son dinámicos. Mientras ejecutas una transferencia, puedes agregar agentes para aumentar el rendimiento. Los agentes recién iniciados se unen al grupo de agentes asignado y realizan trabajos a partir de transferencias existentes. Puedes usar esto con el fin de ajustar la cantidad de agentes que se ejecutan o para adaptar el rendimiento de transferencia a los cambios de demanda de la transferencia.

  • Los procesos de los agentes son un conjunto tolerante a errores. Si un agente deja de ejecutarse, los agentes restantes seguirán en funcionamiento. Si se detienen todos tus agentes y los reinicias, la transferencia se reanudará donde se detuvieron. Esto te permite evitar la supervisión de los agentes, el reintento de las transferencias o la implementación de una lógica de recuperación. Puedes aplicar parches en los grupos de agentes, además de moverlo y escalarlo de forma dinámica sin tiempo de inactividad de transferencia. Para ello, coordina los agentes con Google Kubernetes Engine.

    Por ejemplo, envía dos transferencias mientras se ejecutan dos agentes. Si uno de los agentes se detiene debido a un reinicio de la máquina o un parche del sistema operativo, el agente restante continúa en funcionamiento. Las dos transferencias se siguen ejecutando, pero son más lentas, ya que un solo agente transfiere los datos. Si el agente restante también se detiene, todas las transferencias dejan de avanzar, ya que no hay agentes en ejecución. Cuando reinicias los procesos del agente, las transferencias se reanudan desde donde quedaron.

  • Los procesos de los agentes pertenecen a un grupo. Trasladan los datos de forma colectiva en paralelo. Debido a esto, todos los agentes dentro de un grupo deben tener el mismo acceso a todas las fuentes de datos que deseas transferir.

    Por ejemplo, si transfieres datos desde un sistema de archivos en particular, debes activar el sistema de archivos en cada máquina que aloja agentes en el grupo de agentes. Si algunos agentes de tu grupo pueden acceder a una fuente de datos y otros no, las transferencias desde esa fuente de datos no se realizarán de forma correcta.

Antes de comenzar

Antes de configurar las transferencias, asegúrate de haber configurado el acceso para usuarios y cuentas de servicio.

Si usarás comandos de gcloud, instala la CLI de gcloud.

Instala y ejecuta agentes de transferencia

Recomendamos instalar un mínimo de tres agentes por grupo de agentes, idealmente en máquinas separadas. Para obtener más información sobre cómo determinar cuántos agentes se ejecutan, consulta Maximiza el rendimiento del agente de transferencia.

No incluyas información sensible, como información de identificación personal (PII) ni datos de seguridad, en el prefijo de ID de tu agente. Los nombres de los recursos se pueden propagar a los nombres de otros recursos de Google Cloud y pueden exponerse a sistemas internos de Google fuera de tu proyecto.

Para instalar y ejecutar agentes de transferencia, haz lo siguiente:

Consola de Google Cloud

  1. En la consola de Google Cloud, ve a la página Grupos de agentes.

    Ir a los grupos de agentes

  2. Selecciona el grupo de agentes al que deseas agregar el agente nuevo.

  3. Haz clic en Instalar agente.

  4. Sigue las instrucciones que se muestran para instalar y ejecutar el agente.

    Para obtener más información sobre las opciones de línea de comandos del agente, consulta Opciones de línea de comandos del agente.

CLI de gcloud

Para instalar uno o más agentes mediante la CLI de gcloud, ejecuta gcloud transfer agents install:

gcloud transfer agents install --pool=POOL_NAME --count=NUM_AGENTS \
  --mount-directories=MOUNT_DIRECTORIES

La herramienta te guía a través de los pasos necesarios para instalar los agentes. Con este comando, se instalan NUM_AGENTS agentes en tu máquina, asignados al nombre del grupo especificado como POOL_NAME, y autentica al agente con tus credenciales gcloud. El nombre del grupo debe existir o se mostrará un error.

La marca --mount-directories es opcional, pero se recomienda usarla. Su valor es una lista separada por comas de directorios en el sistema de archivos a los que se le otorgará acceso al agente. Si omites esta marca, se activará todo el sistema de archivos en el contenedor del agente. Consulta la referencia de gcloud para obtener más detalles.

Fuentes compatibles con S3

Cuando instales agentes para usarlos con una fuente compatible con S3, debes proporcionar credenciales de AWS, ya sea como variables de entorno como los valores de AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY, o almacenadas como credenciales predeterminadas en los archivos de configuración de tu sistema.

export AWS_ACCESS_KEY_ID=ID
export AWS_SECRET_ACCESS_KEY=SECRET
gcloud transfer agents install --pool=POOL_NAME \
  --creds-file=/relative/path/to/service-account-key.json

Usa una clave de cuenta de servicio

Para ejecutar agentes mediante una clave de cuenta de servicio, usa la opción --creds-file:

gcloud transfer agents install --pool=POOL_NAME --count=NUM_AGENTS \
   --creds-file=/relative/path/to/service-account-key.json

Más información

Para obtener una lista completa de las marcas opcionales, ejecuta gcloud transfer agents install --help o lee la referencia de gcloud transfer.

Docker

Antes de usar Docker para instalar agentes, sigue las instrucciones para instalar Docker.

El comando docker run instala un agente. Para aumentar la cantidad de agentes en tu grupo, vuelve a ejecutar este comando tantas veces como sea necesario.

Cuando instalas agentes, puedes elegir autenticarte con tus credenciales predeterminadas de gcloud o con una cuenta de servicio.

Credenciales predeterminadas

Para permitir que el contenedor de Docker se autentique con tus credenciales predeterminadas de gcloud, crea un volumen de Docker que contenga un archivo con tus credenciales predeterminadas de la aplicación. Para ello, ejecuta el siguiente comando:

sudo docker run -ti --name gcloud-config google/cloud-sdk gcloud auth application-default login

Luego, usa el siguiente comando para instalar un agente con la marca --volumes-from para activar el volumen de credenciales gcloud-config:

sudo docker run --ulimit memlock=64000000 -d --rm \
--volumes-from gcloud-config \
-v HOST_DIRECTORY:CONTAINER_DIRECTORY \
gcr.io/cloud-ingest/tsop-agent:latest \
--project-id=PROJECT_ID \
--hostname=$(hostname) \
--agent-pool=POOL_NAME

Autenticación de la cuenta de servicio

Para instalar y ejecutar agentes de transferencia docker run con credenciales de cuenta de servicio, especifica la ruta de acceso a la clave de cuenta de servicio con formato JSON con la marca --creds-file.

La ruta de acceso debe tener el prefijo /transfer_root.

Consulta Crea y administra claves de cuentas de servicio para obtener más información sobre las claves de cuentas de servicio.

sudo docker run --ulimit memlock=64000000 -d --rm \
-v HOST_DIRECTORY:CONTAINER_DIRECTORY \
-v PATH/TO/KEY.JSON:PATH/TO/KEY.JSON \
gcr.io/cloud-ingest/tsop-agent:latest \
--project-id=PROJECT_ID \
--creds-file=/transfer_root/PATH/TO/KEY.JSON \
--hostname=$(hostname) \
--agent-pool=POOL_NAME

Opciones y marcas

Reemplaza las variables de los ejemplos anteriores por la siguiente información:

  • HOST_DIRECTORY es el directorio en la máquina anfitrión desde el que deseas copiar. Puedes usar más de una marca -v para especificar directorios adicionales desde los cuales copiar.
  • CONTAINER_DIRECTORY es el directorio asignado dentro del contenedor del agente. Debe ser igual que HOST_DIRECTORY.
  • PROJECT_ID es el ID del proyecto que aloja la transferencia.
  • POOL_NAME es el nombre del grupo de agentes en el que se instalará este agente. Si omites esta marca, el agente se instalará en el grupo transfer_service_default de tu proyecto.

El comando docker run admite marcas adicionales.

  • --enable-mount-directory activa todo el sistema de archivos en el directorio /transfer_root del contenedor. Si se especifica --enable-mount-directory, no se aplican restricciones de directorio con la marca -v.

  • --creds-file=CREDENTIAL_FILE especifica la ruta a un archivo de credenciales de cuenta de servicio con formato JSON. A menos que uses --enable_mount_directory, debes hacer lo siguiente:

    1. Activa el archivo de credenciales con la marca -v.
    2. Agrega el prefijo /transfer_root a la ruta de acceso a --creds-file.

    Por ejemplo:

    -v /tmp/key.json:/tmp/key.json \
    --creds-file=/transfer_root/tmp/key.json
    
  • --enable-s3 especifica que este agente es para transferencias desde almacenamiento compatible con S3. Los agentes instalados con esta opción no se pueden usar para transferencias desde sistemas de archivos POSIX.

  • Si la transferencia es de AWS S3 o un almacenamiento compatible con S3, pasa el ID de clave de acceso y la clave secreta con variables de entorno:

    -e AWS_ACCESS_KEY_ID=AWS_ACCESS_KEY_ID \
    -e AWS_SECRET_ACCESS_KEY=AWS_SECRET_ACCESS_KEY
    
  • --env HTTPS_PROXY=PROXY especifica un proxy de reenvío en tu red. El valor de PROXY es la URL HTTP y el puerto del servidor proxy. Para evitar la duplicación de solicitudes en la encriptación TLS, asegúrate de especificar la URL HTTP, y no una URL HTTPS. Las solicitudes duplicadas impiden que el servidor proxy envíe solicitudes de salida válidas.

  • --agent-id-prefix=ID_PREFIX especifica un prefijo opcional que se antepone al ID del agente para ayudar a identificar al agente o su máquina en la consola de Google Cloud. Cuando se usa un prefijo, el ID del agente tiene el formato prefix + hostname + Docker container ID.

  • --log-dir=LOGS_DIRECTORY modifica el directorio en el que el agente escribe registros. El directorio predeterminado es /tmp/.

    Si no especificaste --enable_mount_directory, debes usar /transfer_root como prefijo para esta ruta. Por ejemplo, /transfer_root/logs.

  • --max-physical-mem=MAX_MEMORY: De forma predeterminada, los agentes usan un máximo de 8 GiB de memoria del sistema. Si el valor predeterminado no se ajusta a tu entorno, puedes especificar un uso máximo de memoria adecuado en los siguientes formatos:

    Valor max-physical-mem Configuración del uso máximo de memoria
    6g 6 gigabytes
    6gb 6 gigabytes
    6GiB 6 gibibytes

Podman

Antes de usar Podman para instalar agentes, instala Podman:

sudo apt-get update
sudo apt-get -y install podman

Cuando instales agentes, puedes elegir autenticarte con tus credenciales predeterminadas de gcloud o con una cuenta de servicio.

Credenciales predeterminadas

Para permitir que el contenedor del agente se autentique con tus credenciales predeterminadas de Google Cloud CLI, crea un volumen que contenga un archivo con tus credenciales predeterminadas de la aplicación. Para ello, ejecuta el siguiente comando:

  gcloud auth print-access-token | podman login -u oauth2accesstoken --password-stdin gcr.io
  sudo podman pull gcr.io/google.com/cloudsdktool/google-cloud-cli:stable
  sudo podman run -ti --replace --name gcloud-config gcr.io/google.com/cloudsdktool/google-cloud-cli:stable gcloud auth application-default login
  ```

Then use the following command to install an agent, using the
`--volumes-from` flag to mount the `gcloud-config` credentials volume.
The command installs one agent. To increase the number of agents in your
pool, re-run this command as many times as required.

```sh
  sudo podman run \
    --ulimit memlock=64000000 \
    -d \
    --rm \
    --volumes-from gcloud-config \
    -v HOST_DIRECTORY:CONTAINER_DIRECTORY \
    gcr.io/cloud-ingest/tsop-agent:latest \
    --project-id=PROJECT_ID \
    --hostname=$(hostname) \
    --agent-pool=POOL_NAME
  ```

Autenticación de la cuenta de servicio

Para instalar y ejecutar agentes de transferencia con credenciales de cuenta de servicio, especifica la ruta de acceso a la clave de la cuenta de servicio con formato JSON con la marca --creds-file.

La ruta de acceso debe tener el prefijo /transfer_root.

Consulta Crea y administra claves de cuentas de servicio para obtener más información sobre las claves de cuentas de servicio.

sudo podman run --ulimit memlock=64000000 -d --rm \
-v HOST_DIRECTORY:CONTAINER_DIRECTORY \
-v PATH/TO/KEY.JSON:PATH/TO/KEY.JSON \
gcr.io/cloud-ingest/tsop-agent:latest \
--project-id=PROJECT_ID \
--creds-file=/transfer_root/PATH/TO/KEY.JSON
--hostname=$(hostname) \
--agent-pool=POOL_NAME

Opciones y marcas

Reemplaza las variables de los ejemplos anteriores por la siguiente información:

  • HOST_DIRECTORY es el directorio en la máquina anfitrión desde el que deseas copiar. Puedes usar más de una marca -v para especificar directorios adicionales desde los cuales copiar.
  • CONTAINER_DIRECTORY es el directorio asignado dentro del contenedor del agente. Debe ser igual que HOST_DIRECTORY.
  • PROJECT_ID es el ID del proyecto que aloja la transferencia.
  • POOL_NAME es el nombre del grupo de agentes en el que se instalará este agente. Si omites esta marca, el agente se instalará en el grupo transfer_service_default de tu proyecto.

El comando podman run admite marcas adicionales.

  • --enable-mount-directory activa todo el sistema de archivos en el directorio /transfer_root del contenedor. Si se especifica --enable-mount-directory, no se aplican restricciones de directorio con la marca -v.

  • --creds-file=CREDENTIAL_FILE especifica la ruta a un archivo de credenciales de cuenta de servicio con formato JSON. A menos que uses --enable_mount_directory, debes hacer lo siguiente:

    1. Activa el archivo de credenciales con la marca -v.
    2. Agrega el prefijo /transfer_root a la ruta de acceso a --creds-file.

    Por ejemplo:

    -v /tmp/key.json:/tmp/key.json \
    --creds-file=/transfer_root/tmp/key.json
    
  • --enable-s3 especifica que este agente es para transferencias desde almacenamiento compatible con S3. Los agentes instalados con esta opción no se pueden usar para transferencias desde sistemas de archivos POSIX.

  • Si la transferencia es de AWS S3 o un almacenamiento compatible con S3, pasa el ID de clave de acceso y la clave secreta con variables de entorno:

    -e AWS_ACCESS_KEY_ID=AWS_ACCESS_KEY_ID \
    -e AWS_SECRET_ACCESS_KEY=AWS_SECRET_ACCESS_KEY
    
  • --env HTTPS_PROXY=PROXY especifica un proxy de reenvío en tu red. El valor de PROXY es la URL HTTP y el puerto del servidor proxy. Para evitar la duplicación de solicitudes en la encriptación TLS, asegúrate de especificar la URL HTTP, y no una URL HTTPS. Las solicitudes duplicadas impiden que el servidor proxy envíe solicitudes de salida válidas.

  • --agent-id-prefix=ID_PREFIX especifica un prefijo opcional que se antepone al ID del agente para ayudar a identificar al agente o su máquina en la consola de Google Cloud. Cuando se usa un prefijo, el ID del agente tiene el formato prefix + hostname + OCI container ID.

  • --log-dir=LOGS_DIRECTORY modifica el directorio en el que el agente escribe registros. El directorio predeterminado es /tmp/.

    Si no especificaste --enable_mount_directory, debes usar /transfer_root como prefijo para esta ruta. Por ejemplo, /transfer_root/logs.

  • --max-physical-mem=MAX_MEMORY: De forma predeterminada, los agentes usan un máximo de 8 GiB de memoria del sistema. Si el valor predeterminado no se ajusta a tu entorno, puedes especificar un uso máximo de memoria adecuado en los siguientes formatos:

    Valor max-physical-mem Configuración del uso máximo de memoria
    6g 6 gigabytes
    6gb 6 gigabytes
    6GiB 6 gibibytes

Soluciona problemas

Si tu configuración de SELinux requiere que se coloquen etiquetas en el contenido del volumen montado en un contenedor, agrega la marca :Z al volumen:

sudo podman run --ulimit memlock=64000000 -d --rm \
-v HOST_DIRECTORY:CONTAINER_DIRECTORY:Z \
-v PATH/TO/KEY.JSON:PATH/TO/KEY.JSON \
gcr.io/cloud-ingest/tsop-agent:latest \
--project-id=PROJECT_ID \
--creds-file=/transfer_root/PATH/TO/KEY.JSON
--hostname=$(hostname) \
--agent-pool=POOL_NAME

Sin una etiqueta, el sistema de seguridad podría impedir que los procesos que se ejecutan dentro del contenedor usen el contenido. De forma predeterminada, Podman no cambia las etiquetas establecidas por el SO.

Confirma las conexiones del agente

Para confirmar que los agentes estén conectados, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Grupos de agentes.

    Ir a los grupos de agentes

    Se muestran tus grupos de agentes con la cantidad de agentes conectados.

  2. Selecciona un grupo de agentes para ver los detalles de los agentes conectados.

Si un agente nuevo no aparece en la página del grupo de agentes en un plazo de 10 minutos después de su creación, consulta Los agentes no están conectados.

Supervisar la actividad del agente

Puedes usar Cloud Monitoring para supervisar la actividad del agente.

Monitoring está disponible en las dimensiones project, agent_pool y agent_id.

Con estos datos de supervisión, puedes configurar alertas para recibir notificaciones de posibles problemas con la transferencia. Para hacerlo, crea una alerta en cualquiera de las siguientes métricas de Google Cloud:

Nombre de la métrica Qué describe Usos sugeridos
storagetransfer.googleapis.com/agent/transferred_bytes_count Mide la rapidez con la que un agente específico transfiere datos (en todos los trabajos a los que brinda servicio) en un momento determinado. Alerta de caídas en el rendimiento.
storagetransfer.googleapis.com/agent/connected Un booleano que es verdadero para cada agente del que Google Cloud recibió un mensaje reciente de señal de supervisión de funcionamiento.
  • Alerta para agentes con fallas
  • Hay una cantidad de agentes menor que la considerada necesaria para un rendimiento razonable
  • Indica un problema con máquinas de agentes

Detén un agente

Para detener un agente, ejecuta docker stop en su ID de contenedor de Docker. Para encontrar el ID y detener el agente, sigue estos pasos:

  1. En la consola de Google Cloud, ve a la página Grupos de agentes.

    Ir a los grupos de agentes

  2. Selecciona el grupo de agentes que contiene el agente que deseas detener.

  3. Selecciona un agente de la lista. Usa el campo Filtro para buscar prefijos, estado del agente, antigüedad del agente, etcétera.

  4. Haz clic en Detener agente. Se muestra el comando docker stop con el ID del contenedor específico.

  5. Ejecuta el comando en la máquina en la que se ejecuta el agente. Un comando docker stop exitoso muestra el ID del contenedor.

Una vez que el agente se detiene, aparece en la lista de grupos de agentes como Desconectado.

Borra un agente

Para borrar agentes específicos, obtén una lista de los agentes que se ejecutan en tu máquina:

docker container list --all --filter ancestor=gcr.io/cloud-ingest/tsop-agent

Luego, pasa los ID de agente a transfer agents delete:

gcloud transfer agents delete --ids=id1,id2,…

Para borrar todos los agentes que se ejecutan en la máquina, usa la marca --all o la marca --uninstall. Ambas marcas borran todos los agentes de la máquina; la marca --uninstall también desinstala la imagen de Docker del agente.

gcloud transfer agents delete --all
gcloud transfer agents delete --uninstall

Detalles de transferencia del sistema de archivos

Transferencias incrementales

El Servicio de transferencia de almacenamiento comienza todas las transferencias mediante el cálculo de los datos presentes en el origen y el destino para determinar qué archivos de origen son nuevos, cuáles fueron actualizados y cuáles quitados con respecto a la última transferencia. Hacemos esto para reducir la cantidad de datos que enviamos desde tus máquinas, para usar el ancho de banda de manera eficaz y para reducir los tiempos de transferencia.

Para detectar si un archivo cambió, verificamos la última hora de modificación y el tamaño del archivo de origen y comparamos esos datos con la última hora de modificación y el tamaño registrados cuando se copió el archivo por última vez. Cuando detectamos un archivo nuevo o modificado, copiamos todo el archivo en su destino. Para obtener más información sobre la actualización de archivos, consulta Detalles de coherencia de datos.

De forma predeterminada, detectamos los archivos borrados en la fuente, pero no actuamos. Si eliges la opción de sincronización Eliminar archivos de destino que no están en la fuente al crear o editar, tu transferencia eliminará el objeto correspondiente del destino.

Si eliges la opción de sincronización Eliminar archivos de destino que no están también en la fuente, los archivos que se eliminan accidentalmente en la fuente también se eliminan en el destino. Para evitar la pérdida de datos por eliminaciones accidentales, recomendamos habilitar las versiones de objetos en el depósito de destino si eliges usar esta opción. Entonces, si eliminas un archivo accidentalmente, puedes restaurar sus objetos en Cloud Storage a una versión anterior.

Detalles de coherencia de datos

Una operación de transferencia correcta transferirá todos los archivos de origen que existían y no se modificaron durante todo el tiempo de ejecución de la operación. Los archivos de origen que se crearon, actualizaron o borraron durante una transferencia pueden o no tener esos cambios reflejados en el conjunto de datos de destino.

El Servicio de transferencia de almacenamiento usa la última hora de modificación y el tamaño de un archivo para determinar si cambió. Si se actualiza un archivo sin cambiar la última hora de modificación o tamaño, y habilitas la opción delete-objects-from-source, es posible que pierdas datos de ese cambio.

Cuando uses la función delete-objects-from-source, te recomendamos que suspendas las escrituras en la fuente durante la transferencia para protegerte contra la pérdida de datos.

Para inmovilizar las escrituras en tu fuente, realiza una de las siguientes acciones:

  • Clona el directorio que deseas transferir y, luego, usa el directorio clonado como fuente de la transferencia.
  • Detén las aplicaciones que escriben en el directorio de origen.

Si es importante capturar los cambios que se produjeron durante una transferencia, puedes volver a ejecutar la transferencia o configurar el sistema de archivos de origen en modo de solo lectura mientras se ejecuta la operación.

Dado que Cloud Storage no tiene la noción de directorios, los directorios de origen vacíos no se transfieren.