Knative - платформаи k8s-ба сифати хидмат бо дастгирии бе сервер

Knative - платформаи k8s-ба сифати хидмат бо дастгирии бе сервер

Кубернетес бешубҳа ба платформаи бартаридошта барои ҷойгиркунии контейнерҳо табдил ёфтааст. Он қобилияти идора кардани қариб ҳама чизро бо истифода аз API ва контроллерҳои фармоишӣ, ки API-ҳои худро бо захираҳои фармоишӣ васеъ мекунад, таъмин мекунад.

Бо вуҷуди ин, корбар бояд дар бораи маҳз чӣ гуна ҷойгиркунӣ, танзим, идора ва миқёси барномаҳо қарорҳои муфассал қабул кунад. Масъалаҳои миқёси барнома, ҳифз ва ҷараёни трафик дар ихтиёри корбар боқӣ мемонад. Ин Kubernetes-ро аз платформаҳои муқаррарӣ ҳамчун хидмат (PaaS), ба монанди Cloud Foundry ва Heroku фарқ мекунад.

Платформаҳо интерфейси соддакардашудаи корбар доранд ва ба таҳиягарони барномаҳо нигаронида шудаанд, ки аксар вақт дар ташкили барномаҳои инфиродӣ иштирок мекунанд. Масир, ҷойгиркунӣ ва ченакҳо аз ҷониби системаи асосии PaaS барои корбар шаффоф идора карда мешаванд.

Ҷараёни кории манбаъ ба киштӣ аз ҷониби PaaS тавассути эҷоди тасвири фармоишии контейнер, ҷойгиркунии он, насб кардани масири нав ва зердомени DNS барои трафики воридотӣ идора карда мешавад. Ҳамаи ин аз рӯи фармон ба кор андохта мешавад git push.

Кубернетес (қасдан) танҳо блокҳои асосии бунёдии чунин платформаҳоро таъмин мекунад ва ҷомеаро барои иҷрои кор озод мекунад. Чӣ хел Келси Хайтауэр гуфт:

Kubernetes як платформа барои сохтани платформаҳо мебошад. Беҳтарин мавқеъ барои оғоз, аммо ба охир нарасидан.

Дар натиҷа, мо як қатор биноҳои Kubernetes ва инчунин ширкатҳои хостингиро мебинем, ки кӯшиш мекунанд PaaS-ро барои Kubernetes эҷод кунанд, ба монанди OpenShift ва Rancher. Дар байни бозори афзояндаи Kube-PaaS, Knative, ки моҳи июли соли 2018 аз ҷониби Google ва Pivotal таъсис ёфтааст, вориди ҳалқа мешавад.

Knative ҳамкорӣ байни Google ва Pivotal бо кӯмаки каме аз ширкатҳои дигар ба монанди IBM, RedHat ва Solo.im буд. Он чизҳои шабеҳи PaaS-ро ба Kubernetes бо дастгирии олӣ барои замимаҳои бе сервер дар асоси компютерӣ пешниҳод мекунад. Баръакси сохтани Kubernetes, Knative ҳамчун илова дар ҳама гуна кластери мувофиқи Kubernetes насб карда шудааст ва тавассути захираҳои корбар танзим карда мешавад.

Knative чист?

Knative ҳамчун "Платформаи асоси Кубернетес барои интиқол ва идоракунии сарбории корӣ бо истифода аз компютерҳои муосири бе сервер" тавсиф шудааст. Knative, дар ҳоле ки худро ҳамчун як платформа ҳисоб мекунад, контейнерҳоро мутаносибан ба дархостҳои ҳамзамон HTTP ба таври худкор андоза мекунад. Хидматҳои истифоданашуда дар ниҳоят миқёси сифрро коҳиш дода, миқёси бе серверро дар асоси талабот таъмин мекунанд.

Knative аз маҷмӯи контроллерҳо иборат аст, ки дар ҳама гуна кластери Kubernetes насб карда, қобилиятҳои зеринро таъмин мекунанд:

  • сохтани замимаҳои контейнерӣ аз коди манбаъ (аз ҷониби компонент сохтан),
  • таъмини дастрасӣ ба трафики воридотӣ ба барномаҳо (аз ҷониби ҷузъ таъмин карда мешавад хизмат),
  • таҳвил ва миқёси автоматии барномаҳо мувофиқи талабот (инчунин аз ҷониби компонент хизмат),
  • муайян кардани манбаъҳои рӯйдодҳое, ки ба оғози барнома оварда мерасонанд (аз ҷониби ҷузъи Чорабинӣ).

Як ҷузъи калидӣ Хизматрасонӣ мебошад, ки таъминот, миқёси худкор ва идоракунии трафикро барои барномаҳои идорашаванда таъмин мекунад. Пас аз насб кардани Knative, шумо то ҳол дастрасии пурра ба API Kubernetes доред, ки ба корбарон имкон медиҳад, ки барномаҳоро идора кунанд оддӣ ва инчунин барои ислоҳи хидматҳои 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
# ...

Мо тафтиш мекунем, ки ҳама Подҳо дар ҳолати "Иҷрокунанда" ҳастанд:

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 дар кластер офарида шудааст, пас аз расонидани "helloorld-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 оғоз мешавад. Агар трафик набошад, микдори подахо ба сифр кам мешавад. Ва баръакс, агар шумораи дархостҳои ҳамзамон аз ҳадди муайяни танзимшаванда зиёд бошад, шумораи pods зиёд мешавад.

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

Knative вуруди худро бо истифода аз манбаи махсуси "дахилшавӣ" дар API дохилии Knative танзим мекунад. 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

Ниҳоят, мо кӯшиш мекунем, ки ба онҳо расем. Шумо метавонед ба осонӣ ва ба осонӣ URL-ро барои Knative Proxy истифода баред 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 барои таҳиягарон дар болои Kubernetes-и берун аз қуттӣ бо истифода аз шлюзи API-и пурмаънои Gloo тақрибан PaaS-ро таъмин мекунад. Ин паём танҳо сатҳи имконоти васеъи мутобиқсозӣ ва хусусиятҳои иловагии Knative-ро харошидааст. Айнан бо Gloo!

Сарфи назар аз он, ки Knative ҳанӯз як лоиҳаи ҷавон аст, дастаи он ҳар шаш ҳафта версияҳои нав мебарорад ва татбиқи хусусиятҳои пешрафта, ба монанди ҷойгиркунии автоматии TLS, миқёси автоматии панели идоракунӣ оғоз шудааст. Имконияти хубе вуҷуд дорад, ки дар натиҷаи ҳамкории байни ширкатҳои абрии сершумор ва ҳамчун асоси пешниҳоди нави Google Cloud Run, Knative метавонад як варианти асосӣ барои компютерҳои бе сервер ва PaaS дар Kubernetes гардад. Хабарҳоро пайгирӣ кунед!

Аз муҳаррирони SouthBridge
Андешаҳои хонандагон барои мо муҳиманд, аз ин рӯ мо аз шумо хоҳиш мекунем, ки дар як пурсиши кӯтоҳи марбут ба мақолаҳои оянда дар бораи Knative, Kubernetes, компютерҳои бе сервер иштирок кунед:

Танҳо корбарони сабтиномшуда метавонанд дар пурсиш иштирок кунанд. даромад, Лутфан.

Оё ман бояд навиштани мақолаҳо ва дастурҳоро дар бораи компютерҳои Knative ва бе сервер идома диҳам?

  • Ҳа, лутфан.

  • Не ташаккур.

28 корбар овоз доданд. 4 корбар худдорӣ карданд.

Манбаъ: will.com

Илова Эзоҳ