Implementa imágenes de contenedor

En esta página, se describe cómo implementar servicios y revisiones nuevas en Cloud Run for Anthos en Google Cloud.

Requisitos previos

Para usar la herramienta de línea de comandos de gcloud, debes tener instalado y configurado el SDK de Cloud.

Permisos necesarios para realizar una implementación

Necesitas permisos para crear, actualizar y borrar en el apiGroup serving.knative.dev y en el tipo Service; además, debes tener UNA de las siguientes funciones:

  • Propietario
  • Editor
  • Administrador de GKE
  • Desarrollador de GKE

Imágenes que puedes implementar

No hay un límite de tamaño que se aplique a la imagen de contenedor que puedes implementar.

Puedes usar contenedores desde cualquier registro de contenedores, como Docker Hub. Para obtener información sobre la implementación de imágenes privadas de registros diferentes de Container Registry o Artifact Registry, consulta Implementa imágenes de contenedor privadas de otros registros de contenedores.

Implementa un servicio nuevo

Puedes especificar una imagen de contenedor con una etiqueta (por ejemplo, gcr.io/my-project/my-image:latest) o con un resumen exacto (por ejemplo, gcr.io/my-project/my-image@sha256:41f34ab970ee...).

Cuando implementas en un servicio por primera vez, se crea su primera revisión. Ten en cuenta que las revisiones son inmutables. Si implementas desde una etiqueta de imagen de contenedor, se resolverá en un resumen y la revisión siempre entregará este resumen en particular.

Puedes implementar un contenedor mediante Cloud Console, la línea de comandos de gcloud o desde un archivo de configuración YAML.

Haz clic en la pestaña para obtener instrucciones de la herramienta que elijas.

Configuración de la ubicación predeterminada de gcloud

Si ya configuraste una ubicación en la configuración de default del SDK de Cloud, los comandos de gcloud usarán esos valores de forma predeterminada, incluidos los siguientes:

  • compute/region
  • compute/zone
  • kuberun/cluster
  • kuberun/region
  • kuberun/cluster_location

Ejecuta el siguiente comando de configuración de gcloud para ver tu configuración de default:

gcloud config configurations describe default

Console

Para implementar una imagen de contenedor, sigue estos pasos:

  1. Ir a Cloud Run for Anthos

  2. Haz clic en Crear servicio para mostrar la página Crear servicio (Create service).

    En el formulario, haz lo siguiente:

    1. Selecciona la plataforma de Cloud Run for Anthos en la que realizas la implementación:

      • Cloud Run para Anthos, que permite implementar en clústeres de GKE o Anthos en un clúster de VMware con Cloud Run for Anthos habilitado.
    2. En el menú desplegable, selecciona uno de los clústeres de GKE disponibles para tu servicio.

    3. Ingresa el nombre del servicio que quieras. Los nombres de servicio deben ser únicos por región y proyecto o por clúster. El nombre de un servicio no se puede cambiar más adelante.

    4. En Conectividad, haz lo siguiente:

      • Selecciona Interno si deseas restringir el acceso solo a otros servicios de Cloud Run for Anthos o a servicios del clúster que usan Istio.
      • Selecciona Externo para permitir el acceso externo a tu servicio.

      Ten en cuenta que puedes cambiar la opción de conectividad en cualquier momento, como se describe en Cambia la configuración de conectividad del servicio.

    5. Haz clic en Siguiente para ir a la segunda página del formulario de creación de servicios:

      imagen

      En el formulario, haz lo siguiente:

      1. En el cuadro de texto URL de la imagen de contenedor, ingresa la URL de una imagen de un registro compatible, por ejemplo, gcr.io/myproject/my-image:latest.

        Para usar Artifact Registry con las imágenes de contenedor privadas, debes usar el resumen de la imagen. Si deseas usar la etiqueta de imagen de las imágenes de contenedor privadas, debes crear y usar un imagePullSecret hasta que el problema conocido se resuelva.

      2. De manera opcional, haz clic en Mostrar la configuración avanzada (Show Advanced Settings) y en las pestañas posteriores para establecer lo siguiente:

      3. Haz clic en Crear (Create) para implementar la imagen en Cloud Run for Anthos y espera a que termine la implementación.

    Acabas de implementar un servicio en un clúster habilitado para Cloud Run for Anthos.

Línea de comandos

