Knative - k8s-pohjainen alusta palveluna palvelimettoman tuella

Knative - k8s-pohjainen alusta palveluna palvelimettoman tuella

Kubernetesista on epäilemättä tullut hallitseva alusta konttien käyttöönotolle. Se tarjoaa mahdollisuuden hallita melkein mitä tahansa käyttämällä API-liittymiä ja mukautettuja ohjaimia, jotka laajentavat sen sovellusliittymiä mukautetuilla resursseilla.

Käyttäjän on kuitenkin silti tehtävä yksityiskohtaisia ​​päätöksiä siitä, miten sovelluksia otetaan käyttöön, konfiguroidaan, hallinnoidaan ja skaalataan. Sovelluksen skaalaukseen, suojaukseen ja liikenteen sujuvuuteen liittyvät ongelmat jäävät käyttäjän harkinnan varaan. Tämä erottaa Kubernetesin palveluna perinteisistä alustoista (PaaS), kuten Cloud Foundrysta ja Herokusta.

Alustojen käyttöliittymä on yksinkertaistettu ja ne on suunnattu sovelluskehittäjille, jotka ovat useimmiten mukana yksittäisten sovellusten luomisessa. Taustalla oleva PaaS-järjestelmä hallitsee reititystä, käyttöönottoa ja mittareita läpinäkyvästi käyttäjälle.

PaaS hoitaa työnkulun lähteestä alukseen luomalla mukautetun säilön kuvan, ottamalla sen käyttöön, määrittämällä uuden reitin ja DNS-aliverkkotunnuksen saapuvalle liikenteelle. Kaikki tämä käynnistetään komennolla git push.

Kubernetes (tahallisesti) tarjoaa vain ydinrakennuspalikoita tällaisille alustoille, jolloin yhteisö voi vapaasti tehdä työt itse. Miten Kelsey Hightower sanoi:

Kubernetes on alusta alustojen rakentamiseen. Paras paikka aloittaa, mutta ei lopettaa.

Tämän seurauksena näemme joukon Kubernetes-koontiversioita sekä isännöintiyrityksiä, jotka yrittävät luoda PaaS:ää Kubernetesille, kuten OpenShift ja Rancher. Kasvavien Kube-PaaS-markkinoiden keskellä Googlen ja Pivotalin heinäkuussa 2018 perustama Knative astuu kehään.

Knative syntyi Googlen ja Pivotalin yhteistyönä muiden yritysten, kuten IBM:n, RedHatin ja Solo.im:n, avulla. Se tarjoaa samanlaisia ​​PaaS-asioita kuin Kubernetes huippuluokan tuella palvelimettomille laskentapohjaisille sovelluksille. Toisin kuin Kubernetes-koontiversiot, Knative asennetaan lisäosana mihin tahansa yhteensopivaan Kubernetes-klusteriin ja konfiguroidaan käyttäjäresurssien avulla.

Mikä on Knative?

Knativea kuvataan "Kubernetes-pohjaiseksi alustaksi työkuormien toimittamiseen ja hallintaan nykyaikaisella palvelimettomalla tietojenkäsittelyllä". Vaikka Knative laskuttaa itseään tällaisena alustana, se skaalaa aktiivisesti säilöjä suhteessa samanaikaisiin HTTP-pyyntöihin. Käyttämättömät palvelut skaalautuvat lopulta nollaan, mikä tarjoaa palvelimetonta on-demand-skaalausta.

Knative koostuu joukosta ohjaimia, jotka asennetaan mihin tahansa Kubernetes-klusteriin ja tarjoavat seuraavat ominaisuudet:

  • konttisovellusten rakentaminen lähdekoodista (komponentin tarjoama Rakentaa),
  • pääsyn tarjoaminen sovelluksiin saapuvaan tietoliikenteeseen (komponentin tarjoama Tarjoilu),
  • sovellusten toimitus ja automaattinen skaalaus tarpeen mukaan (mukana myös komponentti Tarjoilu),
  • tunnistaa sovellusten käynnistämiseen johtavien tapahtumien lähteet (komponentin tarjoama eventing).

Keskeinen osa on Serving, joka tarjoaa hallittujen sovellusten provisioinnin, automaattisen skaalauksen ja liikenteenhallinnan. Knativen asentamisen jälkeen sinulla on edelleen täysi pääsy Kubernetes API:iin, jolloin käyttäjät voivat hallita sovelluksia tavallinen tavalla, ja se toimii myös Knative-palveluiden virheenkorjauksessa samojen API-primitiivien kanssa, joita nämä palvelut käyttävät (moduulit, palvelut jne.).

Servingin avulla myös sinivihreä liikenteen reititys on automatisoitu, mikä varmistaa liikenteen erottamisen sovelluksen uusien ja vanhojen versioiden välillä, kun käyttäjä toimittaa päivitetyn version sovelluksesta.

Knative itsessään riippuu yhteensopivan sisääntuloohjaimen asentamisesta. Tätä artikkelia tuetaan kirjoitushetkellä Gloo API Gateway и Istio Service Mesh. Se määrittää käytettävissä olevan sisääntulon reitittämään liikenteen Knativen hallinnoimiin sovelluksiin.

Istio Service Mesh voi olla suuri riippuvuus Knative-käyttäjille, jotka haluavat kokeilla sitä asentamatta Istio-ohjauspaneelia, koska Knative riippuu vain yhdyskäytävästä.

Tästä syystä useimmat käyttäjät pitävät Gloosta yhdyskäytävänä Knativelle, joka tarjoaa samanlaiset ominaisuudet kuin Istio (vain Knativen käyttöä varten), samalla kun ne käyttävät huomattavasti vähemmän resursseja ja alhaisemmat käyttökustannukset.

Testataan Knativea toiminnassa telineellä. Käytän juuri asennettua klusteria, joka toimii GKE:ssä:

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

Aloitetaan Knativen ja Gloon asentaminen. Tämä voidaan tehdä missä tahansa järjestyksessä:

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

Tarkistamme, että kaikki Podit ovat "Käynnissä"-tilassa:

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 on valmis reititystä varten, luodaan automaattisesti skaalautuva Knative-palvelu (kutsutaanko sitä kserviceksi) ja reititetään liikenne siihen.

Knative-palvelut tarjoavat helpomman tavan toimittaa sovelluksia Kubernetesiin kuin perinteinen Deployment+Service+Ingress-malli. Työskentelemme tämän esimerkin kanssa:

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

Kopioin tämän tiedostoon ja käytin sen sitten Kubernetes-klusteriin seuraavasti:

kubectl apply -f ksvc.yaml -n default

Voimme tarkastella Knativen luomia resursseja klusterissa, kun olemme toimittaneet '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, jossa on "helloworld-go" -kuvamme, käynnistetään, kun kservice otetaan käyttöön. Jos liikennettä ei ole, podien määrä vähennetään nollaan. Ja päinvastoin, jos samanaikaisten pyyntöjen määrä ylittää tietyn konfiguroitavan kynnyksen, podien määrä kasvaa.

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

Knative määrittää sisääntulonsa käyttämällä erityistä sisääntuloresurssia sisäisessä Knative API:ssa. Gloo käyttää tätä sovellusliittymää kokoonpanossaan tarjotakseen PaaS:n kaltaisia ​​ominaisuuksia, kuten sinivihreän käyttöönottomallin, automaattisen TLS-syötön, aikakatkaisut ja muut edistyneet reititysominaisuudet.

Jonkin ajan kuluttua näemme, että podimme ovat kadonneet (koska saapuvaa liikennettä ei ollut):

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

Lopulta yritämme tavoittaa heidät. Voit helposti ja helposti saada URL-osoitteen Knative Proxylle käyttämällä glooctl:

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

Ilman asennettua glooctl näet osoitteen ja portin kube-palvelussa:

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

Suoritetaan tietoja cURL:n avulla:

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

Knative tarjoaa lähes PaaS:n kehittäjille valmiiden Kubernetesin lisäksi käyttämällä Gloon korkean suorituskyvyn täyden pinon API-yhdyskäytävää. Tämä viesti on vain raaputtanut pintaa Knatiivin laajoista mukautusvaihtoehdoista ja lisäominaisuuksista. Sama Gloo kanssa!

Huolimatta siitä, että Knative on vielä nuori projekti, sen tiimi julkaisee uusia versioita kuuden viikon välein ja edistyneiden ominaisuuksien käyttöönotto on alkanut, kuten automaattinen TLS-käyttöönotto, ohjauspaneelin automaattinen skaalaus. On olemassa hyvä mahdollisuus, että useiden pilviyritysten yhteistyön tuloksena ja Googlen uuden Cloud Run -tarjouksen pohjana Knativesta voi tulla ensisijainen vaihtoehto palvelimettomaan laskemiseen ja PaaS:iin Kubernetesissa. Seuraa uutisia!

SouthBridgen toimittajilta
Lukijoiden mielipiteet ovat meille tärkeitä, joten pyydämme teitä osallistumaan lyhyeen kyselyyn, joka liittyy tuleviin Knativen, Kubernetesin ja palvelimettoman tietojenkäsittelyn artikkeleihin:

Vain rekisteröityneet käyttäjät voivat osallistua kyselyyn. Kirjaudu sisään, ole kiltti.

Pitäisikö minun jatkaa artikkeleiden ja oppaiden kirjoittamista Knative- ja palvelimettomasta tietojenkäsittelystä?

  • Kyllä kiitos.

  • Ei kiitos.

28 käyttäjää äänesti. 4 käyttäjää pidättyi äänestämästä.

Lähde: will.com

Lisää kommentti