Knative – k8s pagrįsta platforma kaip paslauga su palaikymu be serverio

Knative – k8s pagrįsta platforma kaip paslauga su palaikymu be serverio

„Kubernetes“ neabejotinai tapo dominuojančia konteinerių diegimo platforma. Tai suteikia galimybę valdyti beveik bet ką naudojant savo API ir pasirinktinius valdiklius, kurie išplečia API pritaikytais ištekliais.

Tačiau vartotojas vis tiek turi priimti išsamius sprendimus, kaip tiksliai įdiegti, konfigūruoti, valdyti ir keisti programas. Programos mastelio keitimo, apsaugos ir srauto srauto problemos lieka vartotojo nuožiūra. Tai išskiria „Kubernetes“ iš įprastų platformų kaip paslaugos (PaaS), tokių kaip „Cloud Foundry“ ir „Heroku“.

Platformos turi supaprastintą vartotojo sąsają ir yra skirtos programų kūrėjams, kurie dažniausiai dalyvauja nustatant atskiras programas. Maršrutas, diegimas ir metrika vartotojui skaidriai valdoma pagrindinėje PaaS sistemoje.

Darbo eigą „nuo šaltinio iki pristatymo“ tvarko „PaaS“, sukurdama pasirinktinį konteinerio vaizdą, jį įdiegdama, nustatydama naują maršrutą ir DNS subdomeną gaunamam srautui. Visa tai paleidžiama pagal komandą git push.

„Kubernetes“ (tyčia) pateikia tik pagrindinius tokių platformų blokus, todėl bendruomenė gali pati atlikti darbą. Kaip Kelsey Hightower sakė:

„Kubernetes“ yra platformų kūrimo platforma. Geriausia vieta pradėti, bet ne pabaigti.

Dėl to matome daugybę „Kubernetes“ versijų, taip pat prieglobos įmonių, kurios bando sukurti „PaaS“, skirtą „Kubernetes“, pvz., „OpenShift“ ir „Rancher“. Augant Kube-PaaS rinkai, „Knative“, kurią 2018 m. liepą įkūrė „Google“ ir „Pivotal“, žengia į ringą.

„Knative“ buvo sukurtas bendradarbiaujant „Google“ ir „Pivotal“, šiek tiek padedant kitoms įmonėms, tokioms kaip IBM, RedHat ir Solo.im. Jis siūlo panašius „PaaS“ dalykus kaip „Kubernetes“ su aukščiausios klasės be serverio kompiuterių pagrįstų programų palaikymu. Skirtingai nuo „Kubernetes“ versijų, „Knative“ įdiegiamas kaip priedas bet kuriame suderinamame „Kubernetes“ klasteryje ir sukonfigūruojamas naudojant vartotojo išteklius.

Kas yra Knative?

„Knative“ apibūdinama kaip „Kubernetes pagrindu sukurta platforma, skirta darbo krūviams pateikti ir valdyti naudojant modernią be serverio kompiuteriją“. „Knative“, atsiskaitydama kaip už tokią platformą, aktyviai keičia konteinerių mastelį proporcingai vienu metu vykstančioms HTTP užklausoms. Nepanaudotos paslaugos ilgainiui sumažinamos iki nulio, todėl pagal poreikį teikiamas mastelio keitimas be serverio.

„Knative“ sudaro valdiklių rinkinys, kuris įdiegiamas bet kuriame „Kubernetes“ klasteryje ir suteikia šias galimybes:

  • konteinerinių programų kūrimas iš šaltinio kodo (pateikiamas komponento statyti),
  • prieigos prie programų srauto suteikimas (pateikiamas komponento Aptarnavimas),
  • Pristatymas ir automatinis programų mastelio keitimas pagal poreikį (taip pat teikia komponentas Aptarnavimas),
  • nustatyti įvykių, vedančių į programos paleidimą, šaltinius (pateikiamas komponento Renginys).

Pagrindinis komponentas yra aptarnavimas, kuris užtikrina valdomų programų aprūpinimą, automatinį mastelio keitimą ir srauto valdymą. Įdiegę „Knative“, vis tiek turite visišką prieigą prie „Kubernetes“ API, leidžiančią vartotojams valdyti programas paprastas būdu, taip pat padeda derinti „Knative“ paslaugas, dirbdama su tais pačiais API primityvais, kuriuos naudoja šios paslaugos (moduliai, paslaugos ir kt.).

Aptarnavimo pagalba taip pat automatizuotas mėlynai žalios spalvos srauto nukreipimas, užtikrinantis srauto atskyrimą tarp naujos ir senos programos versijų, kai vartotojas pateikia atnaujintą programos versiją.

