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

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

Кубернетес, сөзсіз, контейнерлерді орналастырудың басым платформасына айналды. Ол 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 IBM, RedHat және Solo.im сияқты басқа компаниялардың аздаған көмегі арқылы Google мен Pivotal арасындағы ынтымақтастық болды. Ол серверсіз есептеулерге негізделген қолданбаларға жоғары қолдау көрсететін Kubernetes-ке ұқсас PaaS заттарын ұсынады. Kubernetes құрастыруларынан айырмашылығы, Knative кез келген үйлесімді Kubernetes кластерінде қондырма ретінде орнатылады және пайдаланушы ресурстары арқылы конфигурацияланады.

Knative дегеніміз не?

Knative «Қазіргі заманғы серверсіз есептеулерді пайдалана отырып, жұмыс жүктемелерін жеткізуге және басқаруға арналған Kubernetes негізіндегі платформа» ретінде сипатталған. Knative, өзін осындай платформа ретінде есептей отырып, бір уақыттағы HTTP сұрауларына пропорционалды түрде контейнерлерді автоматты түрде масштабтайды. Пайдаланылмаған қызметтер серверсіз стильдегі сұраныс бойынша масштабтауды қамтамасыз ете отырып, ақырында нөлге дейін төмендейді.

Knative кез келген Kubernetes кластерінде орнатылатын және келесі мүмкіндіктерді қамтамасыз ететін контроллерлер жинағынан тұрады:

  • бастапқы кодтан контейнерлік қолданбаларды құру (компонентпен қамтамасыз етілген салу),
  • қолданбаларға кіріс трафикке қол жеткізуді қамтамасыз ету (компонентпен қамтамасыз етілген қызмет ету),
  • сұраныс бойынша қосымшаларды жеткізу және автоматты түрде масштабтау (сонымен бірге құрамдас қызмет ету),
  • қолданбаларды іске қосуға әкелетін оқиғалардың көздерін анықтау (компонентпен қамтамасыз етілген Тегістеу).

Негізгі құрамдас басқарылатын қолданбалар үшін қамтамасыз етуді, автоматты масштабтауды және трафикті басқаруды қамтамасыз ететін Қызмет көрсету болып табылады. Knative орнатқаннан кейін, пайдаланушыларға қолданбаларды басқаруға мүмкіндік беретін Kubernetes API интерфейсіне әлі де толық рұқсатыңыз бар қарапайым жолмен, сонымен қатар осы қызметтер пайдаланатын API примитивтерімен жұмыс істейтін Knative қызметтерін жөндеуге қызмет етеді (модульдер, қызметтер және т.б.).

Қызмет көрсетудің көмегімен көк-жасыл трафикті бағыттау да автоматтандырылған, бұл пайдаланушы қолданбаның жаңартылған нұсқасын жеткізген кезде қолданбаның жаңа және ескі нұсқалары арасындағы трафикті бөлуді қамтамасыз етеді.

Knative өзі үйлесімді кіріс контроллерін орнатуға байланысты. Бұл мақаланы жазу кезінде қолдау көрсетіледі Gloo API шлюзі и Istio Service Mesh. Ол Knative басқаратын қолданбаларға трафикті бағыттау үшін қолжетімді кіруді конфигурациялайды.

Istio Service Mesh оны Istio басқару панелін орнатпай-ақ көргісі келетін Knative пайдаланушылары үшін үлкен тәуелділік болуы мүмкін, өйткені 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
# ...

Біз барлық қосқыштардың «Іске қосулы» күйінде екенін тексереміз:

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

Біз Knative жасаған ресурстарды «helloworld-go» жеткізгеннен кейін кластерде көре аламыз. kservice:

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

Біздің "helloworld-go" кескіні бар қосқыш kservice орналастырылған кезде іске қосылады. Егер трафик болмаса, бөтелкелердің саны нөлге дейін азаяды. Және керісінше, егер бір уақыттағы сұраулар саны белгілі бір конфигурацияланатын шекті мәннен асып кетсе, тармақтар саны артады.

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 пайдаланушы қалыс қалды.

Ақпарат көзі: www.habr.com

пікір қалдыру