Knative ā€” uz k8s balstÄ«ta platforma-as-a-service ar bezservera atbalstu

Knative ā€” uz k8s balstÄ«ta platforma-as-a-service ar bezservera atbalstu

Kubernetes neapÅ”aubāmi ir kļuvusi par dominējoÅ”o platformu konteineru izvietoÅ”anai. Tas nodroÅ”ina iespēju kontrolēt gandrÄ«z jebko, izmantojot tās API un pielāgotos kontrollerus, kas paplaÅ”ina API ar pielāgotiem resursiem.

Tomēr lietotājam joprojām ir jāpieņem detalizēti lēmumi par to, kā tieÅ”i izvietot, konfigurēt, pārvaldÄ«t un mērogot lietojumprogrammas. Lietojumprogrammu mērogoÅ”anas, aizsardzÄ«bas un trafika plÅ«smas problēmas paliek lietotāja ziņā. Tas atŔķir Kubernetes no parastajām platformām kā pakalpojumam (PaaS), piemēram, Cloud Foundry un Heroku.

Platformām ir vienkārÅ”ots lietotāja interfeiss, un tās ir paredzētas lietojumprogrammu izstrādātājiem, kuri visbiežāk ir iesaistÄ«ti atseviŔķu lietojumprogrammu iestatÄ«Å”anā. MarÅ”rutÄ“Å”anu, izvietoÅ”anu un metriku lietotājam pārskatāmi pārvalda pamatā esoŔā PaaS sistēma.

DarbplÅ«smu no avota lÄ«dz piegādei apstrādā PaaS, izveidojot pielāgotu konteinera attēlu, izvietojot to, iestatot jaunu marÅ”rutu un DNS apakÅ”domēnu ienākoÅ”ajai trafikai. Tas viss tiek palaists pēc komandas git push.

Kubernetes (apzināti) nodroŔina tikai galvenos pamatelementus Ŕādām platformām, ļaujot kopienai paŔai veikt darbu. Kā teica Kelsija Haitaure:

Kubernetes ir platforma platformu veidoŔanai. Labākā pozīcija startam, bet ne finiŔam.

Rezultātā mēs redzam virkni Kubernetes bÅ«vējumu, kā arÄ« mitināŔanas uzņēmumus, kas mēģina izveidot Kubernetes PaaS, piemēram, OpenShift un Rancher. AugoŔā Kube-PaaS tirgÅ« Knative, ko 2018. gada jÅ«lijā nodibināja Google un Pivotal, ienāk ringā.

Knative bija Google un Pivotal sadarbÄ«ba, ar nelielu palÄ«dzÄ«bu no citiem uzņēmumiem, piemēram, IBM, RedHat un Solo.im. Tas piedāvā lÄ«dzÄ«gas PaaS lietas kā Kubernetes ar izcilu atbalstu bezservera skaitļoÅ”anas lietojumprogrammām. AtŔķirÄ«bā no Kubernetes bÅ«vēm, Knative tiek instalēts kā papildinājums jebkurā saderÄ«gā Kubernetes klasterÄ« un konfigurēts, izmantojot lietotāja resursus.

Kas ir Knative?

Knative ir aprakstÄ«ts kā "uz Kubernetes balstÄ«ta platforma darba slodzes nodroÅ”ināŔanai un pārvaldÄ«bai, izmantojot modernu bezservera skaitļoÅ”anu." Knative, lai gan norēķinās par sevi kā Ŕādu platformu, aktÄ«vi veic konteineru automātisko mērogoÅ”anu proporcionāli vienlaicÄ«giem HTTP pieprasÄ«jumiem. Neizmantotie pakalpojumi galu galā tiek samazināti lÄ«dz nullei, nodroÅ”inot bezservera stila mērogoÅ”anu pēc pieprasÄ«juma.

Knative sastāv no kontrolieru komplekta, kas tiek instalēts jebkurā Kubernetes klasterÄ« un nodroÅ”ina Ŕādas iespējas:

  • konteineru lietojumprogrammu veidoÅ”ana no pirmkoda (nodroÅ”ina komponents bÅ«vēt),
  • piekļuves nodroÅ”ināŔana lietojumprogrammām ienākoÅ”ajai trafikai (nodroÅ”ina komponents Serving),
  • lietojumprogrammu piegāde un automātiska mērogoÅ”ana pēc pieprasÄ«juma (nodroÅ”ina arÄ« komponents Serving),
  • identificēt notikumu avotus, kas izraisa lietojumprogrammu palaiÅ”anu (nodroÅ”ina komponents Pasākumi).

Galvenais komponents ir apkalpoÅ”ana, kas nodroÅ”ina pārvaldÄ«to lietojumprogrammu nodroÅ”ināŔanu, automātisko mērogoÅ”anu un trafika pārvaldÄ«bu. Pēc Knative instalÄ“Å”anas jums joprojām ir pilna piekļuve Kubernetes API, ļaujot lietotājiem pārvaldÄ«t lietojumprogrammas parasts veidā, kā arÄ« kalpo Knative pakalpojumu atkļūdoÅ”anai, strādājot ar tiem paÅ”iem API primitÄ«viem, ko izmanto Å”ie pakalpojumi (moduļi, pakalpojumi utt.).

Ar Serving palÄ«dzÄ«bu tiek automatizēta arÄ« zili zaļā trafika marÅ”rutÄ“Å”ana, nodroÅ”inot trafika noŔķirÅ”anu starp jauno un veco aplikācijas versiju, kad lietotājs piegādā atjauninātu aplikācijas versiju.

Knative pati par sevi ir atkarÄ«ga no saderÄ«ga ieejas kontrollera instalÄ“Å”anas. RakstÄ«Å”anas laikā Å”is raksts tiek atbalstÄ«ts Gloo API vārteja Šø Istio Service Mesh. Tas konfigurēs pieejamo ieeju, lai novirzÄ«tu trafiku uz Knative pārvaldÄ«tajām lietojumprogrammām.

Istio Service Mesh var būt liela atkarība no Knative lietotājiem, kuri vēlas to izmēģināt, neinstalējot Istio vadības paneli, jo Knative ir atkarīgs tikai no vārtejas.

Å Ä« iemesla dēļ lielākā daļa lietotāju dod priekÅ”roku Gloo kā vārtejai uz Knative, nodroÅ”inot lÄ«dzÄ«gu iespēju kopumu kā Istio (lai izmantotu tikai Knative), vienlaikus izmantojot ievērojami mazāk resursu un zemākas darbÄ«bas izmaksas.

PārbaudÄ«sim Knative darbÄ«bā uz stenda. Es izmantoÅ”u tikko instalētu klasteru, kas darbojas GKE:

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

Sāksim instalēt Knative un Gloo. To var izdarīt jebkurā secībā:

# стŠ°Š²ŠøŠ¼ 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
# ...

Mēs pārbaudām, vai visi podi ir statusā ā€œDarbojasā€:

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 ir gatavs marÅ”rutÄ“Å”anai, izveidosim automātiskās mērogoÅ”anas pakalpojumu Knative (sauksim to par kservice) un marÅ”rutēsim uz to trafiku.

Knative pakalpojumi nodroÅ”ina vienkārŔāku ceļu lietojumprogrammu piegādei Kubernetes nekā parastais izvietoÅ”anas+pakalpojuma+ieejas modelis. Mēs strādāsim ar Å”o piemēru:

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

Es nokopēju to failā un pēc tam lietoju to savā Kubernetes klasterÄ« Ŕādi:

kubectl apply -f ksvc.yaml -n default

Mēs varam skatīt Knative izveidotos resursus klasterī pēc mūsu 'helloworld-go' piegādes. kservice:

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

Kad tiek izvietots kservice, tiek palaists pods ar mūsu 'helloworld-go' attēlu. Ja nav satiksmes, pākstu skaits tiks samazināts līdz nullei. Un otrādi, ja vienlaicīgu pieprasījumu skaits pārsniedz noteiktu konfigurējamu slieksni, podziņu skaits palielināsies.

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

Knative konfigurē savu ieeju, izmantojot Ä«paÅ”u ā€œieejasā€ resursu iekŔējā Knative API. Gloo izmanto Å”o API kā savu konfigurāciju, lai nodroÅ”inātu PaaS lÄ«dzÄ«gas funkcijas, tostarp zili zaļu izvietoÅ”anas modeli, automātisku TLS izpildi, taimautus un citas uzlabotas marÅ”rutÄ“Å”anas funkcijas.

Pēc kāda laika mēs redzam, ka mÅ«su podi ir pazuduÅ”i (jo nebija ienākoŔās satiksmes):

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

Beidzot mēs centīsimies viņus sasniegt. Izmantojot Knative Proxy, varat viegli un viegli iegūt vietrādi URL glooctl:

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

Bez uzstādītas glooctl adresi un portu var redzēt kube pakalpojumā:

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

Palaidīsim dažus datus, izmantojot cURL:

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

Knative nodroÅ”ina gandrÄ«z PaaS izstrādātājiem papildus jau gatavajam Kubernetes, izmantojot Gloo augstas veiktspējas pilnas steka API vārteju. Å is ieraksts ir tikai saskrāpējis Knative plaŔās pielāgoÅ”anas iespējas un papildu funkcijas. Tas pats ar Gloo!

Neskatoties uz to, ka Knative vēl ir jauns projekts, tā komanda ik pēc seŔām nedēļām izdod jaunas versijas, un ir sākusies uzlaboto funkciju ievieÅ”ana, piemēram, automātiska TLS izvietoÅ”ana, automātiska vadÄ«bas paneļa mērogoÅ”ana. Pastāv liela iespēja, ka vairāku mākoņdatoÅ”anas uzņēmumu sadarbÄ«bas rezultātā un kā Google jaunā Cloud Run piedāvājuma pamatā Knative varētu kļūt par primāro iespēju bezserveru skaitļoÅ”anai un PaaS vietnē Kubernetes. Sekojiet jaunumiem!

No SouthBridge redaktoriem
Mums ir svarÄ«gs lasÄ«tāju viedoklis, tāpēc aicinām piedalÄ«ties nelielā aptaujā saistÄ«bā ar turpmākajiem rakstiem par Knative, Kubernetes, bezserveru skaitļoÅ”anu:

Aptaujā var piedalīties tikai reģistrēti lietotāji. Ielogoties, lūdzu.

Vai man jāturpina rakstīt rakstus un rokasgrāmatas par Knative un bezserveru skaitļoŔanu?

  • Jā, lÅ«dzu.

  • Nē paldies.

Nobalsoja 28 lietotāji. 4 lietotāji atturējās.

Avots: www.habr.com

Pievieno komentāru