Der Autor unseres neu übersetzten Artikels behauptet, Knative sei das Beste, was sie sich im Universum vorstellen können! Sind Sie einverstanden?
Wenn Sie bereits Kubernetes verwenden, haben Sie wahrscheinlich von einer Architektur ohne Server gehört. Während beide Plattformen, Kubernetes und Knative, skalierbar sind, ist es die serverlose Architektur, die alles tut, um Entwicklern Arbeitscode bereitzustellen, ohne sie mit Infrastrukturproblemen zu belästigen. Es reduziert auch die Infrastrukturkosten, indem Anwendungsinstanzen virtuell von Grund auf neu skaliert werden.
Auf der anderen Seite können Sie Kubernetes ohne Einschränkung nutzen, indem Sie dem traditionellen Hosting-Modell und fortschrittlichen Verkehrsmanagementtechniken folgen. Dank dessen eröffnen wir verschiedene Möglichkeiten, zum Beispiel blaugrüne Bereitstellungen und A / B-Tests.
Knative ist eine Anstrengung, das Beste aus beiden Welten zu holen! Als Open-Source-Cloud-Plattform können Sie mit Knative Ihre serverlosen Anwendungen auf Kubernetes ausführen, wobei Sie die Leistung von Kubernetes nutzen und die Einfachheit und Flexibilität einer serverlosen Architektur sicherstellen.
Daher können sich Entwickler darauf konzentrieren, einen Container mit einem einzigen Befehl zu codieren und für Kubernetes bereitzustellen, während Knative die Anwendung verwaltet und sich dabei um Netzwerknuancen, automatische Skalierung auf Null und Versionsverfolgung kümmert.
Darüber hinaus ermöglicht Knative Entwicklern, lose gekoppelten Code mit ihrem Event-Handling-Framework zu schreiben , das universelles Abonnement, Bereitstellung und Event-Management bietet. Dies bedeutet, dass Sie die Ereigniskonnektivität deklarieren und Ihre Anwendungen bestimmte Datenströme abonnieren können.
Unter der Leitung von Google wurde die Open-Source-Plattform in die Cloud Native Computing Foundation aufgenommen. Dies impliziert einen Mangel an Lieferantenbindung, was ansonsten eine erhebliche Einschränkung der aktuellen Cloud-Server-freien FaaS-Lösungen darstellt. Sie können Knative auf jedem Kubernetes-Cluster ausführen.
FĂĽr wen ist Knative?
Knative hilft einer Vielzahl von Fachleuten mit jeweils eigenen Kenntnissen, Erfahrungen und Verantwortlichkeiten.
Ingenieure können sich auf die Verwaltung des Kubernetes-Clusters und die Installation und Wartung von Knative-Instanzen mithilfe von kubectl konzentrieren, während Entwickler Anwendungen mithilfe der Knative-API erstellen und bereitstellen.
Dies ist ein großes Plus für jede Organisation, da jetzt verschiedene Teams ihre Aufgaben lösen können, ohne sich gegenseitig zu stören.
Warum sollten Sie Knative verwenden?
Die meisten Organisationen, die Kubernetes verwenden, verfĂĽgen ĂĽber einen komplexen Prozess zur Verwaltung der Bereitstellung und Wartung von Workloads. Dies fĂĽhrt dazu, dass Entwickler auf Details achten, ĂĽber die sie sich keine Sorgen machen mĂĽssen. Entwickler sollten sich auf das Codieren konzentrieren, anstatt ĂĽber Assemblys und Bereitstellungen nachzudenken.
Kubeless hilft Entwicklern, ihre CodeausfĂĽhrung zu vereinfachen, ohne zu viel darĂĽber wissen zu mĂĽssen, was unter der Haube von Kubernetes vor sich geht.
Ein Kubernetes-Cluster belegt Infrastrukturressourcen, da für alle Anwendungen mindestens ein Container ausgeführt werden muss. Knative verwaltet diesen Aspekt für Sie und kümmert sich von Grund auf um die automatische Skalierung von Containern im Cluster. Auf diese Weise können Kubernetes-Administratoren mehrere Anwendungen in einem einzigen Cluster verpacken.
Wenn Sie mehrere Anwendungen mit unterschiedlichen Spitzenzeiten oder einen Cluster mit automatisch skalierenden Worker-Knoten haben, können Sie während der Ausfallzeit erheblich davon profitieren.
Eine echte Goldmine für Microservices-Architekturanwendungen, für die möglicherweise keine Microservices erforderlich sind, die zu einem bestimmten Zeitpunkt ausgeführt werden. Dies ermöglicht eine effizientere Nutzung der Ressourcen, und Sie können mit begrenzten Ressourcen mehr erreichen.
Außerdem lässt es sich recht gut in die Eventing-Engine integrieren und erleichtert das Entwerfen nicht verwandter Systeme. Der Anwendungscode kann völlig frei von Endpunktkonfigurationen bleiben, und Sie können Ereignisse veröffentlichen und abonnieren, indem Sie Konfigurationen auf Kubernetes-Ebene deklarieren. Dies ist ein wesentlicher Vorteil für komplexe Microservice-Anwendungen!
Wie funktioniert Knative?
Knative stellt die kn- API unter Verwendung der Kubernetes- und CRD-Operatoren bereit . Mit ihnen können Sie Anwendungen über die Befehlszeile bereitstellen. Im Hintergrund erstellt Knative alles, was Kubernetes benötigt (Bereitstellungen, Dienste, eingehende Daten usw.), um Anwendungen auszuführen, ohne dass Sie sich darum kümmern müssen.
Beachten Sie, dass Knative nicht sofort Pods erstellt. Stattdessen bietet es einen virtuellen Endpunkt für Anwendungen und hört ihnen zu. Wenn eine Anforderung diese Endpunkte erreicht, führt Knative die erforderlichen Pods aus. Dadurch können Anwendungen von Grund auf auf die gewünschte Anzahl von Instanzen skaliert werden.
Knative stellt Anwendungsendpunkte unter Verwendung einer eigenen Domäne im Format bereit [App-Name]. [Namespace]. [Benutzerdefinierte Domain] .
Dies hilft, die Anwendung eindeutig zu identifizieren. Ähnlich wie Kubernetes mit Diensten umgeht, müssen Sie jedoch eigene Domain-A-Einträge erstellen, um auf das Istio-Ingress-Gateway zu verweisen. Istio verwaltet den gesamten Datenverkehr, der im Hintergrund durch Ihren Cluster geleitet wird.
Knative ist ein Zusammenschluss vieler CNCF- und Open Source-Produkte wie Kubernetes, Istio, Prometheus, Grafana und Event-Streaming-Engines wie Kafka und Google Pub / Sub.
Knative installieren
Knative hat einen angemessenen modularen Aufbau und Sie können nur die Komponenten installieren, die Sie benötigen. Knative bietet Event-, Wartungs- und Überwachungskomponenten an. Sie können sie mit benutzerdefinierten CRDs installieren.
Knative hat externe Abhängigkeiten und Anforderungen für jede Komponente. Wenn Sie beispielsweise eine Dienstkomponente installieren, müssen Sie auch Istio und das DNS-Add-On installieren.
Die Installation von Knative ist ziemlich kompliziert und verdient einen separaten Artikel. Lassen Sie uns zur Demonstration zunächst die Servicekomponente installieren.
Dazu benötigen Sie einen funktionierenden Kubernetes-Cluster.
Installieren Sie die Service-CRD und die Serving Core-Komponenten:
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
Installieren Sie Istio for 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
Warten Sie, bis Istio bereit ist, indem Sie ĂĽberprĂĽfen, ob Kubernetes dem Istio Ingress-Gateway eine externe IP-Adresse zugewiesen hat:
kubectl -n istio-system get service istio-ingressgateway
Definieren Sie Ihre eigene Domain und konfigurieren Sie DNS so, dass es auf die IP-Adresse des Istio Ingress Gateways verweist:
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
Installieren Sie das Istio HPA-Add-On:
kubectl apply -f https://github.com/knative/serving/releases/download/v0.17.0/serving-hpa.yaml
Installieren der Knative CLI
Die Installation der Knative CLI ist einfach. Sie müssen die neueste Version der Knative CLI-Binärdatei in den Ordner bin herunterladen oder den entsprechenden Pfad angeben.
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
Starten der Hello, World! -Anwendung
Lassen Sie uns jetzt unser erstes "Hallo Welt!" App, um zu sehen, wie einfach die Bereitstellung mit Knative ist.
Verwenden wir die Hello, World! Sample-Anwendung in Go zur Demonstration. Dies ist eine einfache REST-API, die Hello $ TARGET zurückgibt , wobei $ TARGET eine Umgebungsvariable ist, die Sie im Container festlegen können.
FĂĽhren Sie den folgenden Befehl aus, um zu beginnen:
$ 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.
Starten wir den helloworld- Dienst .
$ curl http://helloworld-go.default.34.71.125.175.xip.io Hello World!
Und nach einer Weile bekommen wir eine Antwort. Werfen wir einen Blick auf die Schoten.
$ kubectl get pod NAME READY STATUS RESTARTS AGE helloworld-go-zglmv-1-deployment-6d4b7fb4f-ctz86 2/2 Running 0 50s
Wie Sie sehen können, rollte sich Knative in einem Zug im Hintergrund ab. Es stellt sich heraus, dass wir buchstäblich von Grund auf neu skaliert haben.
Wenn wir etwas Zeit geben, werden wir sehen, dass der Pod fertig ist. Mal sehen, was los ist.
$ 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
Das obige Beispiel zeigt, dass Knative die Pods gemäß unseren Anforderungen verwaltet. Obwohl die erste Anforderung langsam ist, da Knative Workloads erstellt, um sie zu verarbeiten, werden nachfolgende Anforderungen schneller ausgeführt. Sie können die Verlangsamungszeit der Pods je nach Ihren Anforderungen oder wenn Sie eine engere SLA haben, fein einstellen.
Gehen wir noch etwas weiter. Wenn Sie sich die Anmerkungen ansehen, haben wir jede in Bearbeitung befindliche auf 10 gleichzeitige Anforderungen beschränkt. Was passiert also, wenn wir unsere Funktionen darüber hinaus laden? Lass es uns jetzt herausfinden!
Wir werden das Dienstprogramm hey verwenden , um die Anwendung zu laden. Der folgende Befehl sendet innerhalb von 30 Sekunden 50 gleichzeitige Anforderungen an den Endpunkt.
$ 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
Nun schauen wir uns die HĂĽlsen an.
$ 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
Wie wir sehen können, skaliert Knative die Pods, wenn die Belastung der Funktion zunimmt, und verlangsamt sie, wenn keine Last mehr vorhanden ist.
Fazit
Knative kombiniert die besten Funktionen einer serverlosen Architektur mit den Funktionen von Kubernetes. Es bewegt sich allmählich in Richtung einer Standardmethode zur Implementierung von FaaS. Da Knative Teil von CNCF ist und immer mehr technisches Interesse gewinnt, werden wir bald feststellen, dass Cloud-Anbieter Knative in ihren serverlosen Produkten einsetzen.
Danke, dass du meinen Artikel gelesen hast! Ich hoffe, dass es Ihnen gefallen hat.