Knative - сервергүй дэмжлэг бүхий k8s-д суурилсан платформ

Knative - сервергүй дэмжлэг бүхий k8s-д суурилсан платформ

Кубернетес нь чингэлэг байрлуулах зонхилох платформ болсон нь дамжиггүй. Энэ нь API-ууд болон өөрчлөн тохируулсан нөөцүүдээр API-уудыг өргөтгөдөг захиалгат хянагчуудыг ашиглан бараг бүх зүйлийг хянах боломжийг олгодог.

Гэсэн хэдий ч хэрэглэгч програмуудыг хэрхэн байрлуулах, тохируулах, удирдах, масштаблах талаар нарийвчилсан шийдвэр гаргах ёстой. Аппликэйшний цар хүрээ, хамгаалалт, хөдөлгөөний урсгалын асуудал нь хэрэглэгчийн үзэмжээр үлддэг. Энэ нь Kubernetes-ийг Cloud Foundry, Heroku зэрэг үйлчилгээ (PaaS) болгон ердийн платформуудаас ялгаж өгдөг.

Платформууд нь хялбаршуулсан хэрэглэгчийн интерфэйстэй бөгөөд ихэвчлэн бие даасан програмуудыг тохируулахад оролцдог програм хөгжүүлэгчдэд зориулагдсан байдаг. Чиглүүлэлт, байршуулалт, хэмжигдэхүүнийг үндсэн PaaS системээр хэрэглэгчдэд ил тод удирддаг.

Эх сурвалжаас тээвэрлэх ажлын урсгалыг PaaS нь тусгай контейнерийн дүрсийг үүсгэх, түүнийг байрлуулах, ирж буй урсгалд зориулж шинэ маршрут болон DNS дэд домайн тохируулах замаар зохицуулдаг. Энэ бүгдийг тушаалаар ажиллуулдаг git push.

Кубернетес (санаатайгаар) зөвхөн ийм платформуудын үндсэн барилгын материалаар хангадаг бөгөөд энэ нь олон нийтэд ажлыг өөрсдөө хийх эрх чөлөөтэй болгодог. Хэрхэн Келси Хайтауэр хэлэв:

Kubernetes бол платформ барих платформ юм. Эхлэх хамгийн тохиромжтой байрлал, гэхдээ дуусгахгүй.

Үүний үр дүнд бид олон тооны Kubernetes-ийн бүтээн байгуулалтууд, мөн OpenShift, Rancher зэрэг Kubernetes-д PaaS-ийг бий болгохыг оролдож буй хостинг компаниудыг харж байна. Өсөн нэмэгдэж буй Kube-PaaS зах зээлийн дунд 2018 оны XNUMX-р сард Google болон Pivotal-ийн үүсгэн байгуулсан Knative нь рингэнд орж байна.

Knative бол IBM, RedHat, Solo.im зэрэг бусад компаниудын багахан тусламжаар Google болон Pivotal-ын хамтын ажиллагаа юм. Энэ нь сервергүй тооцоололд суурилсан програмуудыг дээд зэргээр дэмждэг Kubernetes-тэй ижил төстэй PaaS зүйлсийг санал болгодог. Kubernetes-ийн бүтээцээс ялгаатай нь Knative нь ямар ч нийцтэй Kubernetes кластерт нэмэлт болгон суулгаж, хэрэглэгчийн нөөцөөр дамжуулан тохируулдаг.

Knative гэж юу вэ?

Knative нь "Орчин үеийн сервергүй тооцоолол ашиглан ажлын ачааллыг хүргэх, удирдах Кубернетес дээр суурилсан платформ" гэж тодорхойлсон. Knative нь өөрийгөө ийм платформ гэж тооцож байгаа хэдий ч HTTP хүсэлттэй зэрэгцэн контейнеруудыг автоматаар хэмждэг. Ашиглагдаагүй үйлчилгээнүүд нь эцэстээ тэг болж буурч, сервергүй загварын эрэлт хэрэгцээний масштабыг бий болгодог.

Knative нь ямар ч Kubernetes кластерт суулгаж, дараах боломжуудыг хангадаг хянагчдаас бүрддэг.

  • Эх кодоос контейнержүүлсэн програмуудыг бүтээх (бүрэлдэхүүн хэсэг бий болгох),
  • Програм руу орж ирж буй траффик руу нэвтрэх боломжийг олгох (бүрэлдэхүүнээр хангагдсан Үйлчлэх),
  • Хүсэлтийн дагуу програмуудыг хүргэх, автоматаар масштаблах (мөн бүрэлдэхүүн хэсэг Үйлчлэх),
  • програмыг эхлүүлэхэд хүргэж буй үйл явдлын эх үүсвэрийг тодорхойлох (бүрэлдэхүүнээр хангагдсан Тэгшлэх).

Гол бүрэлдэхүүн хэсэг нь удирдаж буй аппликешнүүдийн нөөцийг бүрдүүлэх, автоматаар масштаблах, замын хөдөлгөөний менежментийг хангадаг Сервинк юм. Knative-г суулгасны дараа та Kubernetes API-д бүрэн хандах эрхтэй хэвээр байгаа бөгөөд энэ нь хэрэглэгчдэд програмуудыг удирдах боломжийг олгоно энгийн арга, мөн Knative үйлчилгээнүүдийг дибаг хийх, эдгээр үйлчилгээнүүдийн ашигладаг ижил API командуудтай (модуль, үйлчилгээ гэх мэт) ажилладаг.

Үйлчилгээний тусламжтайгаар цэнхэр-ногоон замын хөдөлгөөний чиглүүлэлт мөн автоматжсан бөгөөд хэрэглэгч програмын шинэчилсэн хувилбарыг хүргэх үед програмын шинэ болон хуучин хувилбаруудын хоорондох урсгалыг тусгаарлах боломжийг олгодог.

Knative нь өөрөө тохирох оролтын хянагч суурилуулахаас хамаарна. Энэ нийтлэлийг бичиж байх үед дэмжигдсэн Gloo API гарц и Istio Service Mesh. Энэ нь Knative-ийн удирддаг програмууд руу урсгалыг чиглүүлэхийн тулд боломжтой оролтыг тохируулах болно.

Istio Service Mesh нь Knative нь зөвхөн гарцаас хамаардаг тул Istio хяналтын самбарыг суулгахгүйгээр туршиж үзэхийг хүсдэг Knative хэрэглэгчдийн хувьд ихээхэн хамааралтай байж болно.

Ийм учраас ихэнх хэрэглэгчид Gloo-г Knative-д нэвтрэх гарц болгон илүүд үздэг бөгөөд Istio-тэй ижил төстэй чадавхийг (зөвхөн Knative-г ашиглах зорилгоор) өгөхийн зэрэгцээ бага хэмжээний нөөц ашиглаж, үйл ажиллагааны зардал багатай байдаг.

Knative-г индэр дээр туршиж үзье. Би GKE-д шинээр суулгасан кластер ашиглах болно:

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

Knative болон Gloo-г суулгаж эхэлцгээе. Үүнийг ямар ч дарааллаар хийж болно:

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

Бид бүх Pod-ууд "Ажиллаж байна" төлөвт байгаа эсэхийг шалгана:

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 чиглүүлэлт хийхэд бэлэн байна, автоматаар масштабтай Knative үйлчилгээг (үүнийг kservice гэж нэрлэе) үүсгэж, түүн рүү урсгалыг чиглүүлье.

Knative үйлчилгээнүүд нь ердийн Deployment+Service+Ingress загвараас илүү Kubernetes-д програм хүргэх илүү хялбар замыг бий болгодог. Бид энэ жишээн дээр ажиллах болно:

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

Би үүнийг файл руу хуулж аваад Кубернетес кластерт дараах байдлаар ашигласан:

kubectl apply -f ksvc.yaml -n default

Бид "helloworld-go"-г хүргэсний дараа кластерт Knative-ийн үүсгэсэн нөөцүүдийг харах боломжтой. kservice:

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

Манай "helloworld-go" дүрс бүхий pod нь kservice ашиглалтанд орсны дараа нээгдэнэ. Хөдөлгөөнгүй бол хонхорхойн тоог XNUMX болгож бууруулна. Мөн эсрэгээр, нэгэн зэрэг хүсэлтийн тоо нь тохируулж болох тодорхой босго хэмжээнээс давсан тохиолдолд хонгилын тоо нэмэгдэх болно.

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

Knative нь дотоод Knative API дахь тусгай "орох" нөөцийг ашиглан өөрийн оролтыг тохируулдаг. Gloo нь энэ API-г өөрийн тохиргоондоо PaaS-тэй төстэй функцууд, тухайлбал хөх-ногоон байршуулалтын загвар, автомат TLS хэрэгжилт, завсарлага болон бусад дэвшилтэт чиглүүлэлтийн функцуудыг хангадаг.

Хэсэг хугацааны дараа бидний хонхорхой алга болсныг бид харж байна (учир нь ирж буй урсгал байхгүй байсан).

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

Эцэст нь бид тэдэнд хүрэхийг хичээх болно. Та Knative Proxy-ийн URL-г хялбар бөгөөд хялбараар авах боломжтой glooctl:

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

Суулгахгүйгээр glooctl та 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

cURL ашиглан зарим өгөгдлийг ажиллуулцгаая:

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

Knative нь Gloo-ийн өндөр хүчин чадалтай, бүрэн стек API гарцыг ашиглан бэлэн Kubernetes дээр хөгжүүлэгчдэд бараг л PaaS өгдөг. Энэ нийтлэл нь зөвхөн Knative-ийн өргөн хүрээний тохируулгын сонголтууд болон нэмэлт функцүүдийн гадаргууг зурсан. Глоотой адилхан!

Knative нь залуу төсөл хэвээр байгаа хэдий ч түүний баг зургаан долоо хоног тутамд шинэ хувилбаруудыг гаргадаг бөгөөд автомат TLS байршуулах, хяналтын самбарыг автоматаар масштаблах зэрэг дэвшилтэт функцуудыг хэрэгжүүлж эхэлсэн. Олон клоуд компаниудын хамтын ажиллагааны үр дүнд болон Google-ийн шинэ Cloud Run саналын үндэс болгон Knative нь Kubernetes дээрх сервергүй тооцоолол болон PaaS-ийн үндсэн сонголт болох магадлал өндөр байна. Мэдээг дагаж мөрдөөрэй!

SouthBridge-ийн редакторуудаас
Уншигчдын санал бодол бидний хувьд чухал тул бид таныг Knative, Kubernetes, сервергүй тооцооллын талаархи ирээдүйн нийтлэлтэй холбоотой богино хэмжээний судалгаанд оролцохыг хүсч байна.

Зөвхөн бүртгэлтэй хэрэглэгчид санал асуулгад оролцох боломжтой. Нэвтрэх, гуйя.

Би Knative болон сервергүй тооцооллын талаар нийтлэл, гарын авлагыг үргэлжлүүлэн бичих ёстой юу?

  • Тиймээ гуйя.

  • Үгүй ээ баярлалаа.

28 хэрэглэгч санал өгсөн. 4 хэрэглэгч түдгэлзсэн.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх