Knative - k8s-bazirana platforma-kao-usluga sa podrškom bez servera

Knative - k8s-bazirana platforma-kao-usluga sa podrškom bez servera

Kubernetes je nesumnjivo postao dominantna platforma za implementaciju kontejnera. Pruža mogućnost kontrole gotovo svega koristeći svoje API-je i prilagođene kontrolere koji proširuju njegove API-je prilagođenim resursima.

Međutim, korisnik i dalje mora donijeti detaljne odluke o tome kako točno implementirati, konfigurirati, upravljati i skalirati aplikacije. Pitanja skaliranja aplikacije, zaštite i protoka prometa ostaju na diskreciji korisnika. Ovo izdvaja Kubernetes od konvencionalnih platformi kao usluge (PaaS), kao što su Cloud Foundry i Heroku.

Platforme imaju pojednostavljeno korisničko sučelje i namijenjene su programerima aplikacija koji su najčešće uključeni u postavljanje pojedinačnih aplikacija. Rutiranje, implementacija i metrika se upravljaju transparentno za korisnika pomoću osnovnog PaaS sistema.

Radnim tokom od izvora do otpreme upravlja PaaS kreiranjem prilagođene slike kontejnera, njenom implementacijom, postavljanjem nove rute i DNS poddomena za dolazni saobraćaj. Sve ovo se pokreće na komandu git push.

Kubernetes (namjerno) pruža samo osnovne blokove za takve platforme, ostavljajući zajednici slobodu da sama obavi posao. Kako rekla je Kelsey Hightower:

Kubernetes je platforma za izgradnju platformi. Najbolja pozicija za početak, ali ne i završetak.

Kao rezultat toga, vidimo gomilu Kubernetes verzija, kao i hosting kompanije koje pokušavaju da kreiraju PaaS za Kubernetes, kao što su OpenShift i Rancher. Usred rastućeg tržišta Kube-PaaS-a, Knative, koji su u julu 2018. osnovali Google i Pivotal, ulazi u ring.

Knative je bila saradnja između Google-a i Pivotal-a, uz malu pomoć drugih kompanija kao što su IBM, RedHat i Solo.im. Nudi slične PaaS stvari kao i Kubernetes sa vrhunskom podrškom za aplikacije zasnovane na računarstvu bez servera. Za razliku od Kubernetes buildova, Knative se instalira kao dodatak na bilo koji kompatibilan Kubernetes klaster i konfiguriše se putem korisničkih resursa.

Šta je Knative?

Knative je opisan kao „Platforma zasnovana na Kubernetesu za isporuku i upravljanje radnim opterećenjima koristeći moderno računarstvo bez servera“. Knative, dok se naplaćuje kao takva platforma, aktivno automatski skalira kontejnere srazmjerno istovremenim HTTP zahtjevima. Neiskorištene usluge se na kraju smanjuju na nulu, pružajući skaliranje na zahtjev u stilu bez servera.

Knative se sastoji od skupa kontrolera koji se instaliraju u bilo koji Kubernetes klaster i pružaju sljedeće mogućnosti:

  • izgradnja kontejnerskih aplikacija iz izvornog koda (obezbeđena od strane komponente graditi),
  • omogućavanje pristupa dolaznom saobraćaju aplikacijama (obezbeđuje komponenta služenje),
  • isporuku i automatsko skaliranje aplikacija na zahtjev (također osigurava komponenta služenje),
  • identificiranje izvora događaja koji dovode do pokretanja aplikacije (obezbeđuje komponenta Eventing).

Ključna komponenta je Serving, koja obezbjeđuje obezbjeđivanje, automatsko skaliranje i upravljanje prometom za upravljane aplikacije. Nakon instaliranja Knative-a, i dalje imate pun pristup Kubernetes API-ju, omogućavajući korisnicima da upravljaju aplikacijama običan način, a služi i za otklanjanje grešaka u Knative servisima, radeći sa istim API primitivima koje koriste ovi servisi (moduli, servisi, itd.).

Uz pomoć Servinga, plavo-zeleno rutiranje prometa je također automatizirano, osiguravajući razdvajanje prometa između nove i stare verzije aplikacije kada korisnik isporuči ažuriranu verziju aplikacije.

Sam Knative ovisi o instaliranju kompatibilnog ulaznog kontrolera. U vrijeme pisanja ovog članka je podržan Gloo API Gateway и Istio Service Mesh. Konfigurirat će dostupni ulaz za usmjeravanje prometa na aplikacije kojima upravlja Knative.

Istio Service Mesh može biti velika ovisnost za Knative korisnike koji žele da ga isprobaju bez instaliranja Istio kontrolne ploče, budući da Knative ovisi samo o gatewayu.

Iz tog razloga, većina korisnika preferira Gloo kao pristupnik Knative-u, pružajući sličan skup mogućnosti kao Istio (u svrhu korištenja samo Knative), dok također koristi znatno manje resursa i ima niže operativne troškove.

Testirajmo Knative u akciji na štandu. Koristit ću svježe instalirani klaster koji radi u GKE-u:

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

Počnimo instalirati Knative i Gloo. To se može uraditi bilo kojim redoslijedom:

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

Provjeravamo da li su svi podovi u statusu "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 je spreman za rutiranje, napravimo Knative servis za automatsko skaliranje (nazovimo ga kservice) i usmjerimo promet do njega.

Knative usluge pružaju lakši put do isporuke aplikacija u Kubernetes od konvencionalnog modela Deployment+Service+Ingress. Radit ćemo s ovim primjerom:

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

Kopirao sam ovo u fajl, a zatim ga primenio na svoj Kubernetes klaster na ovaj način:

kubectl apply -f ksvc.yaml -n default

Možemo vidjeti resurse koje je kreirao Knative u klasteru nakon isporuke našeg '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 sa našom slikom 'helloworld-go' se pokreće kada se kservice postavi. Ako nema saobraćaja, broj mahuna će se smanjiti na nulu. I obrnuto, ako broj simultanih zahtjeva premašuje određeni konfigurabilni prag, broj podova će se povećati.

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

Knative konfigurira svoj ulaz koristeći poseban 'ingress' resurs u internom Knative API-ju. Gloo koristi ovaj API kao svoju konfiguraciju za pružanje funkcija sličnih PaaS-u, uključujući plavo-zeleni model implementacije, automatsku primjenu TLS-a, vremenska ograničenja i druge napredne funkcije rutiranja.

Nakon nekog vremena vidimo da su naše mahune nestale (jer nije bilo dolaznog saobraćaja):

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

Konačno ćemo pokušati doći do njih. Možete lako i lako dobiti URL za Knative Proxy koristeći glooctl:

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

Bez instaliranog glooctl adresu i port možete vidjeti u kube servisu:

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

Pokrenimo neke podatke koristeći cURL:

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

Knative pruža gotovo PaaS za programere na vrhu već pripremljenih Kubernetes-a koristeći Gloo-ov high-performance, full-stack API gateway. Ovaj post je samo zagrebao površinu Knative-ovih opsežnih opcija prilagođavanja i dodatnih funkcija. Isto i sa Gloo!

Unatoč činjenici da je Knative još uvijek mlad projekt, njegov tim objavljuje nove verzije svakih šest sedmica, a počela je i implementacija naprednih funkcija, poput automatskog TLS implementacije, automatskog skaliranja kontrolne ploče. Postoji velika šansa da bi, kao rezultat saradnje između više kompanija u oblaku, i kao osnova Googleove nove Cloud Run ponude, Knative mogao postati primarna opcija za računarstvo bez servera i PaaS na Kubernetesu. Pratite vijesti!

Od urednika SouthBridgea
Mišljenja čitalaca su nam važna, pa vas molimo da učestvujete u kratkoj anketi vezanoj za buduće članke o Knative, Kubernetes, računarstvu bez servera:

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite semolim.

Trebam li nastaviti pisati članke i vodiče o Knative i računarstvu bez servera?

  • Da molim.

  • Ne hvala.

Glasalo je 28 korisnika. 4 korisnika je bila uzdržana.

izvor: www.habr.com

Dodajte komentar