Knative — Kubernetesel põhinev teenus serverivaba toetusega.

Knative — Kubernetesel põhinev teenus serverivaba toetusega.

Kontenerite käitamiseks on kindlasti juhtiv platvorm Kubernetes. See pakub võimalust hallata peaaegu kõike, kasutades oma API-sid ja kasutaja määratud kontrollerite, mis laiendavad selle API-d kasutajate ressursside kaudu.

Kuid kasutaja peab ikkagi tegema üksikasjalikke otsuseid selle üle, kuidas täpselt rakendusi käitada, seadistada, hallata ja skaleerida. Rakenduse skaleerimise, turvalisuse ja liikluse suunamisega seotud küsimused jäävad kasutaja vastutusele. See eristab Kubernetesit tavalisest "platvormina teenus" (PaaS), nagu näiteks Cloud Foundry ja Heroku.

Platvormid pakuvad lihtsat kasutajaliidest, mis on suunatud rakenduste arendajatele, kes tihti tegelevad üksikute rakenduste seadistamisega. Suunamine, käitamine ja mõõdikud hallatakse kasutaja jaoks läbipaistvalt PaaS-i põhiteenusega.

Töövoog "allikas – tarnimine" töötleb PaaS, luues kasutaja määratud konteineripildi, selle käitamise, uue marsruudi seadistamise ja DNS-i alamdomeeni, et suunata saabuvat liiklust. Kõik see käivitatakse käsu peale. git push.

Kubernetes pakub (sihilikult) vaid baasmooduleid platvormide jaoks, võimaldades kogukonnal selle töö ise ära teha. Kuidas ütles Kelsey Hightower:

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

Tulemusena näeme hulka Kubernetes'i jaotusi ning toimetajaid, kes püüavad luua Kubernetes'i jaoks PaaS-i, näiteks OpenShift ja Rancher. Tõusva Kube-PaaS turu taustal astub ringile Knative, mis loodi 2018. aasta juulis Google'i ja Pivotal'i poolt.

Knative on tulemus Google'i ja Pivotal'i koostööst, väikese panusega ka teistelt ettevõtetelt, nagu IBM, RedHat ja Solo.im. See pakub sarnaseid PaaS lahendusi Kubernetes'e jaoks, pakkudes esmaklassilist tuge serverivabade arvutuste rakendustele. Erinevalt Kubernetes'i jaotustest installitakse Knative igasse ühilduvasse Kubernetes'i klastri kui lisand, mida seadistatakse kasutajate ressursside kaudu.

Mis on Knative?

Knative on kirjeldatud kui „Kubernetesi põhine platvorm tööde tarnimiseks ja haldamiseks kaasaegsete serverivabade arvutuste kaudu“. Knative, olles enese kohta nii öelnud, skaleerib automaatselt konteinerid proportsionaalselt samal ajal esitatavatele HTTP-päringutele. Kasutamata teenused skaleeritakse lõpuks nulli, pakkudes nõudmisel skaleerimist serverivabade arvutuste stiilis.

Knative koosneb komplektist kontrollereid, mis installitakse igasse Kubernetes'i klastrisse ja mis pakuvad järgmisi võimalusi:

  • konteineriseeritud rakenduste koostamine allikakoodist (pakub komponent Build),
  • sissetuleva liikluse suunamine rakendustele (pakub komponent Serving),
  • rakenduste tarnimine ja automaatne skaleerimine nõudmisel (pakutakse samuti komponendiga Serving),
  • sündmuste allikate määramine, mis käivitavad rakenduste töö (pakutakse komponendiga Eventing).

Peamine komponent on Serving, mis pakub jaotust, automaatset skaleerimist ja liikluse haldamist hallatavatele rakendustele. Pärast Knative'i installimist jääb täielik juurdepääs Kubernetes API-le, mis võimaldab kasutajatel hallata rakendusi. tavalise Samuti teenib see Knative teenuste tõrkeotsinguks, töötades koos nende samade API primitiividega, mida need teenused kasutavad (moodulid, teenused jne).

Serving automatiseerib ka blue-green liikluse suunamise, tagades liikluse jagamise uute ja vanade rakenduse versioonide vahel, kui kasutaja tarnib rakenduse uuendatud versiooni.

Knative sõltub ühilduva ingress-kontrolleri installimisest. Artikli kirjutamise ajal toetatakse Gloo API Gateway ja Istio Service Mesh. See seadistab saadaval oleva ingressi liikluse suunamiseks hallatavatele Knative rakendustele.

