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
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
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.
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