Pats „Knative“ priklauso nuo suderinamo įėjimo valdiklio įdiegimo. Rašymo metu šis straipsnis yra palaikomas Gloo API šliuzas и „Istio Service Mesh“.. Jis sukonfigūruos galimą įėjimą, kad srautas būtų nukreiptas į „Knative“ valdomas programas.

„Istio Service Mesh“ gali būti didelė priklausomybė „Knative“ vartotojams, norintiems tai išbandyti neįdiegę „Istio“ valdymo pulto, nes „Knative“ priklauso tik nuo šliuzo.

Dėl šios priežasties dauguma vartotojų teikia pirmenybę „Gloo“ kaip vartams į „Knative“, suteikiantį panašias galimybes kaip „Istio“ (kad būtų galima naudoti tik „Knative“), kartu naudojant žymiai mažiau išteklių ir mažesnės veiklos sąnaudos.

Išbandykime Knative veikiantį stende. Naudosiu naujai įdiegtą klasterį, veikiantį GKE:

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

Pradėkime diegti „Knative“ ir „Gloo“. Tai galima padaryti bet kokia tvarka:

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

Patikriname, ar visos angos yra „Vykdomos“ būsenos:

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 paruoštas maršruto parinkimui, sukurkime automatinio mastelio keitimo Knative paslaugą (vadinkime ją kservice) ir nukreipkime į ją srautą.

„Knative“ paslaugos suteikia lengvesnį kelią į „Kubernetes“ programas pristatyti nei naudojant įprastą „Deployment+ Service+Ingress“ modelį. Dirbsime su šiuo pavyzdžiu:

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

Nukopijavau tai į failą, tada pritaikiau savo Kubernetes klasteriui tokiu būdu:

kubectl apply -f ksvc.yaml -n default

„Knative“ sukurtus išteklius galime peržiūrėti klasteryje po to, kai pateikiame „helloworld-go“ ksservice:

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

Pod su mūsų „helloworld-go“ atvaizdu paleidžiamas, kai įdiegiama kservice. Jei nėra eismo, ankščių skaičius bus sumažintas iki nulio. Ir atvirkščiai, jei vienu metu gaunamų užklausų skaičius viršija tam tikrą konfigūruojamą slenkstį, podų skaičius padidės.

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

„Knative“ sukonfigūruoja savo įėjimą naudodamas specialų „įėjimo“ šaltinį vidinėje „Knative“ API. „Gloo“ naudoja šią API kaip savo konfigūraciją, kad teiktų į „PaaS“ panašias funkcijas, įskaitant mėlynai žalią diegimo modelį, automatinį TLS vykdymą, skirtąjį laiką ir kitas išplėstines maršruto parinkimo funkcijas.

Po kurio laiko matome, kad mūsų ankštys dingo (nes nebuvo įeinančio srauto):

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

Pagaliau pabandysime juos pasiekti. Naudodami „Knative Proxy“ galite lengvai ir lengvai gauti URL glooctl:

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

Neįdiegta glooctl adresą ir prievadą galite pamatyti kube tarnyboje:

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

Paleiskite kai kuriuos duomenis naudodami cURL:

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

„Knative“ teikia beveik „PaaS“ kūrėjams kartu su „Kubernetes“, naudojant didelio našumo „Gloo“ pilną API šliuzą. Šis įrašas tik subraižė plačias „Knative“ tinkinimo parinktis ir papildomas funkcijas. Tas pats su Gloo!

Nepaisant to, kad „Knative“ dar jaunas projektas, jo komanda kas šešias savaites išleidžia naujas versijas, pradėta diegti pažangias funkcijas, tokias kaip automatinis TLS diegimas, automatinis valdymo pulto mastelio keitimas. Yra didelė tikimybė, kad dėl bendradarbiavimo tarp kelių debesų kompanijų ir kaip naujo Google Cloud Run pasiūlymo pagrindas, „Knative“ gali tapti pagrindine kompiuterijos be serverio ir „PaaS“ parinktimi „Kubernetes“. Sekite naujienas!

Iš SouthBridge redaktorių
Mums svarbios skaitytojų nuomonės, todėl kviečiame dalyvauti trumpoje apklausoje, susijusioje su būsimais straipsniais apie Knative, Kubernetes, kompiuteriją be serverio:

Apklausoje gali dalyvauti tik registruoti vartotojai. Prisijungti, Prašau.

Ir toliau rašyti straipsnius ir vadovus apie „Knative“ ir be serverio kompiuteriją?

  • Taip prašau.

  • Ne, ačiū.

Balsavo 28 vartotojų. 4 vartotojai susilaikė.

Šaltinis: www.habr.com

Добавить комментарий