Istio Service Mesh võib osutuda suureks sõltuvuseks Knative'i kasutajatele, kes soovivad seda proovida ilma Istio juhtpaneeli installimata, kuna Knative sõltub ainult väravast.

Selle põhjusel eelistab enamik kasutajaid Gloo-d Knative'i väravaks, mis pakub sarnast funktsioonide kogumit nagu Istio (rääkides ainult Knative'i kasutamise eesmärgist), kasutades aga märksa vähem ressursse ja tuues kaasa madalamad tegevuskulud.

Kontrollime Knative'i toimimist stendis. Kasutan värskelt paigaldatud klastri, mis töötab GKE-s:

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

Alustame Knative'i ja Gloo paigaldamist. Seda saab teha igas 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, et kõik Podid on olekus 'Running':

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 valmis suunama, loome automaatselt skaleeritava Knative teenuse (kutsume seda kservice'iks) ja suuname sellele liikluse.

Knative teenused pakuvad kergemat viisi rakenduste tarnimiseks Kubernetesesse — võrreldes tavalise Deployment+Service+Ingress mudeliga. Töötame näiteks järgmisega:

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, pärast mida rakendasin selle oma Kubernetes klastrisse järgmiselt:

kubectl apply -f ksvc.yaml -n default

Saame vaadata Knative poolt pärast 'helloworld-go' tarnimist loodud ressursse klastris 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' pood käivitatakse kservice'i kasutamisel. Kui liiklust pole, kärbitakse pod'ide arvu nullini. Ja vastupidi, kui samadele ajal tehtud päringute arv ületab teatud seadistatava läviväärtuse, suureneb pod'ide arv.

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

Knative seadistab oma ingressi kasutades erilist 'ingress' ressursi sisemises Knative API-s. Gloo kasutab seda API-d oma konfigureerimiseks, et pakkuda PaaS-ile iseloomulikke omadusi, sealhulgas blue-green juurutusmudelit, automaatset TLS-i rakendamist, ajutisi piire ja muid täiustatud marsruutimise funktsioone.

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

kubectl get pod -n default

Ressursse ei leitud.
kubectl get deployment -n default
NIMI                             SOOVITUD   PRAEGUNE   UUSIM   SAADAVAL   VANUS
helloworld-go-fjp75-deployment   0         0         0            0           9m46s

Lõpuks proovime nendega ühendust võtta. URL-i Knative Proxy jaoks on lihtne ja vaevata saada kasutades glooctl:

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

Ilma seadistamiseta glooctl võime aadressi ja sadama vaadata kube teenusest:

kubectl get svc -n gloo-system knative-external-proxy
NIMI                     TÜÜP           KLIENDI-IP     VÄLJAS-IP      SADAM(A)                      VANUS
knative-external-proxy   LoadBalancer   10.16.11.157   35.190.151.188   80:32168/TCP,443:30729/TCP   77m

Käivitame andmeid cURL-i abil:

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

Knative pakub peaaegu PaaS-i arendajatele otse 'kasti seest' Kubernetes'i peal, kasutades kõrge jõudlusega täisfunktsionaalset API Gloo väravat. See märkus kajastab vaid veidikene Knative'i laialdasi kohandamisvõimalusi ja täiendavaid funktsioone. Gloo puhul kehtib sama!

Kuigi Knative on endiselt noor projekt, annab selle meeskond uusi versioone välja iga kuue nädala tagant ning rakendab arenenud funktsioone, nagu automaatne TLS-i juurutamine ja automaatne juhtpaneeli skaleerimine. On suur võimalus, et pärast paljude pilveteenuste pakkujate koostööd ning Google'i uue Cloud Run'i pakkumise aluseks, võib Knative saada peamiseks valikuks serveriteta arvutuste ja PaaS-i korraldamiseks Kubernetes'is. Jälgige uudiseid!

Läänesillaga toimetusest
Meie jaoks on lugejate arvamus oluline, seetõttu palume teil osaleda lühikeses küsitluses, mis on seotud Knative'i, Kubernetes'i ja serveriteta arvutuste tulevaste artiklitega:

Ainult registreeritud kasutajad saavad küsitluses osaleda. Logige sisse, palun.

Kas tõlkida ja kirjutada rohkem artikleid ja juhendeid Knative'i ja serveriteta arvutuste kohta?

  • Jah, palun.

  • Aitäh, pole vaja.

Hääletas 28 kasutajat. 4 kasutajat piirasid end.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster