În ultimii ani, s-a observat o creștere semnificativă a popularității și a adoptării framework-urilor serverless de către dezvoltatori.
Paralel, aplicațiile bazate pe containere, alături de Kubernetes, se bucură deja de o largă recunoaștere în cadrul companiilor.
Kubernetes este, fără îndoială, un instrument puternic, cu un potențial vast. Ecosistemul său este în continuă expansiune, odată cu apariția unor instrumente inovatoare, printre care se remarcă Knative, o tehnologie care are capacitatea de a optimiza funcționalitatea Kubernetes.
Knative a fost conceput pentru a aborda dificultățile care conduc la eșecuri și pentru a crea un standard de bază în domeniul platformelor cloud și al orchestrării native în cloud.
Mai exact, framework-ul serverless Knative poate satisface cerințele unei organizații într-o măsură superioară comparativ cu alte implementări serverless bazate pe cloud.
În acest ghid, vom explora în detaliu Knative, avantajele sale, scenariile de utilizare, procesul de instalare, modul de funcționare și alte aspecte relevante.
Să începem!
Ce reprezintă Knative?
Knative este un framework serverless construit pe baza Kubernetes, inițial dezvoltat de Google. Acesta are rolul de a încărca și executa funcții serverless în conformitate cu necesitățile unei companii, reducând risipa. Knative este un proiect open-source, care adaugă componente pentru implementarea, execuția și gestionarea aplicațiilor serverless pe Kubernetes.
Obiectivul major al framework-ului serverless Knative este de a standardiza orchestrarea multiplatformă. Aceasta se realizează prin integrarea funcțiilor de creare a containerelor, scalare automată, modele de evenimente și management al sarcinilor de lucru.
Anterior, exista o varietate de soluții open-source, fiecare cu propriul mod de implementare. Această diversitate a condus la fragmentarea pieței, din cauza lipsei unor practici standardizate. Astfel, alegerea unui anumit furnizor era necesară pentru a beneficia de anumite caracteristici ale sistemului.
Cu toate acestea, dificultățile de migrare au devenit tot mai evidente. Pentru a evita aceste probleme, a fost introdus framework-ul serverless Knative. Prin urmare, dacă doriți să integrați sarcini, Knative o poate face eficient în cadrul unei conducte bazate pe Kubernetes.
Knative este structurat în jurul a trei componente principale:
- Knative Build: facilitează crearea imaginilor container și le face accesibile pornind de la codul sursă.
- Knative Serving: utilizează Istio și Kubernetes pentru a conecta și implementa aceste imagini container prin intermediul resurselor de infrastructură alocate.
- Knative Eventing: permite utilizatorilor să definească declanșatoare de evenimente și să le asocieze cu funcții containerizate.
Atunci când Knative identifică un eveniment, definește procesul corespunzător pentru a-l executa la cerere. Cu Knative, nu este necesară alocarea de noduri container, clustere sau pod-uri, deoarece Knative utilizează resurse de găzduire doar atunci când un anumit proces este în desfășurare. Astfel, Knative combină avantajele abordărilor serverless și container.
Concepte fundamentale ale Knative
Să analizăm conceptele cheie ale framework-ului serverless Knative și cum se corelează cu primitivele Knative.
Construcție (Build)
Componenta de construire a Knative ajută la utilizarea și extinderea primitivelor Kubernetes existente, permițând rularea pe versiuni de containere pornind de la codul sursă. Activează codul sursă din dependențe și din depozit, construind imagini container și înregistrându-le.
Evenimente (Events)
Componenta de evenimente contribuie la o comunicare eficientă între consumatorii și producătorii de evenimente, prin intermediul unei cuplări lejere, creând o arhitectură bazată pe evenimente. Knative gestionează aceste evenimente într-o coadă, automatizând procesul fără intervenția dezvoltatorilor.
Ulterior, aceste evenimente sunt transmise către containere. Apoi, fluxuri sunt direcționate către producătorii de evenimente, pentru a realiza diverse sarcini. Această abordare reduce semnificativ efortul dezvoltatorilor în crearea codului necesar pentru stabilirea conexiunilor.
Funcții (Functions)
O funcție este o unitate de implementare independentă, asemănătoare cu un microserviciu, care este servită prin intermediul Knative. Codul unei funcții este scris pentru a îndeplini o singură sarcină specifică, cum ar fi:
- Procesarea unui fișier dintr-o bază de date
- Salvarea unui utilizator într-o bază de date
- Executarea unei sarcini programate
Framework-ul serverless Knative este conceput pentru a facilita dezvoltarea, implementarea și gestionarea eficientă a funcțiilor.
Plugin-uri
Funcționalitatea framework-ului serverless Knative poate fi extinsă sau modificată cu ușurință prin utilizarea de plugin-uri. Fiecare fișier serverless.yml include o proprietate de plugin care conține diferite plugin-uri.
Resurse
Resursele sunt componentele infrastructurii serverless Knative pe care funcțiile le utilizează, cum ar fi:
- Sursa de evenimente AWS SQS
- O sarcină programată (care se execută la intervale regulate, cum ar fi 5 sau 10 minute)
- O sursă de evenimente Kafka
Și altele.
Servicii
Serviciile sunt echivalente cu proiectele. Un serviciu reprezintă unitatea de organizare a framework-ului serverless Knative. Deși o singură aplicație poate include mai multe servicii, un serviciu poate fi înțeles ca un fișier de proiect.
În cadrul acestui fișier (serverless.yml, serverless.json sau serverless.js), sunt definite funcțiile, evenimentele și resursele. Atunci când serviciile sunt implementate prin intermediul framework-ului serverless, toate elementele din fișier sunt implementate simultan.
Servire (Serving)
Componenta de servire Knative se bazează pe Istio și Kubernetes, facilitând implementarea aplicațiilor. Permite dezvoltarea rapidă a containerelor serverless, programarea în rețea și scalarea automată a componentelor Istio. Componenta de servire Knative tratează containerele ca servicii scalabile, a căror dimensiune variază de la o singură instanță la multiple instanțe container.
Caracteristicile Knative
Să analizăm câteva dintre caracteristicile esențiale ale framework-ului serverless Knative:
- Knative este un framework serverless bazat pe Kubernetes, care permite implementarea serviciilor în Kubernetes.
- Knative se integrează cu ușurință în mediile suportate.
- Dezvoltatorii pot utiliza direct API-ul Kubernetes prin intermediul Knative, pentru a implementa servicii serverless.
- Utilizatorii pot declanșa servicii serverless folosind sistemul de evenimente Knative.
Cum funcționează Knative?
Framework-ul serverless Knative funcționează ca un segment de management al evenimentelor, care conectează Istio și Kubernetes. Kubernetes acționează ca un orchestrator pentru microservicii și containere. Istio, pe de altă parte, este o tehnologie mesh open-source care integrează diverse componente pentru a facilita interacțiunea între utilizator și sistem.
Knative oferă utilizatorilor o serie de componente concepute pentru a simplifica operațiunile de zi cu zi. Aceste componente sunt reutilizate în diverse aplicații. Un dezvoltator poate utiliza orice limbaj de programare. Prin urmare, nu este necesară cunoașterea unui limbaj specific, deoarece Knative recunoaște doar imaginile container.
Există trei componente principale ale framework-ului serverless Knative, care joacă un rol cheie în funcționarea acestuia:
Construcția de containere noi
Componenta de construcție este responsabilă pentru crearea de containere noi. Aceasta are capacitatea de a converti codurile sursă într-un container. Knative poate fi configurat în funcție de necesitățile specifice ale unei afaceri.
Inițial, Knative preia codul sursă dintr-o bibliotecă, cum ar fi Github. Apoi, sunt adăugate dependențele de bază, pentru a asigura funcționarea eficientă a codului. Imaginile container sunt apoi construite și stocate în fișiere accesibile platformei Kubernetes.
Containerul este pus la dispoziția dezvoltatorilor care folosesc Kubernetes și Knative. Prin urmare, containerele sunt construite atâta timp cât este cunoscută sursa codului.
Servirea sau rularea platformei
Componenta de servire are rolul de a asigura funcționarea platformei. Aceasta include:
- Configurare: Configurarea permite gestionarea sigură a mai multor versiuni ale serviciului. Ori de câte ori este implementată o nouă caracteristică a unui container, Knative salvează versiunea existentă și creează una nouă, cu cele mai recente modificări și caracteristici. Mai mult, Knative definește starea unui serviciu.
- Scalare automată: Pentru a îmbunătăți funcționalitatea containerelor serverless, este necesară scalarea automată a containerelor, fie în sus, fie în jos. Knative poate auto-scala serviciile la mai multe instanțe, atunci când este necesar.
- Rutarea inteligentă a serviciilor: Aceasta este o componentă esențială a mecanismului de funcționare Knative. Permite dezvoltatorilor să direcționeze fluxul și cantitatea de trafic către diferite versiuni ale microserviciilor. Rutarea inteligentă a serviciilor este utilă, în special, la introducerea de noi caracteristici și strategii de implementare albastru-verde.
Astfel, este posibilă expunerea unei minorități de utilizatori la versiunea de testare și la versiunea recentă, direcționând treptat traficul majoritar către noua versiune.
Evenimente pentru a defini funcții
Componenta de evenimente Knative are rolul de a descrie funcția Knative. Aceasta permite definirea rulării containerelor pe baza evenimentelor. Diferite evenimente declanșează funcții specifice ale containerelor.
Dezvoltatorii pot defini declanșatoarele de evenimente și containerele asociate, lăsând Knative să realizeze restul. Knative gestionează lista de evenimente și livrarea evenimentelor.
Beneficiile Knative
Knative oferă servicii precum managementul rutelor, lansarea în etape și conectarea la servicii. Se bucură de o comunitate extinsă. Să analizăm modul în care Knative influențează companiile să adopte această tehnologie.
- Spre deosebire de alte soluții, Knative utilizează evenimente standard și este compatibil cu soluția FaaS. Oferă un framework standard CloudEvent, care ajută la proiectarea unei arhitecturi serverless.
- Deși Knative nu este un PaaS, permite crearea unui PaaS serverless prin intermediul platformei de orchestrare serverless.
- Knative oferă un design serverless matur și complet.
- Acceptă multiplatformă și oferă un standard universal pentru furnizorii de cloud, eliminând dependența de o anumită soluție specifică a unui furnizor.
- Knative oferă un framework flexibil.
- Suportă lansări proporționale în faze.
- Permite testarea ecosistemului serverless într-un mediu containerizat.
- Knative elimină complexitatea managementului și a instrumentelor.
- Facilitează migrarea rapidă la alți furnizori de cloud integrați cu Knative prin intermediul implementării Kubernetes.
- Oferă un model de calcul bazat pe cereri.
- Permite gestionarea fluxurilor de lucru ca serviciu.
- Cu Knative, puteți procesa date IoT, efectua verificări de accesibilitate și valida configurațiile grupurilor de securitate.
- Permite dezvoltatorilor să se concentreze pe codificare și să creeze rapid cod iterativ.
- Asigură că dezvoltatorii vor încorpora noi versiuni.
- Modelul Knative bazat pe evenimente ajută la implementarea proiectelor, inclusiv abonamentul, conexiunea la sistemul extern și înregistrarea.
Provocările Knative (și câteva soluții)
Provocări legate de eficiență
Un framework Knative care susține aplicații adecvate oferă performanțe superioare la un cost minim. Cu toate acestea, o combinație necorespunzătoare de aplicații poate duce la costuri mai mari și la o utilizare insuficientă a resurselor container. Acest lucru poate genera o performanță slabă a aplicațiilor, fiind una dintre cele mai mari provocări în implementarea Knative serverless.
Un pool de resurse de dimensiuni reduse sau aplicații neadecvate pot anula o mare parte din beneficiile Knative.
Această provocare poate fi depășită prin efectuarea unor teste care verifică cantitatea de resurse și combinația de aplicații pe Knative. Analizați încărcăturile evenimentelor, evaluând încărcăturile medii și maxime pentru fiecare și estimați consumul total de resurse. Repetați această procedură pentru mai multe aplicații, pentru a crea și executa o configurație de probă, validând astfel estimările.
Provocări funcționale
Provocările funcționale ale Knative pot fi:
- Knative depinde de funcții care corespund unui model stateless. Acest lucru înseamnă că datele nu sunt stocate în cadrul componentei. Dezvoltarea funcțiilor nu este dificilă, dar necesită o ușoară schimbare de abordare, ceea ce înseamnă că o singură greșeală poate afecta negativ performanța software-ului.
- Datele comerciale implică tranzacții în mai mulți pași, iar funcțiile stateless mențin contextul în toți pașii. Knative nu deține această capacitate, la fel ca instrumentele serverless din cloud-ul public.
Monitorizarea regulată și remedierea problemelor pot ajuta la menținerea performanțelor la un nivel optim.
Provocări operaționale
Comparativ cu ofertele serverless dintr-un cloud public, Knative presupune anumite provocări operaționale. Administratorii nu controlează serverele de bază în cloud-ul public. Dar, vor trebui să gestioneze serverele, împreună cu Kubernetes, containerele, Knative și Istio.
Knative minimizează operațiunile și complexitatea dezvoltării pentru companiile care utilizează deja Kubernetes și containere. Companiile care folosesc service mesh și microservicii vor considera Knative o extensie naturală.
Cazuri de utilizare a Knative
Knative este cea mai potrivită opțiune pentru aplicațiile care generează un număr variabil de evenimente, care se încadrează în limite stabilite, sau le depășesc. Cazurile specifice de utilizare ale framework-ului serverless Knative includ:
Orientarea spre evenimente este esențială. Dacă echipele IT nu pot conceptualiza o aplicație ca pe o serie de evenimente, în loc de tranzacții, Knative poate să nu fie o alegere ideală, din motive funcționale și de eficiență.
Cerințe preliminare și instalarea Knative
După cum am observat în secțiunile anterioare, Knative este un set de componente (evenimente și servire), care funcționează într-o rețea de servicii și un cluster de orchestrare a sarcinilor de lucru. Există utilitare de linie de comandă necesare pentru a simplifica operarea. Prin urmare, avem nevoie de câteva dependențe pentru a continua cu instalarea.
Cerințe preliminare
Există mai multe opțiuni pentru instalarea Kubernetes. Docker Desktop include un cluster Kubernetes simplu, care este util pentru diverse scopuri. O abordare directă este utilizarea Kubernetes în Docker, pentru a rula clusterul Kubernetes împreună cu nodurile containerului Docker. O metodă convenabilă de a interacționa cu clusterul este prin intermediul instrumentului de linie de comandă Knative.
Knative CLI oferă o interfață rapidă și simplă pentru crearea resurselor. Facilitează sarcini complexe, precum partajarea traficului și scalarea automată. O modalitate practică este descărcarea binarului compatibil de pe pagina GitHub.
Instalare
Odată ce sunt îndeplinite cerințele preliminare, putem trece la instalarea componentelor. Pentru mediul de dezvoltare, există un plugin de pornire rapidă. Plugin-ul facilitează instalarea unui cluster Knative local, utilizând clientul Knative. Plugin-ul de pornire rapidă poate fi descărcat de pe pagina oficială de lansare.
Concluzie: Viitorul Knative
Knative a revoluționat calculul serverless, oferind scalare automată a aplicațiilor. Aceasta are un impact major asupra sistemelor interoperabile și modulare.
În viitor, este de așteptat ca Knative să rezolve deficiențele actuale și să devină una dintre cele mai eficiente tehnologii pentru implementarea unei arhitecturi serverless.
Tehnologia Knative este extrem de utilă pentru dezvoltatori, datorită beneficiilor pe care le oferă în comparație cu alternativele serverless. Knative contribuie la economisirea timpului, eliminând necesitatea de a construi și menține extensii Kubernetes. Dezvoltatorii sunt mulțumiți de tehnologia Knative, fiind ușor de utilizat și o alternativă excelentă la soluțiile serverless.
Prin urmare, dacă doriți să maximizați eficiența mediului Kubernetes în fluxurile de lucru în cloud, adoptați tehnologia Knative și veți beneficia de avantajele sale.