Knative reside sobre Kubernetes y añade tres componentes principales, o primitivos: Build, Serving y Eventing.
Build
El componente Build de Knative automatiza el proceso de convertir código fuente en un contenedor. Este proceso normalmente implica varios pasos, que incluyen:
- Extraer código fuente de un repositorio de código, como GitHub
- Instalar las dependencias subyacentes, como las variables del entorno y las bibliotecas de software, que el código necesita para su ejecución
- Crear imágenes del contenedor
- Colocar imágenes del contenedor en un registro donde Kubernetes (y otros desarrolladores) pueden encontrarlas.
Knative utiliza API de Kubernetes y otras herramientas para su proceso de Build. Un desarrollador puede crear un único manifiesto (normalmente un archivo YAML) que especifica todas las variables, como ubicación del código fuente o dependencias requeridas, y Knative utiliza el manifiesto para automatizar la creación del contenedor.
Serving
El componente Serving despliega y ejecuta contenedores como servicios de Knative escalables. Serving proporciona las siguientes prestaciones destacadas:
- La configuración define y mantiene el estado de un servicio. También proporciona la gestión de versiones: cada modificación de la configuración crea una nueva versión del servicio, y las versiones anteriores se guardan.
- El direccionamiento de servicios inteligente permite a los desarrolladores dirigir el tráfico a diferentes versiones del servicio. Supongamos que ha creado una nueva versión de un servicio, pero quiere desplegarla en un subconjunto de usuarios antes de migrar todos los usuarios. El direccionamiento de servicios inteligente le permite dirigir un porcentaje de solicitudes de usuario al nuevo servicio y el resto de la solicitud a una versión anterior; a medida que vaya confiando más en el nuevo servicio, podrá dirigir más tráfico hacia él.
- Escalada automática. Knative puede escalar servicios hasta miles de instancias; también puede reducirlas a cero, es decir, que no haya ninguna instancia del contenedor, lo cual es fundamental para la compatibilidad con aplicaciones sin servidor.
El componente Serving de Knative toma prestado el direccionamiento de servicios inteligente de Istio, otra aplicación del ecosistema Kubernetes, una malla de servicio de código abierto para Kubernetes. Istio también proporciona autenticación para solicitudes de servicio, cifrado automático de tráfico para proteger la comunicación entre servicios y métricas detalladas sobre microservicios y operaciones de funciones sin servidor, que los desarrolladores y administradores pueden utilizar para optimizar la infraestructura (para obtener información más detallada sobre cómo Knative utiliza Istio, lea "Istio and Knative: Extending Kubernetes for a New Developer Experience").
Eventing
El componente Eventing de Knative permite que diferentes eventos activen sus servicios y funciones basados en contenedores. Knative pone en cola y entrega estos eventos a los contenedores apropiados, por lo que no es necesario escribir scripts ni implementar middleware para obtener la funcionalidad. Knative también maneja los canales, que son colas de eventos entre las que pueden elegir los desarrolladores, y el bus, una plataforma de mensajería que entrega eventos a contenedores. También permite a los desarrolladores configurar "feeds", que conectan un evento a una acción para que se puedan ejecutar los contenedores.
Las fuentes de eventos de Knative permiten a los desarrolladores crear fácilmente conexiones con generadores de eventos de terceros. El componente Eventing de Knative creará automáticamente la conexión al generador de eventos y dirigirá los eventos generados. No es necesario averiguar cómo hacerlo mediante programación: Knative se encarga de todo.