Knative - op k8s gebaseerd platform-as-a-service met serverloze ondersteuning

Knative - op k8s gebaseerd platform-as-a-service met serverloze ondersteuning

Kubernetes is ongetwijfeld het dominante platform voor containerimplementatie geworden. Het biedt de mogelijkheid om vrijwel alles te besturen met behulp van de API's en aangepaste controllers die de API's uitbreiden met aangepaste bronnen.

De gebruiker moet echter nog steeds gedetailleerde beslissingen nemen over hoe hij applicaties precies moet implementeren, configureren, beheren en schalen. Kwesties van applicatieschaling, bescherming en verkeersstroom blijven ter beoordeling van de gebruiker. Hiermee onderscheidt Kubernetes zich van conventionele platforms as a service (PaaS), zoals Cloud Foundry en Heroku.

De platforms hebben een vereenvoudigde gebruikersinterface en zijn gericht op applicatieontwikkelaars die meestal betrokken zijn bij het opzetten van individuele applicaties. Routing, implementatie en statistieken worden transparant voor de gebruiker beheerd door het onderliggende PaaS-systeem.

De source-to-ship-workflow wordt afgehandeld door PaaS door een aangepaste containerimage te maken, deze te implementeren en een nieuwe route en DNS-subdomein in te stellen voor inkomend verkeer. Dit alles wordt op commando gelanceerd git push.

Kubernetes levert (opzettelijk) alleen de kernbouwstenen voor dergelijke platforms, waardoor de gemeenschap de vrijheid heeft om het werk zelf te doen. Hoe zei Kelsey Hightower:

Kubernetes is een platform voor het bouwen van platforms. De beste positie om te starten, maar niet om te eindigen.

Als gevolg hiervan zien we een aantal Kubernetes-builds, evenals hostingbedrijven die PaaS voor Kubernetes proberen te creëren, zoals OpenShift en Rancher. Te midden van de groeiende Kube-PaaS-markt betreedt Knative, opgericht in juli 2018 door Google en Pivotal, de ring.

Knative was een samenwerking tussen Google en Pivotal, met een beetje hulp van andere bedrijven zoals IBM, RedHat en Solo.im. Het biedt vergelijkbare PaaS-dingen als Kubernetes met eersteklas ondersteuning voor serverloze computergebaseerde applicaties. In tegenstelling tot Kubernetes-builds wordt Knative geïnstalleerd als een add-on op elk compatibel Kubernetes-cluster en geconfigureerd via gebruikersbronnen.

Wat is Knative?

Knative wordt beschreven als “Een op Kubernetes gebaseerd platform voor het leveren en beheren van workloads met behulp van modern serverloos computergebruik.” Knative factureert zichzelf als een dergelijk platform, maar schaalt containers actief automatisch in verhouding tot gelijktijdige HTTP-verzoeken. Ongebruikte services worden uiteindelijk teruggebracht tot nul, waardoor on-demand schaling zonder server mogelijk wordt.

Knative bestaat uit een set controllers die in elk Kubernetes-cluster kunnen worden geïnstalleerd en die de volgende mogelijkheden bieden:

  • het bouwen van gecontaineriseerde applicaties vanuit de broncode (aangeleverd door de component Bouw),
  • het verlenen van toegang tot inkomend verkeer naar applicaties (geleverd door de component Presenteren),
  • levering en automatische schaling van applicaties op aanvraag (ook verzorgd door de component Presenteren),
  • het identificeren van de bronnen van gebeurtenissen die leiden tot het starten van applicaties (geleverd door de component Eventing).

Een belangrijk onderdeel is Serving, dat voorziet in provisioning, automatisch schalen en verkeersbeheer voor beheerde applicaties. Na installatie van Knative heb je nog steeds volledige toegang tot de Kubernetes API, waardoor gebruikers applicaties kunnen beheren gewoon manier, en dient ook om Knative-services te debuggen, waarbij wordt gewerkt met dezelfde API-primitieven die deze services gebruiken (modules, services, enz.).

Met behulp van Serving wordt ook de blauwgroene verkeersroutering geautomatiseerd, waardoor verkeersscheiding tussen nieuwe en oude versies van de applicatie wordt gegarandeerd wanneer de gebruiker een bijgewerkte versie van de applicatie levert.

Knative zelf is afhankelijk van het installeren van een compatibele ingangscontroller. Op het moment van schrijven wordt dit artikel ondersteund Gloo API-gateway и Istio-servicegaas. Het configureert de beschikbare toegang om verkeer naar door Knative beheerde applicaties te routeren.

Istio Service Mesh kan een grote afhankelijkheid zijn voor Knative-gebruikers die het willen proberen zonder het Istio-configuratiescherm te installeren, omdat Knative alleen afhankelijk is van de gateway.

Om deze reden geven de meeste gebruikers de voorkeur aan Gloo als toegangspoort tot Knative, die een vergelijkbare reeks mogelijkheden biedt als Istio (met als doel alleen Knative te gebruiken), terwijl ze ook aanzienlijk minder bronnen gebruiken en lagere operationele kosten hebben.

Laten we Knative in actie testen op de stand. Ik gebruik een nieuw geïnstalleerd cluster dat wordt uitgevoerd in GKE:

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

Laten we beginnen met het installeren van Knative en Gloo. Dit kan in elke volgorde worden gedaan:

# ставим 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
# ...

We controleren of alle Pods de status ‘Actief’ hebben:

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 is klaar voor routering. Laten we een automatisch schalende Knative-service maken (laten we het kservice noemen) en verkeer ernaartoe routeren.

Knative-services bieden een eenvoudiger pad voor het leveren van applicaties aan Kubernetes dan het conventionele Deployment+Service+Ingress-model. We gaan met dit voorbeeld werken:

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

Ik heb dit naar een bestand gekopieerd en vervolgens op deze manier op mijn Kubernetes-cluster toegepast:

kubectl apply -f ksvc.yaml -n default

We kunnen de bronnen die door Knative zijn gemaakt in het cluster bekijken na het leveren van onze 'helloworld-go' kservice:

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

De pod met onze 'helloworld-go'-afbeelding wordt gelanceerd wanneer de kservice wordt geïmplementeerd. Als er geen verkeer is, wordt het aantal pods tot nul teruggebracht. En omgekeerd: als het aantal gelijktijdige verzoeken een bepaalde configureerbare drempel overschrijdt, zal het aantal pods toenemen.

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

Knative configureert de toegang met behulp van een speciale 'ingang'-bron in de interne Knative API. Gloo gebruikt deze API als configuratie om PaaS-achtige functies te bieden, waaronder een blauwgroen implementatiemodel, automatische TLS-handhaving, time-outs en andere geavanceerde routeringsfuncties.

Na enige tijd zien we dat onze pods verdwenen zijn (omdat er geen inkomend verkeer was):

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

Tenslotte zullen wij proberen hen te bereiken. U kunt eenvoudig en gemakkelijk de URL voor Knative Proxy verkrijgen met behulp van glooctl:

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

Zonder geïnstalleerd glooctl u kunt het adres en de poort zien in de kube-service:

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

Laten we wat gegevens uitvoeren met behulp van cURL:

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

Knative biedt ontwikkelaars een bijna-PaaS bovenop kant-en-klare Kubernetes met behulp van Gloo's krachtige, full-stack API-gateway. Dit bericht heeft slechts het oppervlak van de uitgebreide aanpassingsmogelijkheden en extra functies van Knative belicht. Hetzelfde met Glo!

Ondanks het feit dat Knative nog een jong project is, brengt het team elke zes weken nieuwe versies uit en is de implementatie van geavanceerde functies begonnen, zoals automatische TLS-implementatie en automatisch schalen van het configuratiescherm. De kans is groot dat Knative, als gevolg van de samenwerking tussen meerdere cloudbedrijven en als basis van het nieuwe Cloud Run-aanbod van Google, de primaire optie kan worden voor serverloos computergebruik en PaaS op Kubernetes. Volg het nieuws!

Van de redactie van SouthBridge
De meningen van lezers zijn belangrijk voor ons, daarom vragen we u om deel te nemen aan een korte enquête met betrekking tot toekomstige artikelen over Knative, Kubernetes en serverless computing:

Alleen geregistreerde gebruikers kunnen deelnemen aan het onderzoek. Inloggen, Alsjeblieft.

Doorgaan met het schrijven van artikelen en handleidingen over Knative en serverloos computergebruik?

  • Ja graag.

  • Nee, dank u wel.

28 gebruikers hebben gestemd. 4 gebruikers onthielden zich van stemming.

Bron: www.habr.com

Voeg een reactie