En esta página se describe cómo desplegar nuevos servicios y nuevas revisiones en Knative Serving.
Antes de empezar
Para usar la CLI de Google Cloud, primero debes configurar las herramientas de línea de comandos.
Conectarse a clústeres de GKE
Para poder desplegar servicios en Knative Serving, debes iniciar sesión para conectarte a tu clúster de GKE.
Para obtener más información sobre cómo conectarse a los clústeres de GKE, incluidas opciones adicionales, consulte los siguientes artículos:
Permisos necesarios para implementar
Necesitas permisos para crear, actualizar y eliminar en el
apiGroup serving.knative.dev
y el tipo Service
. Además, debes tener
UNO de los siguientes roles de Gestión de Identidades y Accesos:
Imágenes que puedes desplegar
No hay límite de tamaño para la imagen de contenedor que puedes desplegar.
Puedes usar contenedores de cualquier registro de contenedores, como Docker Hub. Para obtener información sobre cómo desplegar imágenes privadas de registros distintos de Container Registry o Artifact Registry, consulta el artículo Desplegar imágenes de contenedor privadas de otros registros de contenedores.
Desplegar un nuevo servicio
Puedes especificar una imagen de contenedor con una etiqueta (por ejemplo, gcr.io/my-project/my-image:latest
) o con un digest exacto (por ejemplo, gcr.io/my-project/my-image@sha256:41f34ab970ee...
).
Al implementar un servicio por primera vez, se crea su primera revisión. Ten en cuenta que las revisiones son inmutables. Si despliega desde una etiqueta de imagen de contenedor, se resolverá en un digest y la revisión siempre usará ese digest concreto.
Puedes implementar un contenedor mediante la consola de Google Cloud , la CLI de Google Cloud o un archivo de configuración YAML.
Haga clic en la pestaña para ver las instrucciones sobre cómo usar la herramienta que prefiera.
Configuración de la ubicación gcloud
predeterminada
Si ya has configurado una ubicación en la default
configuración de la CLI de Google Cloud, tus comandos 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 gcloud
config para ver los ajustes de la configuración default
:
gcloud config configurations describe default
Consola
Para desplegar una imagen de contenedor, sigue estos pasos:
Ve a Knative Serving en la Google Cloud consola:
Haz clic en Crear servicio para que se muestre la página Crear servicio.
En el formulario:
En el menú desplegable, selecciona uno de los clústeres de GKE disponibles para tu servicio.
Introduce el nombre del servicio que quieras. Los nombres de los servicios 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:
- Selecciona Internal (Interno) si quieres restringir el acceso solo a otros servicios de Knative Serving o a servicios de tu clúster que usen 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, tal como se describe en el artículo Cambiar los ajustes 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:
En el cuadro de texto URL de la imagen del contenedor, proporcione la URL de una imagen de un registro compatible. Por ejemplo:
us-docker.pkg.dev/cloudrun/container/hello:latest
Si quieres, haz clic en Mostrar configuración avanzada y en las pestañas siguientes para definir lo siguiente:
Haz clic en Crear para desplegar la imagen en Knative Serving y espera a que se complete el despliegue.
Acabas de desplegar un servicio en un clúster con Knative serving habilitado.
Línea de comandos
Para desplegar una imagen de contenedor, sigue estos pasos:
Ejecuta el comando
gcloud run deploy
:gcloud run deploy SERVICE --image IMAGE_URL
Sustituye SERVICE por el nombre del servicio en el que quieras hacer el despliegue. Si el servicio especificado no existe, se creará uno.
Sustituye IMAGE_URL por una referencia a la imagen de contenedor. Por ejemplo,
gcr.io/cloudrun/hello
.Otras opciones de implementación:
Para implementar en un espacio de nombres que no sea el predeterminado, debes especificarlo con el parámetro
--namespace
.Para implementar en una ubicación que no sea la configuración predeterminada, debes especificar el
name
y ellocation
del clúster con los parámetros--cluster
y--cluster-location
:gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
Puedes definir las opciones de conectividad con la marca
--connectivity
, tal como se describe en Cambiar la configuración de conectividad de los servicios, para especificar el acceso interno o externo.En el caso del servicio de Knative en VMware, debes incluir el parámetro
--kubeconfig
y especificar el archivo de configuración:gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE
Espera a que finalice la implementación. Si se completa correctamente, se mostrará un mensaje de confirmación junto con la URL del servicio implementado.
YAML
Puedes almacenar la especificación de tu servicio en un archivo YAML
y, a continuación, implementarlo con la CLI de Google Cloud.
Crea un archivo
service.yaml
con este contenido:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: containers: - image: IMAGE
Sustituir
- SERVICE con el nombre de tu servicio de Knative
- IMAGE con la URL de la imagen de tu contenedor.
También puedes especificar más configuración, como variables de entorno o límites de memoria.
Implementa el nuevo servicio con el siguiente comando:
gcloud run services replace service.yaml
Desplegar una nueva revisión de un servicio
Puedes desplegar una nueva revisión mediante la consola Google Cloud , la línea de comandos gcloud
o un archivo de configuración YAML.
Ten en cuenta que, si cambias cualquier ajuste de configuración, se creará una revisión nueva, aunque no se modifique la imagen del contenedor. Cada revisión creada es inmutable.
Haga clic en la pestaña para ver las instrucciones sobre cómo usar la herramienta que prefiera.
Consola
Para desplegar una nueva revisión de un servicio, sigue estos pasos:
Ve a Knative Serving en la Google Cloud consola:
Busca el servicio que quieras actualizar en la lista de servicios y haz clic en él para abrir sus detalles.
Haz clic en EDITAR Y DESPLEGAR NUEVA REVISIÓN. Se muestra el formulario de despliegue de la revisión:
Si es necesario, proporcione la URL de la nueva imagen de contenedor que quiera desplegar.
También puedes definir lo siguiente:
Para enviar todo el tráfico a la nueva revisión, marca la casilla Servir esta revisión de inmediato. Para lanzar gradualmente una nueva revisión, desmarca la casilla. De este modo, se realizará una implementación en la que no se enviará tráfico a la nueva revisión. Sigue las instrucciones para lanzamientos graduales después de la implementación.
Haz clic en DEPLOY (DESPLEGAR) y espera a que finalice el despliegue.
Línea de comandos
Para desplegar una imagen de contenedor, sigue estos pasos:
Ejecuta el comando
gcloud run services update
:gcloud run services update SERVICE --image IMAGE_URL
- Se asigna automáticamente un sufijo de revisión a cada revisión. Si quieres especificar tu propio sufijo de revisión, añade el parámetro --revision-suffix.
Sustituye SERVICE por el nombre del servicio en el que quieras hacer el despliegue. Si el servicio especificado no existe, se creará uno.
Sustituye IMAGE_URL por una referencia a la imagen de contenedor. Por ejemplo,
gcr.io/cloudrun/hello
.Otras opciones de implementación:
Para implementar en un espacio de nombres que no sea el predeterminado, debes especificarlo con el parámetro
--namespace
.Para implementar en una ubicación que no sea la configuración predeterminada, debes especificar el
name
y ellocation
del clúster con los parámetros--cluster
y--cluster-location
:gcloud run deploy SERVICE --cluster CLUSTER-NAME --cluster-location CLUSTER-LOCATION
Puedes definir las opciones de conectividad con la marca
--connectivity
, tal como se describe en Cambiar la configuración de conectividad de los servicios, para especificar el acceso interno o externo.En el caso del servicio de Knative en VMware, debes incluir el parámetro
--kubeconfig
y especificar el archivo de configuración:gcloud run deploy SERVICE --image IMAGE_URL --kubeconfig KUBECONFIG-FILE
Espera a que finalice la implementación. Si se completa correctamente, se mostrará un mensaje de confirmación junto con la URL del servicio implementado.
YAML
Puedes descargar la configuración de un servicio en un archivo YAML con el comando gcloud run services describe
mediante la marca --format=export
.
A continuación, puedes modificar ese archivo YAML e implementar
los cambios con el comando gcloud run services replace
.
Debe asegurarse de modificar solo los atributos especificados.
Descarga la configuración de tu servicio en un archivo llamado
service.yaml
en el espacio de trabajo local:gcloud run services describe SERVICE --format export > service.yaml
Sustituye SERVICE por el nombre de tu servicio de Knative.
En el archivo local, actualiza los ajustes de revisión de cualquier atributo secundario de
spec.template
.Despliega la nueva revisión:
gcloud run services replace service.yaml
Desplegar imágenes de otros proyectos Google Cloud
Puedes desplegar imágenes de contenedor de otros Google Cloud proyectos si configuras los permisos de gestión de identidades y accesos correctos:
En la consola de Google Cloud Cloud, abre el proyecto de tu servicio de Knative.
Obtén la información de tu cuenta de servicio:
En los clústeres de Google Cloud, copia el correo de la cuenta de servicio predeterminada de Compute Engine. Tiene el sufijo @developer.gserviceaccount.com
En el caso de otros clústeres, crea una Google Cloud cuenta de servicio y descarga las credenciales. Añade estas credenciales como predeterminadas
imagePullSecrets
de la cuenta de servicio de Kubernetes.
Abre el proyecto propietario del registro de contenedores que quieras usar.
Haga clic en Añadir para añadir un nuevo principal.
En el cuadro de texto Nuevos principales, pega el correo de la cuenta de servicio que has copiado anteriormente.
En la lista desplegable Selecciona un rol, elige el rol para leer del registro:
- Artifact Registry, incluidos los repositorios gcr.io en Artifact Registry: Artifact Registry -> Lector de Artifact Registry
- Container Registry: Storage -> Storage Object Viewer (Almacenamiento > Lector de objetos de Storage)
Despliega la imagen de contenedor en el proyecto que contiene tu servicio de Knative Serving.
Para aumentar la seguridad, puedes limitar el acceso de concesión:
- Artifact Registry: concede el rol en el repositorio que almacena tus imágenes de contenedor.
- Container Registry: asigna el rol en el segmento de Cloud Storage que almacena tus imágenes de contenedor.
Desplegar imágenes de contenedor privadas de otros registros de contenedores
En esta sección se describe cómo configurar los permisos correctos para desplegar imágenes de contenedor desde un registro privado arbitrario en Knative Serving. Un registro privado de contenedores requiere credenciales para acceder a la imagen del contenedor. Ten en cuenta que no es necesario que sigas estos pasos para desplegar imágenes de contenedor privadas desde Container Registry (obsoleto) o Artifact Registry en el mismo proyecto que tu clúster.
Para poder desplegar una imagen de contenedor privada, debes crear un secreto de Kubernetes de tipo imagePullSecret
y asociarlo a una cuenta de servicio:
Crea un secreto de
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
- Sustituye DOCKER_REGISTRY_SERVER por el nombre de dominio completo (FQDN) de tu registro privado (por ejemplo, https://gcr.io/ para Container Registry o https://hub.docker.com para Docker Hub).
- Sustituye REGISTRY_EMAIL por tu correo.
Sustituye REGISTRY_USER por el nombre de usuario de tu registro de contenedores.
Si usas Container Registry o Artifact Registry y quieres almacenar y extraer credenciales de larga duración en lugar de transferir tokens de acceso de corta duración, consulta Métodos de autenticación: archivo de clave JSON.
Sustituye REGISTRY_PASSWORD por la contraseña de tu registro de contenedores.
Abre tu cuenta de servicio predeterminada:
kubectl edit serviceaccount default --namespace default
Cada espacio de nombres de 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 tu contenedor, a menos que se especifique lo contrario cuando despliegues tu servicio de Knative Serving.Añade el secreto
imagePullSecret
que acabas de crear a tu cuenta de servicio predeterminada:imagePullSecrets: - name: container-registry
Tu cuenta de servicio debería tener este aspecto:
apiVersion: v1 kind: ServiceAccount metadata: name: default namespace: default ... secrets: - name: default-token-zd84v # The secret we just created: imagePullSecrets: - name: container-registry
Ahora, cualquier pod nuevo que se cree en el espacio de nombres default
actual tendrá definido el secreto imagePullSecret
.
Implementación con la inyección automática de sidecar habilitada
Para desplegar tu servicio con la inyección automática de sidecar de Istio habilitada, consulta la sección sobre la inyección automática de sidecar habilitada en la documentación de Cloud Service Mesh.
Desplegar servicios en una red interna
Para implementar servicios en una red interna, debes configurar una red interna privada.
Siguientes pasos
Después de implementar un nuevo servicio, puedes hacer lo siguiente:
- Lanzamientos graduales, restauraciones de revisiones y migración de tráfico
- Ver registros de servicio
- Monitorizar el rendimiento de los servicios
- Configura tus servicios. Por ejemplo, puedes definir límites de memoria, variables de entorno o cambiar la simultaneidad.
- Gestionar:
Puedes automatizar las compilaciones y los despliegues de tus servicios de Knative Serving con activadores de Cloud Build: