Knative – serverita toega k8s-põhine platvorm-teenusena

Knative – serverita toega k8s-põhine platvorm-teenusena

Kubernetesist on kahtlemata saanud domineeriv konteinerite juurutamise platvorm. See annab võimaluse juhtida peaaegu kõike, kasutades oma API-sid ja kohandatud kontrollereid, mis laiendavad selle API-sid kohandatud ressurssidega.

Kasutaja peab siiski tegema üksikasjalikke otsuseid selle kohta, kuidas täpselt rakendusi juurutada, konfigureerida, hallata ja skaleerida. Rakenduste skaleerimise, kaitse ja liiklusvooga seotud küsimused jäävad kasutaja enda otsustada. See eristab Kubernetes tavapärastest platvormidest kui teenusest (PaaS), nagu Cloud Foundry ja Heroku.

Platvormidel on lihtsustatud kasutajaliides ja need on suunatud rakenduste arendajatele, kes on kõige sagedamini seotud üksikute rakenduste seadistamisega. Marsruutimist, juurutamist ja mõõdikuid haldab kasutaja jaoks läbipaistvalt aluseks olev PaaS-süsteem.

Lähtest tarnimiseni töövoogu haldab PaaS, luues kohandatud konteineri kujutise, juurutades selle, seadistades sissetuleva liikluse jaoks uue marsruudi ja DNS-i alamdomeeni. Kõik see käivitatakse käsu peale git push.

Kubernetes pakub (tahtlikult) selliste platvormide jaoks ainult põhilisi ehitusplokke, jättes kogukonnale vabaduse seda tööd ise teha. Kuidas ütles Kelsey Hightower:

Kubernetes on platvormide ehitamise platvorm. Parim positsioon alustamiseks, kuid mitte lõpetamiseks.

Selle tulemusena näeme hulga Kubernetese konstruktsioone, aga ka hostimisettevõtteid, mis üritavad Kubernetese jaoks PaaS-i luua, nagu OpenShift ja Rancher. Keset kasvavat Kube-PaaS-i turgu astub ringi 2018. aasta juulis Google'i ja Pivotali asutatud Knative.

Knative sündis Google'i ja Pivotali koostööna, abiks olid veidi teised ettevõtted, nagu IBM, RedHat ja Solo.im. See pakub Kubernetesega sarnaseid PaaS-i asju koos tipptasemel toega serverita andmetöötluspõhistele rakendustele. Erinevalt Kubernetese järgudest installitakse Knative lisandmoodulina mis tahes ühilduvasse Kubernetese klastrisse ja konfigureeritakse kasutajaressursside kaudu.

Mis on Knative?

Knative'i kirjeldatakse kui "Kubernetese-põhist platvormi töökoormuse edastamiseks ja haldamiseks kaasaegse serverita andmetöötluse abil." Kuigi Knative end sellise platvormina arveldab, skaleerib ta konteinereid aktiivselt proportsionaalselt samaaegsete HTTP-päringutega. Kasutamata teenused vähenevad lõpuks nullini, pakkudes serverita stiilis nõudmisel skaleerimist.

Knative koosneb kontrollerite komplektist, mis installitakse igasse Kubernetese klastrisse ja pakuvad järgmisi võimalusi:

  • konteinerrakenduste loomine lähtekoodist (pakkub komponent Ehitama),
  • juurdepääsu pakkumine rakendustele sissetulevale liiklusele (pakkub komponent Teenin),
  • rakenduste tarnimine ja automaatne skaleerimine nõudmisel (pakkub ka komponent Teenin),
  • rakenduste käivitamiseni viivate sündmuste allikate tuvastamine (pakkub komponent Sündmus).

Võtmekomponent on teenindamine, mis pakub hallatavate rakenduste jaoks ettevaatamist, automaatset skaleerimist ja liikluse haldust. Pärast Knative'i installimist on teil endiselt täielik juurdepääs Kubernetes API-le, mis võimaldab kasutajatel rakendusi hallata tavaline viisil ja see on mõeldud ka Knative'i teenuste silumiseks, töötades samade API primitiividega, mida need teenused kasutavad (moodulid, teenused jne).

Servingi abil automatiseeritakse ka sinakasroheline liikluse marsruutimine, tagades liikluse eraldatuse rakenduse uute ja vanade versioonide vahel, kui kasutaja tarnib rakenduse uuendatud versiooni.

Knative ise sõltub ühilduva sisendkontrolleri installimisest. Kirjutamise ajal seda artiklit toetatakse Gloo API lüüs и Istio teenindusvõrk. See konfigureerib saadaoleva sisendi liikluse suunamiseks Knative'i hallatavatesse rakendustesse.

Istio Service Mesh võib olla suur sõltuvus Knative'i kasutajatele, kes soovivad seda proovida ilma Istio juhtpaneeli installimata, kuna Knative sõltub ainult lüüsist.

Sel põhjusel eelistab enamik kasutajaid Knative'i väravana Gloo'd, pakkudes Istiole sarnaseid võimalusi (eesmärgiks kasutada ainult Knative'i), kasutades samal ajal oluliselt vähem ressursse ja omades madalamaid tegevuskulusid.

Testime Knative'i stendil töös. Ma kasutan värskelt installitud klastrit, mis töötab GKE-s:

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

Alustame Knative ja Gloo installimist. Seda saab teha mis tahes järjekorras:

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

Kontrollime, kas kõik Pod on olekus "Töötab":

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 on marsruutimiseks valmis, loome automaatselt skaleeriva Knative'i teenuse (nimetagem seda kservice'iks) ja suuname liikluse sinna.

Knative'i teenused pakuvad rakenduste Kubernetesesse tarnimiseks lihtsamat teed kui tavaline juurutus+teenus+sisenemise mudel. Töötame selle näitega:

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

Kopeerisin selle faili ja rakendasin selle oma Kubernetese klastris järgmiselt:

kubectl apply -f ksvc.yaml -n default

Pärast 'helloworld-go' edastamist saame klastris vaadata Knative'i loodud ressursse kservice:

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

Meie 'helloworld-go' pildiga tasku käivitatakse kservice'i juurutamisel. Kui liiklust pole, vähendatakse kaunade arvu nullini. Ja vastupidi, kui samaaegsete päringute arv ületab teatud konfigureeritava läve, suureneb kaunade arv.

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

Knative konfigureerib oma sissepääsu sisemises Knative API-s spetsiaalse sisendressursi abil. Gloo kasutab seda API-t oma konfiguratsioonina, et pakkuda PaaS-i sarnaseid funktsioone, sealhulgas sinakasroheline juurutusmudel, automaatne TLS-i jõustamine, ajalõpud ja muud täpsemad marsruutimise funktsioonid.

Mõne aja pärast näeme, et meie kaunad on kadunud (kuna sissetulevat liiklust ei olnud):

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

Lõpuks püüame nendeni jõuda. Knative Proxy URL-i saate hõlpsalt ja hõlpsalt hankida glooctl:

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

Ilma installimata glooctl aadressi ja porti näete kube teenuses:

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

Käitame mõned andmed cURL-i abil:

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

Knative pakub arendajatele peaaegu PaaS-i lisaks valmis Kubernetesele, kasutades Gloo suure jõudlusega täispinu API-lüüsi. See postitus on ainult kriimustanud Knative'i ulatuslikke kohandamisvõimalusi ja lisafunktsioone. Sama Glooga!

Vaatamata sellele, et Knative on alles noor projekt, annab selle meeskond iga kuue nädala tagant välja uued versioonid ning alanud on täiustatud funktsioonide juurutamine, nagu automaatne TLS-i juurutamine, juhtpaneeli automaatne skaleerimine. On suur võimalus, et mitme pilveettevõtte vahelise koostöö tulemusena ja Google'i uue Cloud Run pakkumise aluseks on Knative'ist saanud Kubernetesi serverita andmetöötluse ja PaaS-i peamine valik. Jälgi uudiseid!

SouthBridge'i toimetajatelt
Lugejate arvamused on meile olulised, seega palume teil osaleda lühiküsitluses, mis on seotud tulevaste Knative'i, Kubernetese ja serverita andmetöötluse teemaliste artiklitega:

Küsitluses saavad osaleda ainult registreerunud kasutajad. Logi sissepalun.

Kas peaksin jätkama artiklite ja juhendite kirjutamist Knative'i ja serverita andmetöötluse kohta?

  • Jah palun.

  • Ei aitäh.

28 kasutajat hääletas. 4 kasutajat jäi erapooletuks.

Allikas: www.habr.com

Lisa kommentaar