Para implementar una imagen de contenedor, sigue estos pasos:

  1. Ejecuta el comando gcloud kuberun core services create:

    gcloud kuberun core services create SERVICE --image IMAGE_URL

    • Reemplaza SERVICE por el nombre del servicio en el que deseas realizar la implementación. Si el servicio especificado no existe, se crea un servicio nuevo.

    • Reemplaza IMAGE_URL por una referencia a la imagen de contenedor, como gcr.io/myproject/my-image:latest.

    • Opciones de implementación adicionales:

      • Para implementar en un espacio de nombres que no sea default, debes especificar ese espacio de nombres con el parámetro --namespace.

      • Para implementar en una ubicación distinta de la configuración predeterminada, debes especificar name y location del clúster con --cluster y parámetro --cluster-location:

      gcloud kuberun core services create SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • Puedes establecer las opciones de conectividad con la marca --connectivity como se describe en Cambia la configuración de conectividad del servicio para especificar el acceso interno o externo.

      • Para Cloud Run for Anthos local, debes incluir el parámetro --kubeconfig y especificar tu archivo de configuración:

      gcloud kuberun core services create SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. Espera a que finalice la implementación. Una vez que la compilación se completa de manera correcta, se muestra un mensaje de éxito, además de la URL del servicio implementado.

YAML

Puedes almacenar la especificación de servicio en un archivo YAML y, luego, implementarla con la línea de comandos de gcloud.

  1. Crea un archivo service.yaml nuevo con este contenido:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          containers:
          - image: IMAGE

    Reemplaza los siguientes elementos:

    • SERVICE por el nombre de tu servicio de Cloud Run for Anthos
    • IMAGE por la URL de la imagen de contenedor. Para usar Artifact Registry con las imágenes de contenedor privadas, debes usar el resumen de la imagen. Si deseas usar la etiqueta de imagen de las imágenes de contenedor privadas, debes crear y usar un imagePullSecret hasta que el problema conocido se resuelva.

    También puedes especificar más opciones de configuración, como variables de entorno o límites de memoria.

  2. Implementa el servicio nuevo mediante el siguiente comando:

    gcloud beta run services replace service.yaml

Cloud Code

Para realizar una implementación con Cloud Code, consulta las guías de IntelliJ y Visual Studio Code.

Implementa una revisión nueva de un servicio existente

Puedes implementar una revisión nueva mediante Cloud Console, la línea de comandos de gcloud o un archivo de configuración YAML.

Ten en cuenta que cualquier cambio en la configuración hace que se cree una revisión nueva, incluso si no hay cambios en la imagen de contenedor. Cada revisión creada es inmutable.

Haz clic en la pestaña para obtener instrucciones de la herramienta que elijas.

Console

Para implementar una revisión nueva de un servicio existente, sigue estos pasos:

  1. Ve a Cloud Run for Anthos

  2. Identifica el servicio que deseas actualizar en la lista de servicios y haz clic en él para abrir sus detalles.

  3. Haz clic en EDITAR E IMPLEMENTAR NUEVA REVISIÓN. Esto muestra el formulario de implementación de revisión:

    imagen

  4. Si es necesario, proporciona la URL a la imagen de contenedor nueva que deseas implementar.

  5. De manera opcional, establece lo siguiente:

  6. Para enviar todo el tráfico a la revisión nueva, marca la casilla de verificación Aplicar esta revisión inmediatamente. A fin de lanzar una revisión nueva de forma gradual, desmarca esa casilla de verificación; esto dará como resultado una implementación en la que no se envíe tráfico a la revisión nueva. Sigue las instrucciones para los lanzamientos graduales después de la implementación.

  7. Haz clic en IMPLEMENTAR y espera a que finalice la implementación.

Línea de comandos

Para implementar una imagen de contenedor, sigue estos pasos:

  1. Ejecuta el comando gcloud kuberun core services update:

    gcloud kuberun core services update SERVICE --image IMAGE_URL

    • Se asigna un sufijo de revisión automáticamente para cada revisión. Si deseas especificar tu propio sufijo de revisión, agrega el parámetro --revision-suffix.

    • Reemplaza SERVICE por el nombre del servicio en el que deseas realizar la implementación. Si el servicio especificado no existe, se crea un servicio nuevo.

    • Reemplaza IMAGE_URL por una referencia a la imagen de contenedor, como gcr.io/myproject/my-image:latest.

    • Opciones de implementación adicionales:

      • Para implementar en un espacio de nombres que no sea default, debes especificar ese espacio de nombres con el parámetro --namespace.

      • Para implementar en una ubicación distinta de la configuración predeterminada, debes especificar name y location del clúster con --cluster y parámetro --cluster-location:

      gcloud kuberun core services create SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
      • Puedes establecer las opciones de conectividad con la marca --connectivity como se describe en Cambia la configuración de conectividad del servicio para especificar el acceso interno o externo.

      • Para Cloud Run for Anthos local, debes incluir el parámetro --kubeconfig y especificar tu archivo de configuración:

      gcloud kuberun core services create SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE

  2. Espera a que finalice la implementación. Una vez que la compilación se completa de manera correcta, se muestra un mensaje de éxito, además de la URL del servicio implementado.

YAML

