El autor de nuestro nuevo artículo traducido afirma que Knative es lo mejor que se les ocurrió en el universo. ¿Estás de acuerdo?
Si ya está utilizando Kubernetes, probablemente haya oído hablar de la arquitectura sin servidor. Aunque ambas plataformas, Kubernetes y Knative, son escalables, es la arquitectura sin servidor la que hace todo lo posible para proporcionar a los desarrolladores código de trabajo sin molestarlos con problemas de infraestructura. También reduce los costos de infraestructura al escalar virtualmente las instancias de aplicaciones desde cero.
Por otro lado, puede aprovechar Kubernetes sin limitaciones siguiendo el modelo de alojamiento tradicional y las técnicas avanzadas de gestión del tráfico. Gracias a esto, abrimos varias oportunidades, por ejemplo, implementaciones azul-verde y pruebas A / B.
¡Knative es un esfuerzo por tomar lo mejor de ambos mundos! Como plataforma en la nube de código abierto, Knative le permite ejecutar sus aplicaciones sin servidor en Kubernetes, aprovechando el poder de Kubernetes y asegura la simplicidad y flexibilidad de una arquitectura sin servidor.
Por lo tanto, los desarrolladores pueden centrarse en codificar e implementar un contenedor en Kubernetes con un solo comando, mientras que Knative administra la aplicación mientras se ocupa de los matices de la red, el escalado automático a cero y el seguimiento de versiones.
Además, Knative permite a los desarrolladores escribir código acoplado libremente con su marco de gestión de eventos, que proporciona suscripción universal, entrega y gestión de eventos. Esto significa que puede declarar la conectividad de eventos y sus aplicaciones pueden suscribirse a flujos de datos específicos.
Dirigida por Google, la plataforma de código abierto se ha incluido en la Cloud Native Computing Foundation. Esto implica que no hay dependencia del proveedor, que de lo contrario es una limitación significativa de las soluciones FaaS sin servidor en la nube actuales. Puede ejecutar Knative en cualquier clúster de Kubernetes.
¿Para quién es Knative?
Knative ayuda a una amplia variedad de profesionales, cada uno con sus propios conocimientos, experiencia y responsabilidades.
Los ingenieros pueden concentrarse en administrar el clúster de Kubernetes e instalar y mantener instancias de Knative mediante kubectl, mientras que los desarrolladores crean e implementan aplicaciones mediante la API de Knative.
Esta es una gran ventaja para cualquier organización, ya que ahora diferentes equipos pueden resolver sus tareas sin interferir entre sí.
¿Por qué debería usar Knative?
La mayoría de las organizaciones que utilizan Kubernetes tienen un proceso complejo para administrar la implementación y el mantenimiento de las cargas de trabajo. Esto lleva a los desarrolladores a prestar atención a los detalles de los que no necesitan preocuparse. Los desarrolladores deben centrarse en la codificación en lugar de pensar en ensamblajes e implementaciones.
Kubeless ayuda a los desarrolladores a facilitar la ejecución de su código sin tener que saber demasiado sobre lo que sucede bajo el capó de Kubernetes.
Un clúster de Kubernetes consume recursos de infraestructura porque requiere que todas las aplicaciones tengan al menos un contenedor en ejecución. Knative gestiona este aspecto por usted y se encarga del escalado automático de contenedores en el clúster desde cero. Esto permite a los administradores de Kubernetes empaquetar varias aplicaciones en un solo clúster.
Si tiene varias aplicaciones con diferentes horas pico o tiene un clúster con ajuste de escala automático de los nodos trabajadores, puede beneficiarse enormemente de esto durante el tiempo de inactividad.
Una verdadera mina de oro para las aplicaciones de arquitectura de microservicios que pueden no necesitar microservicios ejecutándose en un momento específico. Esto permite un uso más eficiente de los recursos y puede hacer más con recursos limitados.
Además, se integra bastante bien con el motor Eventing y facilita el diseño de sistemas no relacionados. El código de la aplicación puede permanecer completamente libre de cualquier configuración de punto final, y puede publicar y suscribirse a eventos declarando configuraciones en el nivel de Kubernetes. ¡Esta es una ventaja significativa para aplicaciones de microservicio complejas!
¿Cómo actúa Knative?
Knative proporciona la API kn mediante los operadores Kubernetes y CRD. Utilizándolos, puede implementar aplicaciones usando la línea de comando. En segundo plano, Knative creará todo lo que Kubernetes necesita (implementaciones, servicios, entradas, etc.) para ejecutar aplicaciones sin que usted tenga que preocuparse por ello.
Tenga en cuenta que Knative no crea vainas de inmediato. En cambio, proporciona un punto final virtual para las aplicaciones y las escucha. Si una solicitud llega a estos puntos finales, Knative ejecuta los pods necesarios. Esto permite que las aplicaciones escalen desde cero hasta el número deseado de instancias.
Knative proporciona puntos finales de aplicaciones que utilizan su propio dominio en el formato [nombre de la aplicación]. [espacio de nombres]. [dominio personalizado] .
Esto ayuda a identificar de forma única la aplicación. Esto es similar a cómo Kubernetes maneja los servicios, pero necesita crear sus propios registros de dominio A para apuntar a la puerta de enlace de entrada de Istio. Istio administra todo el tráfico que pasa a través de su clúster en segundo plano.
Knative es una fusión de muchos productos CNCF y de código abierto como Kubernetes, Istio, Prometheus, Grafana y motores de transmisión de eventos como Kafka y Google Pub / Sub.
Instalación de Knative
Knative tiene una estructura modular razonable y solo puede instalar los componentes que necesita. Knative ofrece componentes para eventos, servicio y monitoreo. Puede instalarlos utilizando CRD personalizados.
Knative tiene dependencias y requisitos externos para cada componente. Por ejemplo, si está instalando un componente de servicio, también debe instalar Istio y el complemento DNS.
Instalar Knative es bastante complicado y merece un artículo aparte. Pero en aras de la demostración, comencemos por instalar el componente de servicio.
Para hacer esto, necesita un clúster de Kubernetes que funcione.
Instale el CRD de servicio y los componentes principales de servicio:
kubectl apply -f https://github.com/knative/serving/releases/download/v0.17.0/serving-crds.yaml kubectl apply -f https://github.com/knative/serving/releases/download/v0.17.0/serving-core.yaml
Instale Istio para Knative:
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.7.0 sh - &&
cd istio-1.7.0 && export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo
kubectl label namespace knative-serving istio-injection=enabled
Espere a que Istio esté listo comprobando si Kubernetes ha asignado una IP externa a la puerta de enlace de entrada de Istio:
kubectl -n istio-system get service istio-ingressgateway
Defina su propio dominio y configure el DNS para que apunte a la dirección IP de la puerta de enlace de entrada de Istio:
kubectl patch configmap/config-domain --namespace knative-serving --type merge -p "{\"data\":{\"$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}').xip.io\":\"\"}}"
kubectl apply -f https://github.com/knative/net-istio/releases/download/v0.17.0/release.yaml
kubectl apply -f https://github.com/knative/serving/releases/download/v0.17.0/serving-default-domain.yaml
Instale el complemento Istio HPA:
kubectl apply -f https://github.com/knative/serving/releases/download/v0.17.0/serving-hpa.yaml
Instalación de la CLI de Knative
Instalar la CLI de Knative es fácil. Debe descargar la última versión del binario de la CLI de Knative en la carpeta bin o especificar la ruta adecuada.
sudo wget https://storage.googleapis.com/knative-nightly/client/latest/kn-linux-amd64 -O /usr/local/bin/kn
sudo chmod +x /usr/local/bin/kn
kn version
Inicio de la aplicación Hello, World!
Ahora ejecutemos nuestro primer "¡Hola, mundo!" aplicación para ver lo fácil que es implementar con Knative.
Usemos la aplicación de muestra Hello, World! en Ir para demostración. Esta es una API REST simple que devuelve Hello $ TARGET , donde $ TARGET es una variable de entorno que puede establecer en el contenedor.
Ejecute el siguiente comando para comenzar:
$ kn service create helloworld-go --image gcr.io/knative-samples/helloworld-go --env TARGET="World" --annotation autoscaling.knative.dev/target=10
Creating service 'helloworld-go' in namespace 'default':
0.171s Configuration "helloworld-go" is waiting for a Revision to become ready.
6.260s ...
6.324s Ingress has not yet been reconciled.
6.496s Waiting for load balancer to be ready
6.637s Ready to serve.
Service 'helloworld-go' created to latest revision 'helloworld-go-zglmv-1' is available at URL:
http://helloworld-go.default.34.71.125.175.xip.io
kubectl get pod
No resources found in default namespace.
Iniciemos el servicio helloworld .
$ curl http://helloworld-go.default.34.71.125.175.xip.io Hello World!
Y después de un tiempo obtenemos una respuesta. Echemos un vistazo a las vainas.
$ kubectl get pod NAME READY STATUS RESTARTS AGE helloworld-go-zglmv-1-deployment-6d4b7fb4f-ctz86 2/2 Running 0 50s
Entonces, como puede ver, Knative se desenrolló debajo en el fondo en un solo movimiento. Resulta que, literalmente, escalamos desde cero.
Si le damos un poco de tiempo, veremos que la vaina comienza a completarse. Veamos qué está pasando.
$ kubectl get pod -w NAME READY STATUS RESTARTS AGE helloworld-go-zglmv-1-deployment-6d4b7fb4f-d9ks6 2/2 Running 0 7s helloworld-go-zglmv-1-deployment-6d4b7fb4f-d9ks6 2/2 Terminating 0 67s helloworld-go-zglmv-1-deployment-6d4b7fb4f-d9ks6 1/2 Terminating 0 87s
El ejemplo anterior muestra que Knative gestiona las vainas de acuerdo con nuestros requisitos. Aunque la primera solicitud es lenta porque Knative crea cargas de trabajo para procesarla, las solicitudes posteriores se ejecutarán más rápido. Puede ajustar el tiempo de desaceleración de los pods según sus requisitos o si tiene un SLA más estricto.
Vayamos un poco más lejos. Si observa las anotaciones, hemos limitado cada una en procesamiento a 10 solicitudes simultáneas. Entonces, ¿qué sucede si cargamos nuestras funciones además de eso? ¡Averigüemos ahora!
Usaremos la utilidad hey para cargar la aplicación. El siguiente comando envía 50 solicitudes simultáneas al punto final en 30 segundos.
$ hey -z 30s -c 50 http://helloworld-go.default.34.121.106.103.xip.io
Average: 0.1222 secs
Requests/sec: 408.3187
Total data: 159822 bytes
Size/request: 13 bytes
Response time histogram:
0.103 [1] |
0.444 [12243] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
0.785 [0] |
1.126 [0] |
1.467 [0] |
1.807 [0] |
2.148 [0] |
2.489 [0] |
2.830 [0] |
3.171 [0] |
3.512 [50] |
Latency distribution:
10% in 0.1042 secs
25% in 0.1048 secs
50% in 0.1057 secs
75% in 0.1077 secs
90% in 0.1121 secs
95% in 0.1192 secs
99% in 0.1826 secs
Details (average, fastest, slowest):
DNS+dialup: 0.0010 secs, 0.1034 secs, 3.5115 secs
DNS-lookup: 0.0006 secs, 0.0000 secs, 0.1365 secs
req write: 0.0000 secs, 0.0000 secs, 0.0062 secs
resp wait: 0.1211 secs, 0.1033 secs, 3.2698 secs
resp read: 0.0001 secs, 0.0000 secs, 0.0032 secs
Status code distribution:
[200] 12294 responses
Ahora echemos un vistazo a las vainas.
$ kubectl get pod NAME READY STATUS RESTARTS AGE helloworld-go-thmmb-1-deployment-77976785f5-6cthr 2/2 Running 0 59s helloworld-go-thmmb-1-deployment-77976785f5-7dckg 2/2 Running 0 59s helloworld-go-thmmb-1-deployment-77976785f5-fdvjn 0/2 Pending 0 57s helloworld-go-thmmb-1-deployment-77976785f5-gt55v 0/2 Pending 0 58s helloworld-go-thmmb-1-deployment-77976785f5-rwwcv 2/2 Running 0 59s helloworld-go-thmmb-1-deployment-77976785f5-tbrr7 2/2 Running 0 58s helloworld-go-thmmb-1-deployment-77976785f5-vtnz4 0/2 Pending 0 58s helloworld-go-thmmb-1-deployment-77976785f5-w8pn6 2/2 Running 0 59s
Como podemos ver, Knative escala las vainas a medida que aumenta la carga de la función y la ralentiza cuando no hay más carga.
Conclusión
Knative combina las mejores características de una arquitectura sin servidor con las capacidades de Kubernetes. Se está moviendo gradualmente hacia una forma estándar de implementar FaaS. Como Knative es parte de CNCF y está ganando cada vez más interés técnico, es posible que pronto descubramos que los proveedores de la nube están implementando Knative en sus productos sin servidor.
¡Gracias por leer mi artículo! Espero que lo hayan disfrutado.