Knative – platforma založená na k8s jako služba s podporou bez serveru

Knative – platforma založená na k8s jako služba s podporou bez serveru

Kubernetes se nepochybně stal dominantní platformou pro nasazení kontejnerů. Poskytuje možnost ovládat téměř cokoli pomocí svých rozhraní API a vlastních řadičů, které rozšiřují jeho rozhraní API o vlastní zdroje.

Uživatel však stále musí učinit podrobná rozhodnutí o tom, jak přesně nasadit, nakonfigurovat, spravovat a škálovat aplikace. Otázky škálování aplikací, ochrany a toku provozu zůstávají na uvážení uživatele. To odlišuje Kubernetes od konvenčních platforem jako služba (PaaS), jako jsou Cloud Foundry a Heroku.

Platformy mají zjednodušené uživatelské rozhraní a jsou zaměřeny na vývojáře aplikací, kteří se nejčastěji podílejí na nastavování jednotlivých aplikací. Směrování, nasazení a metriky jsou pro uživatele transparentně spravovány základním systémem PaaS.

Pracovní postup od zdroje k odeslání zajišťuje PaaS vytvořením vlastního obrazu kontejneru, jeho nasazením, nastavením nové trasy a subdomény DNS pro příchozí provoz. To vše se spouští na povel git push.

Kubernetes (záměrně) poskytuje pouze základní stavební bloky pro takové platformy, takže komunita může dělat práci sama. Jak řekla Kelsey Hightower:

Kubernetes je platforma pro vytváření platforem. Nejlepší pozice pro začátek, ale ne pro dokončení.

V důsledku toho vidíme spoustu sestavení Kubernetes a také hostingové společnosti, které se snaží vytvořit PaaS pro Kubernetes, jako jsou OpenShift a Rancher. Uprostřed rostoucího trhu Kube-PaaS vstupuje do ringu společnost Knative, založená v červenci 2018 společnostmi Google a Pivotal.

Knative byla spolupráce mezi Googlem a Pivotal, s malou pomocí dalších společností, jako je IBM, RedHat a Solo.im. Nabízí podobné věci PaaS jako Kubernetes se špičkovou podporou aplikací založených na bezserverových počítačích. Na rozdíl od sestavení Kubernetes se Knative instaluje jako doplněk na jakýkoli kompatibilní cluster Kubernetes a konfiguruje se prostřednictvím uživatelských prostředků.

Co je Knative?

Knative je popisován jako „platforma založená na Kubernetes pro poskytování a správu pracovních zátěží pomocí moderních počítačů bez serveru“. Knative, zatímco se účtuje jako taková platforma, aktivně automaticky škáluje kontejnery v poměru k souběžným HTTP požadavkům. Nepoužívané služby se nakonec zmenšují na nulu a poskytují škálování bez serveru na vyžádání.

Knative se skládá ze sady řadičů, které se instalují do libovolného clusteru Kubernetes a poskytují následující možnosti:

  • vytváření kontejnerových aplikací ze zdrojového kódu (poskytovaného komponentou Vytvořit),
  • poskytování přístupu k příchozímu provozu aplikací (poskytované komponentou Porce),
  • dodání a automatické škálování aplikací na vyžádání (také poskytované komponentou Porce),
  • identifikace zdrojů událostí vedoucích ke spuštění aplikace (poskytované komponentou Události).

Klíčovou komponentou je Serving, která poskytuje zřizování, automatické škálování a správu provozu pro spravované aplikace. Po instalaci Knative máte stále plný přístup k rozhraní Kubernetes API, které uživatelům umožňuje spravovat aplikace obyčejný způsobem a také slouží k ladění služeb Knative, přičemž pracuje se stejnými primitivy API, které tyto služby používají (moduly, služby atd.).

S pomocí Serving je také automatizováno modro-zelené směrování provozu, což zajišťuje oddělení provozu mezi novými a starými verzemi aplikace, když uživatel dodá aktualizovanou verzi aplikace.

Samotný Knative závisí na instalaci kompatibilního řadiče vstupu. V době psaní tohoto článku je podporován Gloo API brána и Istio Service Mesh. Nakonfiguruje dostupný vstup pro směrování provozu do aplikací spravovaných Knative.

Istio Service Mesh může být velkou závislostí pro uživatele Knative, kteří to chtějí vyzkoušet bez instalace ovládacího panelu Istio, protože Knative závisí pouze na bráně.

Z tohoto důvodu většina uživatelů preferuje Gloo jako bránu do Knative, která poskytuje podobnou sadu schopností jako Istio (za účelem použití pouze Knative), přičemž také využívá výrazně méně zdrojů a má nižší provozní náklady.

Pojďme otestovat Knative v akci na stánku. Budu používat čerstvě nainstalovaný cluster běžící v GKE:

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

Začněme instalovat Knative a Gloo. To lze provést v libovolném pořadí:

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

Zkontrolujeme, zda jsou všechny moduly ve stavu „Spuštěno“:

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 připraveno na směrování, vytvořme službu Knative s automatickým škálováním (říkejme jí kservice) a směrujte do ní provoz.

Knativní služby poskytují snazší cestu k doručování aplikací do Kubernetes než konvenční model Deployment+Service+Ingress. Budeme pracovat s tímto příkladem:

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

Zkopíroval jsem to do souboru a poté jsem to použil na můj cluster Kubernetes takto:

kubectl apply -f ksvc.yaml -n default

Můžeme si prohlédnout zdroje vytvořené Knative v clusteru po doručení našeho „helloworld-go“ kservice:

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

Modul s naším obrázkem 'helloworld-go' se spustí při nasazení služby kservice. Pokud není provoz, počet podů se sníží na nulu. A naopak, pokud počet současných požadavků překročí určitou konfigurovatelnou hranici, počet podů se zvýší.

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

Knative konfiguruje svůj vstup pomocí speciálního zdroje 'ingress' v interním Knative API. Gloo používá toto API jako svou konfiguraci k poskytování funkcí podobných PaaS, včetně modrozeleného modelu nasazení, automatického vynucení TLS, časových limitů a dalších pokročilých funkcí směrování.

Po nějaké době vidíme, že naše moduly zmizely (protože nebyl žádný příchozí provoz):

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

Nakonec se k nim pokusíme dostat. Můžete snadno a snadno získat adresu URL pro Knative Proxy pomocí glooctl:

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

Bez nainstalovaného glooctl můžete vidět adresu a port ve službě 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

Spusťte některá data pomocí cURL:

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

Knative poskytuje vývojářům téměř PaaS na vrcholu předpřipravených Kubernetes pomocí vysoce výkonné brány API s plným zásobníkem od Gloo. Tento příspěvek pouze poškrábal povrch rozsáhlých možností přizpůsobení a dalších funkcí Knative. To samé s Gloo!

I přesto, že je Knative stále mladým projektem, jeho tým vydává každých šest týdnů nové verze a začala implementace pokročilých funkcí, jako je automatické nasazení TLS, automatické škálování ovládacího panelu. Existuje velká šance, že v důsledku spolupráce mezi více cloudovými společnostmi a jako základ nové nabídky Cloud Run od Googlu by se Knative mohl stát primární volbou pro bezserverové výpočty a PaaS na Kubernetes. Sledujte novinky!

Od redaktorů SouthBridge
Názory čtenářů jsou pro nás důležité, proto vás žádáme, abyste se zúčastnili krátkého průzkumu souvisejícího s budoucími články o Knative, Kubernetes, bezserverovém počítání:

Průzkumu se mohou zúčastnit pouze registrovaní uživatelé. Přihlásit se, prosím.

Mám pokračovat v psaní článků a příruček o Knative a bezserverových počítačích?

  • Ano prosím.

  • Ne, díky.

Hlasovalo 28 uživatelů. 4 uživatelů se zdrželo hlasování.

Zdroj: www.habr.com

Přidat komentář