Si deseas usar un archivo YAML para modificar la configuración de tu servicio existente, obtén una copia de la configuración actual, modifica y guarda los cambios en un archivo local y, luego, implementa esos cambios en tu servicio.

  1. Muestra los cambios como YAML y, luego, copia la configuración de tu servicio en un archivo local, por ejemplo service.yaml:

    gcloud kuberun core services describe SERVICE --format yaml

    Reemplaza SERVICE por el nombre de tu servicio de Cloud Run for Anthos.

    1. En tu archivo local, actualiza la configuración de revisión en cualquier atributo secundario de spec.template.

    2. Implementa la revisión nueva:

      gcloud beta run services replace service.yaml

Cloud Code

Para implementar una nueva revisión de un servicio existente con Cloud Code, consulta las guías de IntelliJ y Visual Studio Code.

Implementa imágenes de otros proyectos de Google Cloud

Puedes implementar imágenes de contenedor de otros proyectos de Google Cloud si estableces los permisos de IAM adecuados:

  1. En Cloud Console, abre el proyecto de tu servicio de Cloud Run for Anthos.

  2. Ve a la página IAM

  3. Realiza las siguientes acciones, según el servicio en el que realices la implementación:

  4. Abre el proyecto que posee el registro de contenedores que deseas usar.

  5. Ve a la página IAM

  6. Haz clic en Agregar para agregar un miembro nuevo.

  7. En el cuadro de texto Nuevos miembros, pega el correo electrónico de la cuenta de servicio que copiaste antes.

  8. En la lista desplegable Selecciona una función, selecciona la función Almacenamiento -> Visualizador de objetos de Storage.

  9. Implementa la imagen de contenedor en el proyecto que contiene el servicio de Cloud Run for Anthos.

Implementa imágenes de contenedor privadas de otros registros de contenedores

En esta sección, se describe cómo configurar los permisos adecuados para implementar imágenes de contenedor de un registro privado arbitrario en Cloud Run for Anthos. Un registro de contenedor privado requiere credenciales para acceder a la imagen de contenedor. Ten en cuenta que no necesitas seguir estos pasos para implementar imágenes de contenedor privadas desde Container Registry o Artifact Registry en el mismo proyecto que el clúster.

Para poder implementar una imagen de contenedor privada, debes crear un secreto de Kubernetes de tipo imagePullSecret y asociarlo con una cuenta de servicio:

  1. Crea un secreto imagePullSecret llamado container-registry:

    kubectl create secret docker-registry container-registry \
    --docker-server=DOCKER_REGISTRY_SERVER \
    --docker-email=REGISTRY_EMAIL \
    --docker-username=REGISTRY_USER \
    --docker-password=REGISTRY_PASSWORD
    • Reemplaza DOCKER_REGISTRY_SERVER por el FQDN de registro privado (p. ej.: https://gcr.io/ para Container Registry o https://hub.docker.com para DockerHub).
    • Reemplaza REGISTRY_EMAIL por tu correo electrónico.
    • Reemplaza REGISTRY_USER por tu nombre de usuario de Container Registry.

      Si usas Container Registry o Artifact Registry y deseas almacenar y extraer credenciales de larga duración en lugar de pasar tokens de acceso de corta duración, consulta Métodos de autenticación: archivo de claves JSON.

    • Reemplaza REGISTRY_PASSWORD por tu contraseña de registro de contenedores.

  2. Abre tu cuenta de servicio predeterminada:

    kubectl edit serviceaccount default --namespace default

    Cada espacio de nombres en tu clúster de Kubernetes tiene una cuenta de servicio predeterminada llamada default. Esta cuenta de servicio predeterminada se usa para extraer la imagen de contenedor, a menos que se especifique lo contrario cuando implementes el servicio de Cloud Run for Anthos.

  3. Agrega el secreto imagePullSecret recién creado a tu cuenta de servicio predeterminada:

    imagePullSecrets:
    - name: container-registry
    

    Tu cuenta de servicio debería verse así:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: default
      namespace: default
      ...
    secrets:
    - name: default-token-zd84v
    # The secret we just created:
    imagePullSecrets:
    - name: container-registry
    

Ahora, todos los Pods nuevos creados en el espacio de nombres default actual tendrán definido el secreto imagePullSecret.

Realiza una implementación con la inyección automática del sidecar de Istio habilitada

Para implementar tu servicio en el espacio de nombres con la inyección automática del sidecar de Istio habilitada, debes usar una instalación de Istio por separado.

Implementa servicios en una red interna

Implementar servicios en una red interna es útil para las empresas que proporcionan apps internas a su personal y para servicios que usan los clientes y se ejecutan fuera del clúster de Cloud Run for Anthos.

Para implementar servicios en una red interna, consulta Configura una red interna privada.

¿Qué sigue?

Después de implementar un servicio nuevo, puedes hacer lo siguiente:

Puedes automatizar las implementaciones y compilaciones de los servicios de Cloud Run for Anthos mediante los activadores de Cloud Build: