Configura contenedores para instancias

En esta página, se describe cómo configurar el comando entrypoint y los argumentos para una instancia de Cloud Run.

Cuando Cloud Run inicia un contenedor, ejecuta el comando entrypoint predeterminado y los argumentos del comando predeterminados de la imagen. Si deseas anular el entrypoint predeterminado y los argumentos del comando de la imagen, puedes usar los campos command y args en la configuración del contenedor. El campo command especifica el comando real que ejecuta el contenedor. El campo args especifica los argumentos que se pasan a ese comando.

Ten en cuenta que puedes tener un máximo de 1,000 argumentos por contenedor para cada instancia.

Roles obligatorios

Para obtener los permisos que necesitas para configurar e implementar instancias de Cloud Run, pídele a tu administrador que te otorgue los siguientes roles de IAM:

Para obtener una lista de los roles y los permisos de IAM asociados con Cloud Run, consulta los roles de IAM de Cloud Run y los permisos de IAM de Cloud Run. Si tu instancia de Cloud Run interactúa con las APIs deGoogle Cloud , como las bibliotecas cliente de Cloud, consulta la guía de configuración de identidades del servicio. Para obtener más información sobre cómo otorgar roles, consulta los permisos de implementación y cómo administrar el acceso.

Configura un punto de entrada y argumentos

Para anular la configuración predeterminada de la imagen ENTRYPOINT y CMD, puedes establecer el comando y los argumentos de punto de entrada para una instancia de Cloud Run con Google Cloud CLI o YAML:

gcloud

Para actualizar el comando de inicio y los argumentos de una instancia existente, sigue estos pasos:

gcloud beta run instances update INSTANCE --command COMMAND --args ARG1,ARG-N

Reemplaza lo siguiente:

  • INSTANCE: El nombre de la instancia.
  • COMMAND: Es el comando con el que se inicia el contenedor, si no usas el comando predeterminado.
  • ARG1: Es el argumento que envías al comando del contenedor. Usa una lista delimitada por comas cuando haya más de un argumento.

Para especificar un punto de entrada y argumentos durante la implementación de una instancia nueva o existente, haz lo siguiente:

gcloud beta run instances deploy INSTANCE --image IMAGE_URL --command COMMAND --args ARG1,ARG-N

Reemplaza IMAGE_URL por una referencia a la imagen de contenedor, como us-docker.pkg.dev/cloudrun/container/hello:latest.

Si quieres restablecer los valores predeterminados del contenedor para los comandos y argumentos del punto de entrada, proporciona cadenas vacías de la siguiente manera:

gcloud beta run instances update INSTANCE --command "" --args ""

YAML

  1. Si creas una instancia nueva, omite este paso. Si actualizas una instancia existente, descarga su configuración de YAML:

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. En el siguiente ejemplo, se incluye la configuración de YAML:

    apiVersion: run.googleapis.com/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      containers:
      - name: CONTAINER_NAME
        image: IMAGE_URL
        command:
        - COMMAND
        args:
        - ARG1
        - ARG-N

    Reemplaza lo siguiente:

    • INSTANCE: Es el nombre de tu instancia de Cloud Run.
    • CONTAINER_NAME: Es el nombre del contenedor.
    • IMAGE_URL: Es una referencia a la imagen de contenedor, como us-docker.pkg.dev/cloudrun/container/hello:latest.
    • COMMAND: Es el comando que usará el contenedor si no usas el comando predeterminado.
    • ARG1: Es el argumento que envías al comando del contenedor. Si usas varios argumentos, especifica cada uno en su propia línea, por ejemplo, como se muestra, ARG-N.
  3. Crea o actualiza la instancia con el siguiente comando:

    gcloud beta run instances replace instance.yaml

Configura el orden de inicio del contenedor para implementaciones de sidecar

Para especificar el orden de inicio del contenedor en una implementación de sidecar, usa la función de dependencias de contenedores. Especifica cualquier contenedor que tenga dependencias y enumera los contenedores de los que dependen para que esos contenedores se inicien primero. Los contenedores que no tienen dependencias siempre se inician primero y de forma simultánea.

Para usar esta función de forma correcta, debes usar sondeos de verificación de estado de inicio. El sondeo de inicio permite que Cloud Run inspeccione el estado de un contenedor dependiente, lo que garantiza que pase correctamente antes de iniciar el siguiente contenedor. Si no usas verificaciones de estado, los contenedores se inician en el orden especificado, incluso si los contenedores de los que dependen no pueden iniciarse.

Usa Google Cloud CLI o YAML para especificar el orden de inicio:

gcloud

Antes de usar Google Cloud CLI para especificar el orden de inicio, configura una verificación de estado de inicio para cualquier contenedor sidecar del que dependa otro contenedor. El contenedor de entrada (el contenedor con un puerto expuesto) tiene una verificación de estado de inicio de TCP predeterminada.

  1. En la consola de Google Cloud , activa Cloud Shell.

    Activa Cloud Shell

    En la parte inferior de la consola de Google Cloud , se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. Para implementar varios contenedores en una instancia con un orden de inicio especificado, ejecuta el siguiente comando:

gcloud beta run instances deploy INSTANCE \
     --container CONTAINER_1_NAME --image='IMAGE_URL' --port='CONTAINER_PORT' \
     --container CONTAINER_2_NAME --image='SIDECAR_IMAGE' --depends-on=CONTAINER_1_NAME \
     --startup-probe=tcpSocket.port=SIDECAR_PORT \
     --container CONTAINER_3_NAME --image='SIDECAR_IMAGE' --depends-on=CONTAINER_1_NAME,CONTAINER_2_NAME

Reemplaza lo siguiente:

  • INSTANCE: El nombre de la instancia.
  • IMAGE_URL: Es una referencia a la imagen de contenedor, como us-docker.pkg.dev/cloudrun/container/hello:latest.
  • CONTAINER_PORT: Es el puerto en el que el contenedor de entrada escucha las solicitudes entrantes. En el caso de una instancia con varios contenedores, debes configurar de forma explícita el puerto del contenedor para el contenedor de entrada.
  • SIDECAR_IMAGE: Es una referencia a la imagen del contenedor sidecar.
  • SIDECAR_PORT: Es el puerto del contenedor sidecar que verifica su sondeo de inicio de TCP. Cada contenedor sidecar del que dependa otro contenedor debe configurar un sondeo de inicio.

    Si deseas configurar cada contenedor en el comando de implementación, proporciona la configuración de cada contenedor después de los parámetros de container.

YAML

  1. Si creas una instancia nueva, omite este paso. Si actualizas una instancia existente, descarga su configuración de YAML:

    gcloud beta run instances describe INSTANCE --format export > instance.yaml
  2. En el siguiente ejemplo, se incluye la configuración de YAML:

    apiVersion: run.googleapis.com/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/container-dependencies: '{"CONTAINER1":["CONTAINER2"], "CONTAINER3":["CONTAINER1","CONTAINER2"]}'

    Reemplaza lo siguiente:

    • INSTANCE: Es el nombre de tu instancia de Cloud Run.
    • CONTAINER1: Es el nombre del primer contenedor que depende de uno o más contenedores. Puedes configurar el nombre del contenedor en el YAML; Cloud Run genera un nombre de forma automática si no se especifica uno.
    • CONTAINER2: Es el nombre del contenedor que debe iniciarse antes de CONTAINER1.
    • CONTAINER3: Es el nombre del segundo contenedor que depende de uno o más contenedores.

    En el ejemplo que se muestra en el fragmento YAML, CONTAINER2 se inicia primero, CONTAINER1 se inicia en segundo lugar y CONTAINER3 se inicia en último lugar.

  3. Crea o actualiza la instancia con el siguiente comando:

    gcloud beta run instances replace instance.yaml