Knative - serversiz qo'llab-quvvatlanadigan k8s-ga asoslangan platforma-servis

Knative - serversiz qo'llab-quvvatlanadigan k8s-ga asoslangan platforma-servis

Kubernetes, shubhasiz, konteynerlarni joylashtirish uchun dominant platformaga aylandi. U o'zining API-lari va API-larini maxsus resurslar bilan kengaytiradigan maxsus kontrollerlar yordamida deyarli hamma narsani boshqarish imkoniyatini beradi.

Biroq, foydalanuvchi hali ham ilovalarni qanday joylashtirish, sozlash, boshqarish va masshtablash haqida batafsil qaror qabul qilishi kerak. Ilovani masshtablash, himoya qilish va trafik oqimi masalalari foydalanuvchining ixtiyorida qoladi. Bu Kubernetes-ni Cloud Foundry va Heroku kabi an'anaviy platformalardan xizmat (PaaS) sifatida ajratib turadi.

Platformalar soddalashtirilgan foydalanuvchi interfeysiga ega va ko'pincha individual ilovalarni o'rnatish bilan shug'ullanadigan dastur ishlab chiquvchilari uchun mo'ljallangan. Marshrutlash, joylashtirish va ko'rsatkichlar asosiy PaaS tizimi tomonidan foydalanuvchi uchun shaffof tarzda boshqariladi.

Manbadan kemaga ish jarayoni PaaS tomonidan maxsus konteyner tasvirini yaratish, uni joylashtirish, kiruvchi trafik uchun yangi marshrut va DNS subdomenini sozlash orqali boshqariladi. Bularning barchasi buyruq bo'yicha ishga tushiriladi git push.

Kubernetes (qasddan) faqat bunday platformalar uchun asosiy qurilish bloklarini taqdim etadi, bu esa hamjamiyatni ishni o'zlari bajarishi uchun erkin qoldiradi. Qanaqasiga Kelsi Xaytauer dedi:

Kubernetes - bu platformalar qurish uchun platforma. Boshlash uchun eng yaxshi pozitsiya, lekin tugatish emas.

Natijada biz bir qator Kubernetes inshootlarini, shuningdek, OpenShift va Rancher kabi Kubernetes uchun PaaS yaratishga harakat qilayotgan hosting kompaniyalarini ko'ramiz. Kube-PaaS bozori o'sib borayotgan bir paytda, 2018 yil iyul oyida Google va Pivotal tomonidan asos solingan Knative ringga chiqmoqda.

Knative Google va Pivotal o'rtasidagi hamkorlik bo'lib, IBM, RedHat va Solo.im kabi boshqa kompaniyalarning ozgina yordami bilan. U serversiz hisob-kitoblarga asoslangan ilovalarni yuqori darajadagi qo'llab-quvvatlash bilan Kubernetes-ga o'xshash PaaS narsalarni taklif qiladi. Kubernetes tuzilmalaridan farqli o'laroq, Knative har qanday mos keladigan Kubernetes klasteriga qo'shimcha sifatida o'rnatiladi va foydalanuvchi resurslari orqali sozlanadi.

Knative nima?

Knative "Zamonaviy serversiz hisoblashlardan foydalangan holda ish yuklarini etkazib berish va boshqarish uchun Kubernetesga asoslangan platforma" sifatida tavsiflanadi. Knative, o'zini shunday platforma sifatida taqdim etar ekan, bir vaqtning o'zida HTTP so'rovlariga mutanosib ravishda konteynerlarni faol ravishda avtomatik o'lchaydi. Foydalanilmayotgan xizmatlar oxir-oqibat nolga kamayadi va serversiz uslubdagi talab bo'yicha masshtablashni ta'minlaydi.

Knative har qanday Kubernetes klasteriga o'rnatiladigan va quyidagi imkoniyatlarni ta'minlaydigan kontrollerlar to'plamidan iborat:

  • Manba kodidan konteynerlangan ilovalarni yaratish (komponent tomonidan taqdim etilgan qurish),
  • Ilovalarga kiruvchi trafikka kirishni ta'minlash (komponent tomonidan taqdim etilgan xizmat),
  • talab bo'yicha ilovalarni yetkazib berish va avtomatik masshtablash (shuningdek, komponent tomonidan taqdim etilgan xizmat),
  • ilovalarni ishga tushirishga olib keladigan hodisalar manbalarini aniqlash (komponent tomonidan taqdim etilgan Tadbir).

Asosiy komponent - bu boshqariladigan ilovalar uchun ta'minlash, avtomatik masshtablash va trafikni boshqarishni ta'minlaydigan Xizmat. Knative-ni o'rnatganingizdan so'ng, siz hali ham Kubernetes API-ga to'liq kirishingiz mumkin, bu foydalanuvchilarga ilovalarni boshqarish imkonini beradi oddiy yo'l, shuningdek, Knative xizmatlarini disk raskadrovka qilishga xizmat qiladi, bu xizmatlar foydalanadigan bir xil API primitivlari (modullar, xizmatlar va boshqalar) bilan ishlaydi.

Xizmat ko'rsatish yordamida ko'k-yashil trafik marshruti ham avtomatlashtirilgan bo'lib, foydalanuvchi ilovaning yangilangan versiyasini yetkazib berganda ilovaning yangi va eski versiyalari o'rtasida trafikni ajratishni ta'minlaydi.

Knativening o'zi mos keladigan kirish boshqaruvchisini o'rnatishga bog'liq. Ushbu maqolani yozish paytida qo'llab-quvvatlanadi Gloo API Gateway и Istio Service Mesh. U trafikni Knative tomonidan boshqariladigan ilovalarga yo'naltirish uchun mavjud kirishni sozlaydi.

Istio Service Mesh Istio boshqaruv panelini o'rnatmasdan sinab ko'rmoqchi bo'lgan Knative foydalanuvchilari uchun katta bog'liqlik bo'lishi mumkin, chunki Knative faqat shlyuzga bog'liq.

Shu sababli, ko'pchilik foydalanuvchilar Gloo-ni Knative-ga kirish eshigi sifatida afzal ko'rishadi, bu Istio-ga o'xshash imkoniyatlar to'plamini taqdim etadi (faqat Knative-dan foydalanish uchun), shu bilan birga sezilarli darajada kamroq resurslardan foydalanadi va operatsion xarajatlarni kamaytiradi.

Keling, Knativeni stendda sinab ko'raylik. Men GKE-da ishlaydigan yangi o'rnatilgan klasterdan foydalanaman:

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

Keling, Knative va Gloo-ni o'rnatishni boshlaylik. Bu har qanday tartibda amalga oshirilishi mumkin:

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

Biz barcha podlar “Ishlayotgan” holatida ekanligini tekshiramiz:

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 marshrutlash uchun tayyor, keling, avtomatik masshtabli Knative xizmatini yarataylik (keling, uni kservice deb ataymiz) va unga trafikni yo'naltiramiz.

Knative xizmatlar an'anaviy Deployment+Service+Ingress modelidan ko'ra Kubernetesga ilovalarni yetkazib berishning oson yo'lini ta'minlaydi. Biz ushbu misol bilan ishlaymiz:

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

Men buni faylga ko'chirdim, keyin uni Kubernetes klasterimga shu tarzda qo'lladim:

kubectl apply -f ksvc.yaml -n default

Biz "helloworld-go" ni taqdim etganimizdan so'ng Knative tomonidan yaratilgan resurslarni klasterda ko'rishimiz mumkin. kservice:

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

"Helloworld-go" tasviri bilan pod kservice ishga tushirilganda ishga tushiriladi. Agar trafik bo'lmasa, podalar soni nolga kamayadi. Va aksincha, agar bir vaqtning o'zida so'rovlar soni ma'lum bir konfiguratsiya qilinadigan chegaradan oshsa, podalar soni ortadi.

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

Knative o'z kirishini ichki Knative API'da maxsus "kirish" resursi yordamida sozlaydi. Gloo ushbu API-dan PaaS-ga o'xshash xususiyatlarni, jumladan ko'k-yashil joylashtirish modeli, avtomatik TLS-ni qo'llash, kutish vaqti va boshqa ilg'or marshrutlash xususiyatlarini taqdim etish uchun konfiguratsiya sifatida foydalanadi.

Biroz vaqt o'tgach, biz podkastlarimiz g'oyib bo'lganini ko'ramiz (chunki kiruvchi trafik yo'q edi):

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

Nihoyat, biz ularga erishishga harakat qilamiz. Siz Knative Proxy-dan foydalanib URL-manzilni osongina va oson olishingiz mumkin glooctl:

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

O'rnatmasdan glooctl kube xizmatida manzil va portni ko'rishingiz mumkin:

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

Keling, cURL yordamida ba'zi ma'lumotlarni ishga tushiramiz:

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

Knative Gloo-ning yuqori samarali, to'liq stekli API shlyuzidan foydalangan holda ishlab chiquvchilar uchun deyarli PaaS-ni taqdim etadi. Ushbu post Knative-ning keng ko'lamli moslashtirish imkoniyatlari va qo'shimcha funktsiyalarining sirtini tirnaladi. Gloo bilan ham xuddi shunday!

Knative hali ham yosh loyiha bo'lishiga qaramay, uning jamoasi har olti haftada yangi versiyalarni chiqaradi va avtomatik TLS o'rnatish, boshqaruv panelini avtomatik masshtablash kabi ilg'or funksiyalarni amalga oshirish boshlandi. Bir nechta bulutli kompaniyalar o'rtasidagi hamkorlik natijasida va Googlening yangi Cloud Run taklifining asosi sifatida Knative Kubernetesda serversiz hisoblash va PaaS uchun asosiy variantga aylanishi mumkin. Yangiliklarni kuzatib boring!

SouthBridge muharrirlaridan
O'quvchilarning fikrlari biz uchun muhim, shuning uchun sizdan Knative, Kubernetes, serversiz hisoblash haqidagi kelgusi maqolalar bilan bog'liq qisqa so'rovda qatnashishingizni so'raymiz:

So'rovda faqat ro'yxatdan o'tgan foydalanuvchilar ishtirok etishlari mumkin. tizimga kirishiltimos.

Knative va serversiz hisoblash haqida maqolalar va qo'llanmalar yozishni davom ettirishim kerakmi?

  • Ha iltimos.

  • Shart emas rahmat.

28 nafar foydalanuvchi ovoz berdi. 4 nafar foydalanuvchi betaraf qolgan.

Manba: www.habr.com

a Izoh qo'shish