Knative - platformë-si-shërbim i bazuar në k8s me mbështetje pa server

Knative - platformë-si-shërbim i bazuar në k8s me mbështetje pa server

Kubernetes është bërë padyshim platforma dominuese për vendosjen e kontejnerëve. Ai siguron mundësinë për të kontrolluar pothuajse çdo gjë duke përdorur API-të e tij dhe kontrollorët me porosi që zgjerojnë API-të e tij me burime të personalizuara.

Sidoqoftë, përdoruesi ende duhet të marrë vendime të hollësishme rreth mënyrës së saktë të vendosjes, konfigurimit, menaxhimit dhe shkallëzimit të aplikacioneve. Çështjet e shkallëzimit të aplikacionit, mbrojtjes dhe rrjedhës së trafikut mbeten në diskrecionin e përdoruesit. Kjo e veçon Kubernetes nga platformat konvencionale si shërbim (PaaS), të tilla si Cloud Foundry dhe Heroku.

Platformat kanë një ndërfaqe të thjeshtuar të përdoruesit dhe synojnë zhvilluesit e aplikacioneve të cilët më së shpeshti janë të përfshirë në vendosjen e aplikacioneve individuale. Drejtimi, vendosja dhe metrikat menaxhohen në mënyrë transparente për përdoruesin nga sistemi themelor PaaS.

Rrjedha e punës nga burimi në anije trajtohet nga PaaS duke krijuar një imazh të personalizuar të kontejnerit, duke e vendosur atë, duke vendosur një rrugë të re dhe nëndomain DNS për trafikun në hyrje. E gjithë kjo niset me komandë git push.

Kubernetes (qëllimisht) siguron vetëm blloqet kryesore të ndërtimit për platforma të tilla, duke e lënë komunitetin të lirë të bëjë punën vetë. Si tha Kelsey Hightower:

Kubernetes është një platformë për ndërtimin e platformave. Pozicioni më i mirë për të filluar, por jo për të përfunduar.

Si rezultat, ne shohim një mori ndërtimesh Kubernetes, si dhe kompani pritëse që po përpiqen të krijojnë PaaS për Kubernetes, si OpenShift dhe Rancher. Mes tregut në rritje Kube-PaaS, Knative, e themeluar në korrik 2018 nga Google dhe Pivotal, po hyn në ring.

Knative ishte një bashkëpunim midis Google dhe Pivotal, me pak ndihmë nga kompani të tjera si IBM, RedHat dhe Solo.im. Ai ofron gjëra të ngjashme PaaS me Kubernetes me mbështetje të nivelit të lartë për aplikacionet e bazuara në kompjuter pa server. Ndryshe nga ndërtimet e Kubernetes, Knative instalohet si një shtesë në çdo grup të pajtueshëm Kubernetes dhe konfigurohet përmes burimeve të përdoruesit.

Çfarë është Knative?

Knative përshkruhet si "Një platformë e bazuar në Kubernetes për shpërndarjen dhe menaxhimin e ngarkesave të punës duke përdorur llogaritjen moderne pa server". Knative, ndërkohë që e faturon veten si një platformë e tillë, në mënyrë aktive shkallëzon automatikisht kontejnerët në proporcion me kërkesat e njëkohshme HTTP. Shërbimet e papërdorura përfundimisht zvogëlohen në zero, duke siguruar shkallëzim sipas kërkesës në stilin pa server.

Knative përbëhet nga një grup kontrolluesish që instalohen në çdo grup Kubernetes dhe ofrojnë aftësitë e mëposhtme:

  • ndërtimi i aplikacioneve me kontejnerë nga kodi burimor (i dhënë nga komponenti Ndërtimi),
  • sigurimi i aksesit në trafikun hyrës në aplikacione (të ofruara nga komponenti Shërbim),
  • dorëzimi dhe shkallëzimi automatik i aplikacioneve sipas kërkesës (sigurohet gjithashtu nga komponenti Shërbim),
  • identifikimi i burimeve të ngjarjeve që çojnë në lëshimin e aplikacioneve (të ofruara nga komponenti Ngjarje).

Një komponent kyç është Shërbimi, i cili ofron sigurimin, shkallëzimin automatik dhe menaxhimin e trafikut për aplikacionet e menaxhuara. Pas instalimit të Knative, ju keni ende akses të plotë në Kubernetes API, duke i lejuar përdoruesit të menaxhojnë aplikacionet i zakonshëm mënyrë, dhe gjithashtu shërben për të korrigjuar shërbimet Knative, duke punuar me të njëjtët primitivë API që përdorin këto shërbime (module, shërbime, etj.).

Me ndihmën e Shërbimit, itinerari i trafikut blu-jeshile është gjithashtu i automatizuar, duke siguruar ndarjen e trafikut midis versioneve të reja dhe të vjetra të aplikacionit kur përdoruesi dorëzon një version të përditësuar të aplikacionit.

Vetë Knative varet nga instalimi i një kontrolluesi të përputhshëm të hyrjes. Në kohën e shkrimit, ky artikull mbështetet Gloo API Gateway и Istio Service Mesh. Ai do të konfigurojë hyrjen e disponueshme për të drejtuar trafikun drejt aplikacioneve të menaxhuara nga Knative.

Istio Service Mesh mund të jetë një varësi e madhe për përdoruesit e Knative që duan ta provojnë pa instaluar panelin e kontrollit Istio, pasi Knative varet vetëm nga porta.

Për këtë arsye, shumica e përdoruesve preferojnë Gloo si një portë për Knative, duke ofruar një grup të ngjashëm aftësish me Istio (për qëllimin e përdorimit vetëm të Knative), duke përdorur gjithashtu dukshëm më pak burime dhe duke pasur kosto më të ulëta operacionale.

Le të testojmë Knative në veprim në stendë. Do të përdor një grup të sapo instaluar që funksionon në GKE:

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

Le të fillojmë instalimin e Knative dhe Gloo. Kjo mund të bëhet në çdo mënyrë:

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

Ne kontrollojmë që të gjitha Pods janë në statusin "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 është gati për rrugëtim, le të krijojmë një shërbim Knative me shkallëzim automatik (le ta quajmë kservice) dhe të drejtojmë trafikun drejt tij.

Shërbimet knative ofrojnë një rrugë më të lehtë për dërgimin e aplikacioneve në Kubernetes sesa modeli konvencional Deployment+Service+Ingress. Ne do të punojmë me këtë shembull:

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

E kopjova këtë në një skedar, më pas e aplikova në grupin tim Kubernetes në këtë mënyrë:

kubectl apply -f ksvc.yaml -n default

Ne mund t'i shikojmë burimet e krijuara nga Knative në grup pas dorëzimit të 'helloworld-go' tonë kservice:

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

Pod me imazhin tonë 'helloworld-go' hapet kur kservice vendoset. Nëse nuk ka trafik, numri i pods do të reduktohet në zero. Dhe anasjelltas, nëse numri i kërkesave të njëkohshme tejkalon një prag të caktuar të konfigurueshëm, numri i pods do të rritet.

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

Knative konfiguron hyrjen e tij duke përdorur një burim të veçantë 'hyrje' në API-në e brendshme të Knative. Gloo e përdor këtë API si konfigurimin e tij për të ofruar veçori të ngjashme me PaaS, duke përfshirë një model vendosjeje blu-jeshile, zbatim automatik të TLS, afate kohore dhe veçori të tjera të avancuara të rrugëtimit.

Pas ca kohësh, shohim që bishtajat tona janë zhdukur (sepse nuk kishte trafik në hyrje):

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

Më në fund do të përpiqemi t'i arrijmë. Ju mund të merrni me lehtësi dhe lehtësi URL-në për Knative Proxy duke përdorur glooctl:

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

Pa instaluar glooctl mund të shihni adresën dhe portin në shërbimin kube:

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

Le të ekzekutojmë disa të dhëna duke përdorur cURL:

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

Knative ofron një pothuajse PaaS për zhvilluesit në krye të Kubernetes-it jashtë kutisë duke përdorur portën API me performancë të lartë të Gloo-së. Ky postim ka gërvishtur vetëm sipërfaqen e opsioneve të gjera të personalizimit dhe veçorive shtesë të Knative. E njëjta gjë me Gloo!

Pavarësisht se Knative është ende një projekt i ri, ekipi i tij lëshon versione të reja çdo gjashtë javë dhe ka filluar zbatimi i veçorive të avancuara, si vendosja automatike e TLS, shkallëzimi automatik i panelit të kontrollit. Ka një shans të mirë që, si rezultat i bashkëpunimit midis kompanive të shumta cloud, dhe si bazë e ofertës së re të Google Cloud Run, Knative mund të bëhet opsioni kryesor për llogaritjen pa server dhe PaaS në Kubernetes. Ndiqni lajmet!

Nga Redaktorët e SouthBridge
Mendimet e lexuesve janë të rëndësishme për ne, prandaj ju kërkojmë të merrni pjesë në një anketë të shkurtër në lidhje me artikujt e ardhshëm rreth Knative, Kubernetes, informatikë pa server:

Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. Hyni, te lutem

Vazhdoni të shkruani artikuj dhe udhëzues rreth kompjuterave Knative dhe pa server?

  • Po të lutem.

  • Jo faleminderit.

28 përdorues votuan. 4 përdorues abstenuan.

Burimi: www.habr.com

Shto një koment