Knative: plataforma como servicio basada en k8s con soporte sin servidor

Knative: plataforma como servicio basada en k8s con soporte sin servidor

Sin duda, Kubernetes se ha convertido en la plataforma dominante para el despliegue de contenedores. Proporciona la capacidad de controlar casi cualquier cosa utilizando sus API y controladores personalizados que amplían sus API con recursos personalizados.

Sin embargo, el usuario aún debe tomar decisiones detalladas sobre exactamente cómo implementar, configurar, administrar y escalar aplicaciones. Las cuestiones de escalado de aplicaciones, protección y flujo de tráfico quedan a discreción del usuario. Esto distingue a Kubernetes de las plataformas convencionales como servicio (PaaS), como Cloud Foundry y Heroku.

Las plataformas tienen una interfaz de usuario simplificada y están dirigidas a desarrolladores de aplicaciones que suelen participar en la configuración de aplicaciones individuales. El sistema PaaS subyacente gestiona el enrutamiento, la implementación y las métricas de forma transparente para el usuario.

PaaS maneja el flujo de trabajo desde el origen hasta el envío mediante la creación de una imagen de contenedor personalizada, su implementación, la configuración de una nueva ruta y un subdominio DNS para el tráfico entrante. Todo esto se lanza al mando. git push.

Kubernetes (intencionalmente) solo proporciona los componentes básicos de dichas plataformas, dejando a la comunidad libre para hacer el trabajo por sí misma. Cómo Kelsey Hightower dijo:

Kubernetes es una plataforma para construir plataformas. La mejor posición para empezar, pero no terminar.

Como resultado, vemos un montón de compilaciones de Kubernetes, así como empresas de alojamiento que intentan crear PaaS para Kubernetes, como OpenShift y Rancher. En medio del creciente mercado de Kube-PaaS, Knative, fundada en julio de 2018 por Google y Pivotal, está entrando al ring.

Knative fue una colaboración entre Google y Pivotal, con un poco de ayuda de otras empresas como IBM, RedHat y Solo.im. Ofrece cosas de PaaS similares a Kubernetes con soporte de primer nivel para aplicaciones basadas en informática sin servidor. A diferencia de las compilaciones de Kubernetes, Knative se instala como un complemento en cualquier clúster de Kubernetes compatible y se configura a través de recursos del usuario.

¿Qué es Knative?

Knative se describe como "una plataforma basada en Kubernetes para entregar y administrar cargas de trabajo utilizando informática moderna sin servidor". Knative, aunque se anuncia a sí mismo como una plataforma de este tipo, escala automáticamente los contenedores de forma activa en proporción a las solicitudes HTTP simultáneas. Los servicios no utilizados eventualmente se reducen a cero, lo que proporciona un escalamiento bajo demanda al estilo sin servidor.

Knative consta de un conjunto de controladores que se instalan en cualquier clúster de Kubernetes y brindan las siguientes capacidades:

  • creación de aplicaciones en contenedores a partir del código fuente (proporcionado por el componente Construcción),
  • proporcionar acceso al tráfico entrante a las aplicaciones (proporcionado por el componente Entregando a),
  • entrega y escalado automático de aplicaciones bajo demanda (también proporcionado por el componente Entregando a),
  • identificar las fuentes de eventos que conducen al lanzamiento de aplicaciones (proporcionadas por el componente Eventos).

Un componente clave es el servicio, que proporciona aprovisionamiento, escalado automático y gestión del tráfico para aplicaciones gestionadas. Después de instalar Knative, aún tendrá acceso completo a la API de Kubernetes, lo que permite a los usuarios administrar aplicaciones. lo usual manera, y también sirve para depurar servicios Knative, trabajando con las mismas primitivas API que utilizan estos servicios (módulos, servicios, etc.).

Con la ayuda de Serving, el enrutamiento del tráfico azul-verde también se automatiza, lo que garantiza la separación del tráfico entre las versiones nuevas y antiguas de la aplicación cuando el usuario entrega una versión actualizada de la aplicación.

El propio Knative depende de la instalación de un controlador de ingreso compatible. Al momento de escribir este artículo es compatible Puerta de enlace API Gloo и Malla de servicios de Istio. Configurará el ingreso disponible para enrutar el tráfico a aplicaciones administradas por Knative.

Istio Service Mesh puede ser una gran dependencia para los usuarios de Knative que quieran probarlo sin instalar el panel de control de Istio, ya que Knative solo depende de la puerta de enlace.

Por esta razón, la mayoría de los usuarios prefieren Gloo como puerta de entrada a Knative, ya que proporciona un conjunto similar de capacidades a Istio (con el fin de usar solo Knative), al mismo tiempo que utiliza muchos menos recursos y tiene costos operativos más bajos.

Probemos Knative en acción en el stand. Usaré un clúster recién instalado que se ejecuta en GKE:

kubectl get namespace
NAME          STATUS   AGE
default       Active   21h
kube-public   Active   21h
kube-system   Active   21h

Comencemos a instalar Knative y Gloo. Esto se puede hacer en cualquier orden:

# ставим Knative-Serving
kubectl apply -f 
 https://github.com/knative/serving/releases/download/v0.8.0/serving-core.yaml
namespace/knative-serving created
# ...
# ставим Gloo
kubectl apply -f 
  https://github.com/solo-io/gloo/releases/download/v0.18.22/gloo-knative.yaml
namespace/gloo-system created
# ...

Comprobamos que todos los Pods estén en estado “En ejecución”:

kubectl get pod -n knative-serving
NAME                              READY   STATUS    RESTARTS   AGE
activator-5dd55958cc-fkp7r        1/1     Running   0          7m32s
autoscaler-fd66459b7-7d5s2        1/1     Running   0          7m31s
autoscaler-hpa-85b5667df4-mdjch   1/1     Running   0          7m32s
controller-85c8bb7ffd-nj9cs       1/1     Running   0          7m29s
webhook-5bd79b5c8b-7czrm          1/1     Running   0          7m29s
kubectl get pod -n gloo-system
NAME                                      READY   STATUS    RESTARTS   AGE
discovery-69548c8475-fvh7q                1/1     Running   0          44s
gloo-5b6954d7c7-7rfk9                     1/1     Running   0          45s
ingress-6c46cdf6f6-jwj7m                  1/1     Running   0          44s
knative-external-proxy-7dd7665869-x9xkg   1/1     Running   0          44s
knative-internal-proxy-7775476875-9xvdg   1/1     Running   0          44s

Gloo está listo para el enrutamiento. Creemos un servicio Knative de escalamiento automático (llamémoslo kservice) y enrutemos el tráfico hacia él.

Los servicios Knative proporcionan un camino más fácil para entregar aplicaciones a Kubernetes que el modelo convencional de Implementación+Servicio+Ingreso. Trabajaremos con este ejemplo:

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
 name: helloworld-go
 namespace: default
spec:
 template:
   spec:
     containers:
       - image: gcr.io/knative-samples/helloworld-go
         env:
           - name: TARGET
             Value: Knative user

Copié esto en un archivo y luego lo apliqué a mi clúster de Kubernetes de esta manera:

kubectl apply -f ksvc.yaml -n default

Podemos ver los recursos creados por Knative en el cluster después de entregar nuestro 'helloworld-go' kservicio:

kubectl get pod -n default
NAME                                              READY   STATUS    RESTARTS   AGE
helloworld-go-fjp75-deployment-678b965ccb-sfpn8   2/2     Running   0          68s

El pod con nuestra imagen 'helloworld-go' se inicia cuando se implementa kservice. Si no hay tráfico, la cantidad de pods se reducirá a cero. Y viceversa, si la cantidad de solicitudes simultáneas excede un cierto umbral configurable, la cantidad de pods aumentará.

kubectl get ingresses.networking.internal.knative.dev -n default
NAME            READY   REASON
helloworld-go   True

Knative configura su ingreso utilizando un recurso de 'ingreso' especial en la API interna de Knative. Gloo utiliza esta API como configuración para proporcionar funciones similares a PaaS, incluido un modelo de implementación azul-verde, aplicación automática de TLS, tiempos de espera y otras funciones de enrutamiento avanzadas.

Después de un tiempo, vemos que nuestros pods han desaparecido (porque no había tráfico entrante):

kubectl get pod -n default

No resources found.
kubectl get deployment -n default
NAME                             DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
helloworld-go-fjp75-deployment   0         0         0            0           9m46s

Finalmente intentaremos llegar a ellos. Puede obtener fácil y fácilmente la URL de Knative Proxy usando glooctl:

glooctl proxy url --name knative-external-proxy
http://35.190.151.188:80

Sin instalado glooctl puedes ver la dirección y el puerto en el servicio kube:

kubectl get svc -n gloo-system knative-external-proxy
NAME                     TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                      AGE
knative-external-proxy   LoadBalancer   10.16.11.157   35.190.151.188   80:32168/TCP,443:30729/TCP   77m

Ejecutemos algunos datos usando cURL:

curl -H "Host: helloworld-go.default.example.com" http://35.190.151.188
Hello Knative user!

Knative proporciona casi una PaaS para desarrolladores además de Kubernetes listo para usar utilizando la puerta de enlace API de pila completa y alto rendimiento de Gloo. Esta publicación solo ha arañado la superficie de las amplias opciones de personalización y características adicionales de Knative. ¡Lo mismo con Gloo!

A pesar de que Knative es todavía un proyecto joven, su equipo lanza nuevas versiones cada seis semanas y ha comenzado la implementación de funciones avanzadas, como la implementación automática de TLS y el escalado automático del panel de control. Existe una alta probabilidad de que, como resultado de la colaboración entre múltiples empresas de nube y como base de la nueva oferta Cloud Run de Google, Knative pueda convertirse en la opción principal para la computación sin servidor y PaaS en Kubernetes. ¡Sigue las novedades!

De los editores de SouthBridge
Las opiniones de los lectores son importantes para nosotros, por eso le pedimos que participe en una breve encuesta relacionada con futuros artículos sobre Knative, Kubernetes y computación sin servidor:

Solo los usuarios registrados pueden participar en la encuesta. Registrarsepor favor

¿Continuar escribiendo artículos y guías sobre Knative y la informática sin servidor?

  • Si por favor

  • Gracias no

28 usuarios votaron. 4 usuarios se abstuvieron.

Fuente: habr.com

Añadir un comentario