En esta página, se describe cómo implementar servicios y revisiones nuevos en Knative serving.
Antes de comenzar
Para usar Google Cloud CLI, primero debes preparar y configurar las herramientas de línea de comandos.
Conéctate a clústeres de GKE
Antes de implementar los servicios en Knative serving, debes acceder para conectarte al clúster de GKE.
Para obtener más información sobre cómo conectarte a tus clústeres de GKE, incluidas opciones adicionales, consulta los siguientes vínculos:
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 de Identity and Access Management:
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 la consola de Google Cloud, la CLI de Google Cloud 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
de Google Cloud CLI, los comandos de gcloud
usarán esos valores de forma predeterminada, incluidos los siguientes:
compute/region
compute/zone
run/cluster
run/cluster_location
run/platform
run/region
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:
Ve a Knative serving en la consola de Google Cloud:
Haz clic en Crear servicio para mostrar la página Crear servicio (Create service).
En el formulario, haz lo siguiente:
En el menú desplegable, selecciona uno de los clústeres de GKE disponibles para tu servicio.
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.
En Conectividad, haz lo siguiente:
- Selecciona Interno si deseas restringir el acceso solo a otros servicios de Knative serving 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.
Haz clic en Siguiente para ir a la segunda página del formulario de creación de servicios.
En el formulario, haz lo siguiente:
En el cuadro de texto URL de la imagen de contenedor, ingresa la URL de una imagen de un registro compatible, por ejemplo,
us-docker.pkg.dev/cloudrun/container/hello:latest
.De manera opcional, haz clic en Show Advanced Settings y en las siguientes pestañas para establecer lo siguiente:
Haz clic en Crear para implementar la imagen en Knative serving y espera a que termine la implementación.
Acabas de implementar un servicio en un clúster habilitado para Knative serving.
Línea de comandos
Para implementar una imagen de contenedor, sigue estos pasos:
Ejecuta el comando
gcloud run deploy
:gcloud run deploy 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/cloudrun/hello
.Opciones de implementación adicionales:
Para implementar en un espacio de nombres que no sea el predeterminado, 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
ylocation
del clúster con--cluster
y parámetro--cluster-location
:gcloud run deploy 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 Knative serving en VMware, debes incluir el parámetro
--kubeconfig
y especificar tu archivo de configuración:gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE
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 Google Cloud CLI.
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
Reemplazar
- SERVICE por el nombre de tu servicio de Knative serving
- IMAGE por la URL de la imagen de contenedor
También puedes especificar más opciones de configuración, como variables de entorno o límites de memoria.
Implementa el servicio nuevo mediante el siguiente comando:
gcloud run services replace service.yaml
Implementa una revisión nueva de un servicio existente
Puedes implementar una revisión nueva mediante la consola de Google Cloud, 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:
Ve a Knative serving en la consola de Google Cloud:
Identifica el servicio que deseas actualizar en la lista de servicios y haz clic en él para abrir sus detalles.
Haz clic en EDITAR E IMPLEMENTAR NUEVA REVISIÓN. Esto muestra el formulario de implementación de revisión:
Si es necesario, proporciona la URL a la imagen de contenedor nueva que deseas implementar.
De manera opcional, establece lo siguiente:
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.
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:
Ejecuta el comando
gcloud run services update
:gcloud run 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/cloudrun/hello
.Opciones de implementación adicionales:
Para implementar en un espacio de nombres que no sea el predeterminado, 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
ylocation
del clúster con--cluster
y parámetro--cluster-location
:gcloud run deploy 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 Knative serving en VMware, debes incluir el parámetro
--kubeconfig
y especificar tu archivo de configuración:gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE
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 descargar la configuración de un servicio existente en un archivo YAML con el comando gcloud run services describe
mediante la marca --format=export
.
Luego, puedes modificar ese archivo YAML e implementar esos cambios con el comando gcloud run services replace
.
Debes asegurarte de modificar solo los atributos especificados.
Descarga la configuración del servicio en un archivo llamado
service.yaml
en el lugar de trabajo local:gcloud run services describe SERVICE --format export > service.yaml
Reemplaza SERVICE por el nombre de tu servicio de Knative serving.
En tu archivo local, actualiza la configuración de revisión en cualquier atributo secundario de
spec.template
.Implementa la revisión nueva:
gcloud run services replace service.yaml
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:
En la consola de Google Cloud, abre el proyecto de tu servicio de Knative serving.
Obtén la información de tu cuenta de servicio:
Para los clústeres en Google Cloud, copia el correo electrónico de la cuenta de servicio predeterminada de Compute Engine. Tiene el sufijo @developer.gserviceaccount.com
Para otros clústeres, crea una cuenta de servicio de Google Cloud y descarga las credenciales. Agrega estas credenciales como
imagePullSecrets
predeterminados de la cuenta de servicio de Kubernetes.
Abre el proyecto que posee el registro de contenedores que deseas usar.
Haz clic en Agregar para agregar una principal nueva.
En el cuadro de texto Principales nuevas, pega el correo electrónico de la cuenta de servicio que copiaste antes.
En la lista desplegable Seleccionar un rol, selecciona el rol que deseas leer del registro:
- Artifact Registry, incluidos los repositorios de gcr.io en Artifact Registry: Artifact Registry -> Lector de Artifact Registry
- Container Registry: Storage -> Visualizador de objetos de Storage
Implementa la imagen de contenedor en el proyecto que contiene el servicio de Knative serving.
Para mayor seguridad, puedes limitar el acceso de otorgamiento de la siguiente manera:
- Artifact Registry: Otorga el rol en el repositorio que almacena tus imágenes de contenedor.
- Container Registry: Otorga el rol en el bucket de Cloud Storage que almacena tus imágenes de contenedor.
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 Knative serving. 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 (obsoleto) 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:
Crea un secreto
imagePullSecret
llamadocontainer-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.
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 tu servicio de Knative serving.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 inserción automática de sidecar habilitada
Para implementar el servicio con la inserción del archivo adicional de Istio habilitada, consulta Inserción automática del archivo adicional habilitada en la documentación de Cloud Service Mesh.
Implementa servicios en una red interna
Para implementar servicios en una red interna, debes configurar una red interna privada.
¿Qué sigue?
Después de implementar un servicio nuevo, puedes hacer lo siguiente:
- Lanzamientos graduales, revisiones de reversión, migración de tráfico
- Visualizar registros de servicio
- Supervisa el rendimiento del servicio
- Configura tus servicios. Por ejemplo, configura límites de memoria, configura variables de entorno o cambia la simultaneidad.
- Administrar:
Puedes automatizar las implementaciones y compilaciones de tus servicios de Knative serving con los activadores de Cloud Build: