Knative - серверсиз колдоосу менен k8s негизделген платформа-кызмат

Knative - серверсиз колдоосу менен k8s негизделген платформа-кызмат

Kubernetes, албетте, контейнерди жайгаштыруу үчүн үстөмдүк платформа болуп калды. Бул анын API'лерин жана колдонуучунун ресурстары менен API'лерин кеңейткен ыңгайлаштырылган контроллерлорду колдонуу менен дээрлик бардык нерсени көзөмөлдөө мүмкүнчүлүгүн берет.

Бирок, колдонуучу дагы эле тиркемелерди кантип жайгаштыруу, конфигурациялоо, башкаруу жана масштабдоо боюнча деталдуу чечимдерди кабыл алышы керек. Колдонмонун масштабы, коргоо жана трафиктин агымынын маселелери колдонуучунун каалоосу боюнча калат. Бул Kubernetesти Cloud Foundry жана Heroku сыяктуу кызмат (PaaS) катары кадимки платформалардан айырмалап турат.

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

Булактан кемеге иштөө процесси PaaS тарабынан ыңгайлаштырылган контейнердин сүрөтүн түзүү, аны жайылтуу, жаңы маршрутту жана кириш трафик үчүн DNS субдоменин орнотуу аркылуу иштетилет. Мунун баары буйрук боюнча ишке киргизилет git push.

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

Kubernetes - платформаларды куруу үчүн платформа. Баштоо үчүн эң жакшы позиция, бирок аягына чыкпайт.

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

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

Knative деген эмне?

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

Knative кандайдыр бир Kubernetes кластеринде орнотулган жана төмөнкү мүмкүнчүлүктөрдү камсыз кылган контроллерлордун жыйындысынан турат:

  • баштапкы коддон контейнердик тиркемелерди куруу (компонент тарабынан берилген куруу),
  • тиркемелерге кирүүчү трафикке жетүүнү камсыз кылуу (компонент тарабынан камсыздалган кызмат),
  • талап боюнча тиркемелерди жеткирүү жана автоматтык масштабдоо (ошондой эле компонент тарабынан каралган кызмат),
  • колдонмону ишке киргизүүгө алып келген окуялардын булактарын аныктоо (компонент тарабынан берилген Окуя).

Негизги компонент башкарылган колдонмолор үчүн камсыздоону, авто-масштабды жана трафикти башкарууну камсыз кылган Кызмат көрсөтүү болуп саналат. Knative орнотулгандан кийин, колдонуучуларга тиркемелерди башкарууга мүмкүнчүлүк берген Kubernetes API'ге толук мүмкүнчүлүк бар демейдеги жол, ошондой эле Knative кызматтарынын мүчүлүштүктөрүн оңдоо үчүн кызмат кылат, бул кызматтар колдонгон ошол эле API примитивдери менен иштөө (модульдер, кызматтар, ж.б.).

Кызмат көрсөтүүнүн жардамы менен көк-жашыл трафиктин маршруту дагы автоматташтырылган, бул колдонуучу тиркеменин жаңыланган версиясын жеткиргенде, тиркеменин жаңы жана эски версияларынын ортосундагы трафиктин бөлүнүшүн камсыз кылат.

Knative өзү шайкеш кириш контроллерин орнотуудан көз каранды. Бул макаланы жазуу учурунда колдоого алынат Gloo API Gateway и 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

Мен муну файлга көчүрдүм, анан аны Kubernetes кластериме мындайча колдондум:

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" сүрөтү бар подклик ксервис орнотулганда ишке киргизилет. Трафик жок болсо, подоктордун саны нөлгө чейин кыскарат. Жана тескерисинче, эгерде бир убактагы суроо-талаптардын саны белгилүү бир конфигурациялануучу босогодон ашса, поддондордун саны көбөйөт.

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дин кеңири ыңгайлаштыруу варианттарын жана кошумча мүмкүнчүлүктөрүн тырмап салды. Ошол эле Gloo менен!

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

SouthBridge редакторлорунан
Окурмандардын пикири биз үчүн маанилүү, андыктан сизден Knative, Kubernetes, серверсиз эсептөөлөр жөнүндө келечектеги макалаларга байланыштуу кыска сурамжылоого катышууңузду суранабыз:

Сурамжылоого катталган колдонуучулар гана катыша алышат. Кирүү, өтүнөмүн.

Knative жана серверсиз эсептөөлөр жөнүндө макалаларды жана колдонмолорду жазууну улантасызбы?

  • Ооба сураныч.

  • Рахмат кереги жок.

28 колдонуучу добуш берди. 4 колдонуучу добуш берүүдөн баш тартты.

Source: www.habr.com

Комментарий кошуу