Knative - platforma kao usluga temeljena na k8s s podrškom bez poslužitelja

Knative - platforma kao usluga temeljena na k8s s podrškom bez poslužitelja

Kubernetes je bez sumnje 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 svoje API-je prilagođenim resursima.

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

Platforme imaju pojednostavljeno korisničko sučelje i namijenjene su programerima aplikacija koji se najčešće bave postavljanjem pojedinačnih aplikacija. Usmjeravanjem, implementacijom i metrikom upravlja transparentno za korisnika temeljni PaaS sustav.

Tijek rada od izvora do broda upravlja PaaS stvaranjem prilagođene slike spremnika, njegovom implementacijom, postavljanjem nove rute i DNS poddomene za dolazni promet. Sve se to pokreće na naredbu git push.

Kubernetes (namjerno) pruža samo temeljne građevne 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 start, ali ne i za završetak.

Kao rezultat toga, vidimo hrpu Kubernetes buildova, kao i hosting tvrtki koje pokušavaju stvoriti PaaS za Kubernetes, kao što su OpenShift i Rancher. Usred rastućeg Kube-PaaS tržišta, Knative, koji su u srpnju 2018. osnovali Google i Pivotal, ulazi u ring.

Knative je nastao suradnjom između Googlea i Pivotala, uz malu pomoć drugih tvrtki kao što su IBM, RedHat i Solo.im. Nudi slične PaaS stvari kao Kubernetes s vrhunskom podrškom za aplikacije temeljene na računalstvu bez poslužitelja. Za razliku od Kubernetes verzija, Knative se instalira kao dodatak na bilo koji kompatibilni Kubernetes klaster i konfigurira putem korisničkih resursa.

Što je Knative?

Knative je opisan kao "Platforma temeljena na Kubernetesu za isporuku i upravljanje radnim opterećenjima koristeći moderno računalstvo bez poslužitelja." Knative, iako se predstavlja kao takva platforma, aktivno automatski skalira spremnike proporcionalno istodobnim HTTP zahtjevima. Neiskorištene usluge na kraju se smanjuju na nulu, pružajući skaliranje na zahtjev u stilu bez poslužitelja.

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 (koji pruža komponenta Izgraditi),
  • omogućavanje pristupa dolaznom prometu aplikacijama (omogućuje komponenta Služenje),
  • isporuka i automatsko skaliranje aplikacija na zahtjev (također pruža komponenta Služenje),
  • identificiranje izvora događaja koji dovode do pokretanja aplikacije (koje pruža komponenta Eventing).

Ključna komponenta je posluživanje, koje pruža pružanje usluga, automatsko skaliranje i upravljanje prometom za upravljane aplikacije. Nakon instaliranja Knativea, i dalje imate potpuni pristup Kubernetes API-ju, što korisnicima omogućuje upravljanje aplikacijama obična način, a također služi za otklanjanje pogrešaka Knative usluga, radeći s istim API primitivima koje te usluge koriste (moduli, usluge itd.).

Uz pomoć Servinga, plavo-zeleno usmjeravanje prometa je također automatizirano, osiguravajući odvajanje 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 ovaj članak 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 korisnike Knativea koji ga žele isprobati bez instaliranja upravljačke ploče Istio, budući da Knative ovisi samo o pristupniku.

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

Isprobajmo Knative u akciji na postolju. 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 učiniti 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 jesu li sve jedinice u statusu "Radi":

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 usmjeravanje, kreirajmo Knative uslugu s automatskim skaliranjem (nazovimo je kservice) i usmjerimo promet na nju.

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 datoteku, a zatim primijenio na svoj Kubernetes klaster na ovaj način:

kubectl apply -f ksvc.yaml -n default

Možemo vidjeti resurse koje je stvorio 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 s našom slikom 'helloworld-go' pokreće se kada se implementira kservice. Ako nema prometa, broj mahuna će se smanjiti na nulu. I obrnuto, ako broj istodobnih zahtjeva premaši određeni konfigurabilni prag, broj grupa će se povećati.

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

Knative konfigurira svoj ulaz pomoću posebnog 'ingress' resursa u internom Knative API-ju. Gloo koristi ovaj API kao svoju konfiguraciju za pružanje značajki sličnih PaaS-u, uključujući plavo-zeleni model implementacije, automatsku provedbu TLS-a, vremenska ograničenja i druge napredne značajke usmjeravanja.

Nakon nekog vremena vidimo da su naše jedinice nestale (jer nije bilo dolaznog prometa):

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

Napokon ćemo pokušati doći do njih. Možete lako i jednostavno dobiti URL za Knative Proxy pomoću glooctl:

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

Bez instaliranog glooctl možete vidjeti adresu i port 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 povrh gotovog Kubernetesa koristeći Gloo API pristupnik visokih performansi s punim nizom. Ovaj post samo je zagrebao po površini opsežnih mogućnosti prilagodbe i dodatnih značajki Knative. Isto s Gloo!

Unatoč činjenici da je Knative još uvijek mlad projekt, njegov tim izdaje nove verzije svakih šest tjedana, a počela je i implementacija naprednih značajki, poput automatske implementacije TLS-a, automatskog skaliranja upravljačke ploče. Postoji dobra šansa da bi, kao rezultat suradnje između više kompanija u oblaku, i kao osnova Googleove nove Cloud Run ponude, Knative mogao postati primarna opcija za računalstvo bez poslužitelja i PaaS na Kubernetesu. Pratite novosti!

Od urednika SouthBridgea
Mišljenja čitatelja su nam važna, stoga vas molimo da sudjelujete u kratkoj anketi vezanoj za buduće članke o Knative, Kubernetes, serverless computing:

U anketi mogu sudjelovati samo registrirani korisnici. Prijaviti se, molim.

Trebam li nastaviti pisati članke i vodiče o Knative i računalstvu bez poslužitelja?

  • Da molim.

  • Ne hvala.

Glasovalo je 28 korisnika. Suzdržana su bila 4 korisnika.

Izvor: www.habr.com

Dodajte komentar