Knative — platformë si shërbim e bazuar në k8s me mbështetje për serverless

Knative — platformë si shërbim e bazuar në k8s me mbështetje për serverless

Platforma dominuese për shpërndarjen e kontejnerëve padyshim është Kubernetes. Ajo ofron mundësinë për të menaxhuar praktikisht gjithçka, duke përdorur API-të e saj dhe kontrollorët e përdoruesit që zgjasin API-në e saj përmes burimeve të personalizuara.

Megjithatë, përdoruesi ende duhet të marrë vendime të detajuara rreth se si të shpërndajë, konfigurojë, menaxhojë dhe shkallëzoni aplikacionet. Pyetjet për shkallëzimin e aplikacionit, sigurimin dhe kalimin e trafikut mbeten në diskrecionin e përdoruesit. Kjo është ajo që e dallon Kubernetes nga platforma të zakonshme "shërbim si platformë" (PaaS), si Cloud Foundry dhe Heroku.

Platformat ofrojnë një ndërfaqe të thjeshtuar përdoruesi, të orientuar ndaj zhvilluesve të aplikacioneve, të cilët shpesh merren me konfigurimin e aplikacioneve individuale. Rrugëtimi, shpërndarja dhe metrikat menaxhohen në mënyrë të transparentë për përdoruesin nga sistemi bazë PaaS.

Procesi i punës “kode burimi – dorëzim” përpunon PaaS duke krijuar një imazh të personalizuar të kontejnerit, duke e shpërndarë, duke konfiguruar një rrugë të re dhe një subdomen DNS për trafikun e ardhshëm. Të gjitha këto aktivizohen me një komandë. git push.

Në Kubernetes (në mënyrë të qartë) ofrohen vetëm blloqet kryesore për këto platforma, duke i dhënë komunitetit mundësinë për të bërë këtë punë vetë. Si tha Kelsey Hightower:

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

Si rezultat, ne shohim një shumëllojshmëri ndërtimesh Kubernetes dhe gjithashtu ofruesish të hostimit që përpiqen të krijojnë PaaS për Kubernetes, si për shembull OpenShift dhe Rancher. Në sfondin e tregut në rritje të Kube-PaaS, në ring del Knative, i krijuar në korrik 2018 nga kompanitë Google dhe Pivotal.

Knative doli si rezultat i bashkëpunimit midis Google dhe Pivotal, me ndihmë të vogël nga kompani të tjera si IBM, RedHat dhe Solo.im. Ai ofron të ngjashme me PaaS për Kubernetes me mbështetje të klasit të parë për aplikacionet e bazuara në kompjuterizim pa server. Në dallim nga ndërtimet Kubernetes, Knative instalohet si një shtesë në çdo grup Kubernetes të përshtatshëm dhe konfigurohet përmes burimeve të personalizuara.

Çfarë është Knative?

Knative përshkruhet si "një platformë e bazuar në Kubernetes për përmirësimin dhe menaxhimin e ngarkesave të punës me ndihmën e computing-ut modern pa serverë". Duke shpallur veten si një platformë të tillë, Knative automatikisht shkallëzon konteinerët në përpjesëtim me kërkesat HTTP të njëkohshme. Shërbimet e papërdorura përfundimisht shkallëzohen deri në zero, duke ofruar shkallëzim sipas kërkesës në stilin e computing-ut pa serverë.

Knative përbëhet nga një grup kontrolluesish që instalohen në çdo grup Kubernetes dhe ofrojnë këto mundësi:

  • ndërtimin e aplikacioneve të konteinerizuara nga kodi burimor (sigurohet nga komponenti Build),
  • ofrimin e aksesit të trafikut të ardhshëm në aplikacione (sigurohet nga komponenti Serving),
  • shpërndarja dhe shkallëzimi automatik i aplikacioneve sipas kërkesës (po ashtu sigurohet nga komponenti Serving),
  • përcaktimi i burimeve të ngjarjeve që përfundojnë në aktivizimin e aplikacioneve (sigurohet nga komponenti Eventing).

Një komponent kyç është Serving, i cili ofron shpërndarje, përmasim automatik dhe menaxhim të kalimit të trafikut për aplikacione të menaxhuara. Pas instalimit, Knative ende ruan qasjen e plotë në API-në e Kubernetes, duke lejuar përdoruesit të menaxhojnë aplikacionet. të zakonshëm në mënyrë, dhe gjithashtu shërben për të debuguar shërbimet Knative, duke punuar me njëjtat primitive API që këto shërbime përdorin (module, shërbime, etj.).

Me anë të Serving, gjithashtu automatizohet rregullimi blue-green i trafikut, duke siguruar ndarjen e trafikut midis versioneve të reja dhe të vjetra të aplikacionit kur përdoruesi shpërndan një version të azhurnuar të aplikacionit.

Knative vetë varet nga instalimi i një kontrolluesi ingress të përputhshëm. Në momentin e shkruar, mbështeten Gloo API Gateway dhe Istio Service Mesh. Ai do të konfigurojë një ingress të disponueshëm për të rregulluar trafikun drejt aplikacioneve të menaxhuara përmes Knative.

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

Për këtë arsye, shumica e përdoruesve preferojnë Gloo si një kalim për Knative, duke ofruar një grup të ngjashëm mundësish me Istio (kur flasim për përdorimin e vetëm Knative), si dhe duke përdorur ndjeshëm më pak burime dhe duke pasur kostot më të ulëta operuese.

Le të kontrollojmë Knative në veprim në një skenë. Unë do të përdor një kluster të sapoinstaluar, të nisur në GKE:

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

Të fillojmë instalimin e Knative dhe Gloo. Kjo mund të bëhet në çdo rend:

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

Po kontrollojmë që të gjithë 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 ruterim, le të krijojmë një shërbim Knative që shkallëzohet automatikisht (ta quajmë kservice) dhe ta drejtojmë trafikun atij.

Shërbimet Knative ofrojnë një rrugë më të lehtë për të shpërndarë aplikacione në Kubernetes — krahasuar me modelin e zakonshëm Deployment+Service+Ingress. Do të punojmë me një shembull të tillë:

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, pastaj e aplikova në klastrin tim Kubernetes në këtë mënyrë:

kubectl apply -f ksvc.yaml -n default

Mund të shohim burimet e krijuara nga Knative në klasër pas shpërndarjes 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

Pod me imazhin tonë ‘helloworld-go’ niset gjatë shpërndarjes së kservice. Nëse nuk ka trafik — numri i pod'ëve do të reduktohet në zero. Përkundrazi, nëse numri i kërkesave njëkohëshe tejkalon një vlerë prag të caktueshme — numri i pod'ëve do të rritet.

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

Knative konfiguron ingress-in e tij me përdorimin e një resursi të veçantë 'ingress' në API-në e brendshme Knative. Gloo e merr këtë API si konfigurimin e tij për të ofruar karakteristika tipike të PaaS, duke përfshirë modelin e implementimit blue-green, aplikimin automatik të TLS, kohëzgjatjet dhe tipare të tjera të avancuara të trajtimit të trafikut.

Pas një kohe, ne vëmë re se pod-et tona janë zhdukur (për shkak se nuk kishte trafik të ardhshëm):

kubectl get pod -n default

Nuk ka burime të gjetura.
kubectl get deployment -n default
EMRI                             DESHIROHEN   AKTUARE   TË PERSHTATSHME   TË DISPONUESHME   MOSHA
helloworld-go-fjp75-deployment   0         0         0            0           9m46s

Në fund, do të përpiqemi të arrijmë deri tek ata. Të marrim URL-në për Knative Proxy është e lehtë dhe pa probleme me ndihmën e glooctl:

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

Pa instaluar glooctl mund ta shikoni adresën dhe portin në kube service:

kubectl get svc -n gloo-system knative-external-proxy
EMRI                     LLOJI           CLUSTER-IP     EXTERNAL-IP      PORT(E)                      MOSHA
knative-external-proxy   LoadBalancer   10.16.11.157   35.190.151.188   80:32168/TCP,443:30729/TCP   77m

Do të dërgojmë disa të dhëna duke përdorur cURL:

curl -H "Host: helloworld-go.default.example.com" http://35.190.151.188
Përshëndetje përdorues i Knative!

Knative ofron pothuajse-PaaS për zhvilluesit mbi Kubernetes 'nga kutia', duke përdorur një portë API të plotë, me performancë të lartë Gloo. Ky shënim prek vetëm pak si një numër të gjerë mundësish që Knative ofron për personalizim, si dhe funksione shtesë. Po ashtu me Gloo!

Megjithëse Knative është akoma një projekt i ri, ekipi i tij lëshon versione të reja çdo gjashtë javë, duke filluar implementimin e karakteristikave të avancuara, si automatizimi i vendosjes së TLS, automatizimi i shkallëzimit të panelit të kontrollit. Ka një probabilitet të lartë që, si rezultat i bashkëpunimit të shumë kompanive cloud, si dhe si një bazë për ofertën e re Cloud Run nga Google, Knative mund të bëhet opsioni kryesor për ofrimin e llogarive pa server dhe PaaS në Kubernetes. Qëndroni të informuar!

Nga redaksia e SouthBridge
Na intereson mendimi i lexuesve, prandaj ju kërkojmë të merrni pjesë në një anketë të vogël, në lidhje me artikujt e ardhshëm mbi Knative, Kubernetes, dhe llogaritë pa server:

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

A duhet të vazhdojmë të shkruajmë artikuj dhe guida mbi Knative dhe llogaritë pa server?

  • Po, ju lutem.

  • Faleminderit, nuk është nevojë.

28 përdorues kanë votuar. 4 përdorues janë abstenues.

Burimi: habr.com

Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë 🔥 Bli një hosting të besueshëm për faqet me mbrojtje DDoS, VPS VDS serverë | ProHoster