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