Knative - platforma kot storitev na osnovi k8s s podporo brez strežnika

Knative - platforma kot storitev na osnovi k8s s podporo brez strežnika

Kubernetes je nedvomno postal prevladujoča platforma za uvajanje vsebnikov. Zagotavlja možnost nadzora skoraj vsega z uporabo svojih API-jev in krmilnikov po meri, ki razširjajo API-je z viri po meri.

Vendar mora uporabnik še vedno sprejemati podrobne odločitve o tem, kako natančno razmestiti, konfigurirati, upravljati in prilagajati aplikacije. Vprašanja skaliranja aplikacij, zaščite in pretoka prometa ostajajo v lasti uporabnika. To ločuje Kubernetes od običajnih platform kot storitev (PaaS), kot sta Cloud Foundry in Heroku.

Platformi imata poenostavljen uporabniški vmesnik in sta namenjeni razvijalcem aplikacij, ki se največkrat ukvarjajo z nastavitvijo posameznih aplikacij. Usmerjanje, uvajanje in meritve pregledno za uporabnika upravlja osnovni sistem PaaS.

Potek dela od vira do pošiljanja upravlja PaaS tako, da ustvari sliko vsebnika po meri, jo uvede, nastavi novo pot in poddomeno DNS za dohodni promet. Vse to se zažene na ukaz git push.

Kubernetes (namenoma) zagotavlja samo osnovne gradnike za takšne platforme, skupnosti pa prepušča, da sama opravi delo. kako je rekla Kelsey Hightower:

Kubernetes je platforma za gradnjo platform. Najboljši položaj za začetek, vendar ne za zaključek.

Posledično vidimo kup gradenj Kubernetes, pa tudi gostiteljska podjetja, ki poskušajo ustvariti PaaS za Kubernetes, kot sta OpenShift in Rancher. Sredi rastočega trga Kube-PaaS vstopa v ring Knative, ki sta ga julija 2018 ustanovila Google in Pivotal.

Knative je bil rezultat sodelovanja med Googlom in Pivotalom, z malo pomoči drugih podjetij, kot so IBM, RedHat in Solo.im. Ponuja podobne PaaS stvari kot Kubernetes z vrhunsko podporo za brezstrežniške računalniške aplikacije. Za razliko od gradenj Kubernetes je Knative nameščen kot dodatek v katero koli združljivo gručo Kubernetes in konfiguriran prek uporabniških virov.

Kaj je Knative?

Knative je opisan kot "Platforma, ki temelji na Kubernetesu za zagotavljanje in upravljanje delovnih obremenitev z uporabo sodobnega brezstrežniškega računalništva." Čeprav se Knative predstavlja kot taka platforma, vsebnike aktivno samodejno spreminja v sorazmerju s sočasnimi zahtevami HTTP. Neuporabljene storitve se sčasoma zmanjšajo na nič, kar zagotavlja skaliranje na zahtevo v slogu brez strežnika.

Knative je sestavljen iz niza krmilnikov, ki se namestijo v katero koli gručo Kubernetes in zagotavljajo naslednje zmogljivosti:

  • izdelava kontejnerskih aplikacij iz izvorne kode (ki jo zagotavlja komponenta Zgradite),
  • zagotavljanje dostopa do dohodnega prometa aplikacijam (zagotavlja komponenta V službi),
  • dostava in samodejno skaliranje aplikacij na zahtevo (zagotavlja tudi komponenta V službi),
  • prepoznavanje virov dogodkov, ki vodijo do zagonov aplikacij (zagotavlja komponenta Dogajanje).

Ključna komponenta je Serving, ki zagotavlja oskrbo, samodejno skaliranje in upravljanje prometa za upravljane aplikacije. Po namestitvi Knative imate še vedno poln dostop do API-ja Kubernetes, kar uporabnikom omogoča upravljanje aplikacij navadna in služi tudi za odpravljanje napak v storitvah Knative, ki delujejo z istimi API-ji, ki jih te storitve uporabljajo (moduli, storitve itd.).

S pomočjo Servinga je avtomatizirano tudi modro-zeleno usmerjanje prometa, ki zagotavlja ločevanje prometa med novo in staro različico aplikacije, ko uporabnik dostavi posodobljeno različico aplikacije.

Sam Knative je odvisen od namestitve združljivega vstopnega krmilnika. V času pisanja je ta članek podprt Gloo API Gateway и Istio Service Mesh. Konfiguriral bo razpoložljiv vhod za usmerjanje prometa v aplikacije, ki jih upravlja Knative.

Istio Service Mesh je lahko velika odvisnost za uporabnike Knative, ki ga želijo preizkusiti brez namestitve nadzorne plošče Istio, saj je Knative odvisen le od prehoda.

Iz tega razloga ima večina uporabnikov raje Gloo kot prehod do Knative, ki zagotavlja podoben nabor zmogljivosti kot Istio (z namenom uporabe samo Knative), hkrati pa uporablja bistveno manj virov in ima nižje operativne stroške.

Preizkusimo Knative v akciji na stojalu. Uporabil bom sveže nameščeno gručo, ki se izvaja v GKE:

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

Začnimo nameščati Knative in Gloo. To je mogoče storiti v poljubnem vrstnem redu:

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

Preverimo, ali so vsi Podi v stanju »V teku«:

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 pripravljen za usmerjanje, ustvarimo storitev Knative s samodejnim skaliranjem (imenujmo jo kservice) in usmerimo promet vanjo.

Storitve Knative zagotavljajo lažjo pot do dostave aplikacij v Kubernetes kot običajni model Deployment+Service+Ingress. Delali bomo s tem primerom:

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

To sem kopiral v datoteko in nato uporabil v svoji gruči Kubernetes na ta način:

kubectl apply -f ksvc.yaml -n default

Ogledamo si lahko vire, ki jih je ustvaril Knative v gruči po dostavi našega '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 z našo sliko 'helloworld-go' se zažene, ko je uvedena storitev k. Če ni prometa, bo število podov zmanjšano na nič. In obratno, če število sočasnih zahtev preseže določen nastavljiv prag, se bo število sklopov povečalo.

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

Knative konfigurira svoj vstop z uporabo posebnega vira 'ingress' v internem API-ju Knative. Gloo uporablja ta API kot svojo konfiguracijo za zagotavljanje funkcij, podobnih PaaS, vključno z modro-zelenim modelom uvajanja, samodejnim uveljavljanjem TLS, časovnimi omejitvami in drugimi naprednimi funkcijami usmerjanja.

Čez nekaj časa vidimo, da so naše enote izginile (ker ni bilo dohodnega 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

Končno jih bomo poskušali doseči. URL za Knative Proxy lahko preprosto in preprosto dobite z uporabo glooctl:

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

Brez nameščenega glooctl naslov in vrata lahko vidite v storitvi 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

Zaženimo nekaj podatkov z uporabo cURL:

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

Knative ponuja skoraj PaaS za razvijalce poleg že pripravljenega Kubernetesa z uporabo Gloo-jevega visoko zmogljivega API-prehoda s polnim skladom. Ta objava je samo opraskala površino obsežnih možnosti prilagajanja in dodatnih funkcij Knative. Enako z Gloo!

Kljub temu, da je Knative še vedno mlad projekt, njegova ekipa izda nove različice vsakih šest tednov, začelo pa se je tudi uvajanje naprednih funkcij, kot je samodejna uvedba TLS, samodejno skaliranje nadzorne plošče. Obstaja velika možnost, da bi Knative zaradi sodelovanja med več podjetji v oblaku in kot osnova Googlove nove ponudbe Cloud Run postal primarna možnost za brezstrežniško računalništvo in PaaS na Kubernetes. Spremljajte novice!

Od urednikov SouthBridgea
Mnenja bralcev so nam pomembna, zato vas prosimo, da sodelujete v kratki anketi, ki se nanaša na prihodnje članke o Knative, Kubernetes, brezstrežniškem računalništvu:

V anketi lahko sodelujejo samo registrirani uporabniki. Prijaviti se, prosim.

Še naprej pišete članke in vodnike o Knative in brezstrežniškem računalništvu?

  • Da, prosim.

  • Ne hvala.

Glasovalo je 28 uporabnikov. 4 uporabnika sta se vzdržala.

Vir: www.habr.com

Dodaj komentar