Knative - k8s-basearre platfoarm-as-a-tsjinst mei serverless stipe

Knative - k8s-basearre platfoarm-as-a-tsjinst mei serverless stipe

Kubernetes is sûnder mis it dominante platfoarm wurden foar kontenerynset. It biedt de mooglikheid om hast alles te kontrolearjen mei har API's en oanpaste controllers dy't har API's útwreidzje mei oanpaste boarnen.

De brûker moat lykwols noch altyd detaillearre besluten nimme oer krekt hoe't jo applikaasjes ynsette, konfigurearje, beheare en skaalje. Kwesties fan skaalfergrutting, beskerming en ferkearsstream fan tapassing bliuwe by it ynsjoch fan de brûker. Dit ûnderskiedt Kubernetes fan konvinsjonele platfoarms as in tsjinst (PaaS), lykas Cloud Foundry en Heroku.

De platfoarms hawwe in ferienfâldige brûkersynterface en binne rjochte op applikaasje-ûntwikkelders dy't meast belutsen binne by it opsetten fan yndividuele applikaasjes. Routing, ynset en metriken wurde transparant foar de brûker beheard troch it ûnderlizzende PaaS-systeem.

De workflow fan boarne-nei-skip wurdt behannele troch PaaS troch it meitsjen fan in oanpaste kontenerôfbylding, it ynsetten, it ynstellen fan in nije rûte en DNS-subdomein foar ynkommend ferkear. Dit alles wurdt lansearre op kommando git push.

Kubernetes (mei opsetsin) leveret allinich de kearnboustiennen foar sokke platfoarms, wêrtroch de mienskip frij is om it wurk sels te dwaan. Hoe Kelsey Hightower sei:

Kubernetes is in platfoarm foar it bouwen fan platfoarms. De bêste posysje foar start, mar net finish.

As resultaat sjogge wy in bosk Kubernetes-builds, lykas hostingbedriuwen dy't besykje PaaS foar Kubernetes te meitsjen, lykas OpenShift en Rancher. Te midden fan 'e groeiende Kube-PaaS-merk komt Knative, oprjochte yn july 2018 troch Google en Pivotal, de ring yn.

Knative wie in gearwurking tusken Google en Pivotal, mei in bytsje help fan oare bedriuwen lykas IBM, RedHat en Solo.im. It biedt ferlykbere PaaS-dingen oan Kubernetes mei top-notch-stipe foar serverless computing-basearre applikaasjes. Oars as Kubernetes-builds, is Knative ynstalleare as in tafoeging op elke kompatibele Kubernetes-kluster en konfigureare fia brûkersboarnen.

Wat is Knative?

Knative wurdt beskreaun as "In Kubernetes-basearre platfoarm foar it leverjen en behearen fan workloads mei moderne serverless computing." Knative, wylst hy himsels as sa'n platfoarm fakturearret, konteners aktyf autoskaleart yn ferhâlding ta tagelyk HTTP-oanfragen. Net brûkte tsjinsten skaalje úteinlik omleech nei nul, it leverjen fan skaalfergrutting op oanfraach sûnder serverstyl.

Knative bestiet út in set fan controllers dy't yn elke Kubernetes-kluster ynstallearje en de folgjende mooglikheden leverje:

  • it bouwen fan containerisearre applikaasjes út boarnekoade (fersoarge troch de komponint Bouwe),
  • it jaan fan tagong ta ynkommend ferkear oan applikaasjes (fersoarge troch de komponint serving),
  • levering en automatyske skaalfergrutting fan applikaasjes op oanfraach (ek levere troch de komponint serving),
  • identifisearje de boarnen fan eveneminten dy't liede ta lansearringen fan applikaasjes (fersoarge troch de komponint Eventing).

In wichtige komponint is Serving, dy't foarsjenning, automatyske skaalfergrutting en ferkearsbehear leveret foar behearde applikaasjes. Nei it ynstallearjen fan Knative, hawwe jo noch folsleine tagong ta de Kubernetes API, wêrtroch brûkers applikaasjes kinne beheare gewoan manier, en tsjinnet ek om Knative tsjinsten te debuggen, wurkje mei deselde API-primitiven dy't dizze tsjinsten brûke (modules, tsjinsten, ensfh.).

Mei help fan Serving wurdt blau-griene ferkearsrûte ek automatisearre, en soarget foar ferkearsskieding tusken nije en âlde ferzjes fan 'e applikaasje as de brûker in aktualisearre ferzje fan' e applikaasje leveret.

Knative sels hinget ôf fan it ynstallearjen fan in kompatibele yngongskontrôler. Op it stuit fan it skriuwen wurdt dit artikel stipe Gloo API Gateway и Istio Service Mesh. It sil beskikber yngong konfigurearje om ferkear nei Knative-beheare applikaasjes te routeren.

Istio Service Mesh kin in grutte ôfhinklikens wêze foar Knative-brûkers dy't it wolle besykje sûnder it Istio-kontrôlepaniel te ynstallearjen, om't Knative allinich hinget fan 'e poarte.

Om dizze reden leaver de measte brûkers Gloo as in poarte nei Knative, en leveret in ferlykbere set fan mooglikheden foar Istio (foar it doel om allinich Knative te brûken), wylst se ek signifikant minder boarnen brûke en legere operasjonele kosten hawwe.

Litte wy Knative yn aksje testen op 'e tribune. Ik sil in nij ynstallearre kluster brûke dy't rint yn GKE:

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

Litte wy begjinne mei it ynstallearjen fan Knative en Gloo. Dit kin dien wurde yn elke folchoarder:

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

Wy kontrolearje dat alle Pods yn 'e status "Running" binne:

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 klear foar routing, lit ús in auto-skaaljende Knative-tsjinst oanmeitsje (litte wy it kservice neame) en ferkear dernei routerje.

Knative tsjinsten jouwe in makliker paad foar it leverjen fan applikaasjes oan Kubernetes dan it konvinsjonele Deployment + Service + Ingress-model. Wy sille wurkje mei dit foarbyld:

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 haw dit kopieare nei in bestân, en dan tapast it op myn Kubernetes-kluster op dizze manier:

kubectl apply -f ksvc.yaml -n default

Wy kinne de boarnen sjen makke troch Knative yn it kluster nei it leverjen fan ús '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 mei ús 'helloworld-go'-ôfbylding wurdt lansearre as de kservice wurdt ynset. As der gjin ferkear is, wurdt it tal pods werombrocht nei nul. En oarsom, as it oantal simultane oanfragen in bepaalde konfigurearbere drompel grutter is, sil it oantal pods tanimme.

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

Knative konfigurearret syn yngong mei in spesjale 'yngong' boarne yn 'e ynterne Knative API. Gloo brûkt dizze API as har konfiguraasje om PaaS-like funksjes te leverjen, ynklusyf in blau-grien ynsetmodel, automatyske TLS-hanthavening, time-outs en oare avansearre routingfunksjes.

Nei in skoft sjogge wy dat ús pods ferdwûn binne (omdat der gjin ynkommend ferkear wie):

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

Uteinlik sille wy besykje se te berikken. Jo kinne maklik en maklik de URL krije foar Knative Proxy mei help fan glooctl:

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

Sûnder ynstallearre glooctl jo kinne it adres en de poarte sjen yn 'e kube-tsjinst:

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

Litte wy wat gegevens útfiere mei cURL:

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

Knative leveret in hast-PaaS foar ûntwikkelders boppe-op out-of-the-box Kubernetes mei help fan Gloo's hege prestaasjes, full-stack API-gateway. Dizze post hat allinich it oerflak fan Knative's wiidweidige oanpassingsopsjes en ekstra funksjes bekrast. Itselde mei Gloo!

Nettsjinsteande it feit dat Knative noch in jong projekt is, jout har team elke seis wiken nije ferzjes út, en de ymplemintaasje fan avansearre funksjes is begon, lykas automatyske TLS-ynset, automatyske skaalfergrutting fan it kontrôlepaniel. D'r is in goede kâns dat, as gefolch fan gearwurking tusken meardere wolkbedriuwen, en as basis fan Google's nije Cloud Run-oanbod, Knative de primêre opsje kin wurde foar serverless computing en PaaS op Kubernetes. Folgje it nijs!

Fan de redaksje fan SouthBridge
De mieningen fan lêzers binne wichtich foar ús, dus wy freegje jo om diel te nimmen oan in koarte enkête yn ferbân mei takomstige artikels oer Knative, Kubernetes, serverless computing:

Allinnich registrearre brûkers kinne meidwaan oan 'e enkête. Ynlogge, asjebleaft.

Moat ik trochgean mei it skriuwen fan artikels en gidsen oer Knative en serverless computing?

  • Ja graach.

  • Nee, tank.

28 brûkers stimden. 4 brûkers ûntholden har.

Boarne: www.habr.com

Add a comment