Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

Kyçti është shkruar pasi punonjësit tanë kanë pasur shumë biseda me klientët mbi zhvillimin e aplikacioneve në Kubernetes dhe specifikat e këtij zhvillimi në OpenShift.

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

Ne zakonisht fillojmĂ« me tezĂ«n se Kubernetes Ă«shtĂ« thjesht Kubernetes, ndĂ«rsa OpenShift Ă«shtĂ« njĂ« platformĂ« Kubernetes, si Microsoft AKS ose Amazon EKS. Çdo njĂ« prej kĂ«tyre platformave ka avantazhet e veta, orientuar ndaj njĂ« audience tĂ« caktuar. Pas kĂ«saj, biseda kalon nĂ« krahasimin e forcave dhe dobĂ«sive tĂ« platformave specifike.

NĂ« pĂ«rgjithĂ«si, ne menduam tĂ« shkruajmĂ« kĂ«tĂ« postim me njĂ« pĂ«rfundim si "Doni, nuk ka rĂ«ndĂ«si ku e ekzekutoni kodin, nĂ« OpenShift, AKS, EKS, nĂ« ndonjĂ« Kubernetes tĂ« personalizuar, madje nĂ« çfarĂ«do Kubernetes-i" (pĂ«r shkak tĂ« shkurtĂ«sisĂ«, le ta quajmĂ« KUK) – Ă«shtĂ« nĂ« tĂ« vĂ«rtetĂ« e thjeshtĂ«, pĂ«r tĂ« dyja.

Më pas planifikonim të merrnim një "Hello World" të thjeshtë dhe në shembullin e tij të tregonin se çfarë kanë të përbashkët dhe cilat janë diferencat midis KUK dhe Red Hat OpenShift Container Platform (më pas, OCP ose thjesht OpenShift).

Megjithatë, gjatë shkrimit të këtij postimi, kuptuam se ishim mësuar aq shumë me përdorimin e OpenShift, saqë nuk e kuptojmë se sa është rritur dhe kthyer në një platformë të shkëlqyer, e cila tani është shumë më tepër sesa thjesht një distribucion Kubernetes. Jemi mësuar ta perceptojmë pjekurinë dhe thjeshtësinë e OpenShift si diçka të natyrshme, duke humbur nga vëmendja shkëlqimin e tij.

Në përgjithësi, ka ardhur koha për një pendim aktiv, dhe tani do të krahasojmë hap pas hapi testin tonë 'Hello World' në KUK dhe në OpenShift, duke e bërë këtë sa më objektivisht të jetë e mundur (ndoshta duke shprehur ndonjëherë mendimin tonë personal mbi temën). Nëse jeni të interesuar për mendimin e pastër subjektiv mbi këtë çështje, mund ta lexoni këtu (EN). Në këtë postim do të mbajmë qëndrim te faktet dhe vetëm te faktet.

Klusterët

Pra, për 'Hello World' tonë na nevojiten klusterë. Të themi menjëherë 'jo' çdo lloj cloud publik, për të mos paguar për serverët, regjistrat, rrjetet, transferimin e të dhënave, etj. Prandaj, ne zgjedhim një kluster të thjeshtë me një nyje në Minikube (për KUK) dhe Code Ready Containers (për klusterin OpenShift). Të dyja këto variante janë realisht të lehta për t'u instaluar, por do të kërkojnë mjaft burime në laptopin tuaj.

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

Ndërtimi në KUK

Pra rregullojmë.

Hapi 1 – krijojmĂ« imazhin tonĂ« tĂ« kontejnerit

Së pari do të fillojmë duke e drejtuar 'Hello World' tonë në minikube. Për këtë nevojiten:

  1. 1. Docker i instaluar.
  2. 2. Git i instaluar.
  3. 3. Maven i instaluar (në fakt, në këtë projekt përdoret binari mvnw, kështu që mund të kaloni pa këtë).
  4. 4. Burimi vetë, pra, kloni i depove github.com/gcolman/quarkus-hello-world.git

SĂ« pari duhet tĂ« krijoni njĂ« projekt Quarkus. Mos u friksoni nĂ«se nuk keni punuar ndonjĂ«herĂ« me sitin Quarkus.io – Ă«shtĂ« e lehtĂ«. Thjesht zgjidhni komponentĂ«t qĂ« dĂ«shironi tĂ« pĂ«rdorni nĂ« projekt (RestEasy, Hibernate, Amazon SQS, Camel etj.), dhe mĂ« pas Quarkus do ta konfigurojĂ« vetĂ« arketipin maven dhe do ta publikojĂ« gjithçka nĂ« github. Pra, ndonjĂ«herĂ« njĂ« klikim dhe Ă«shtĂ« gati. KĂ«shtu qĂ« e duam Quarkus.

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

Mënyra më e thjeshtë për të ndërtuar 'Hello World' tonë në imazhin e kontejnerit është të përdorni zgjerimet quarkus-maven për Docker-in, të cilat do të bëjnë të gjithë punën e nevojshme. Me ardhjen e Quarkus, kjo është bërë vërtet e lehtë: shtoni zgjerimin container-image-docker dhe mund të krijoni imazhe me komandat maven.

./mvnw quarkus:add-extension -Dextensions="container-image-docker"

Dhe në fund, realizojmë ndërtimin e imazhit tonë duke përdorur Maven. Si rezultat, kodi ynë burimor shndërrohet në një imazh të gatshëm për konteiner, i cili tashmë mund të ekzekutohet në një mjedis konteinerësh.

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

./mvnw -X clean package -Dquarkus.container-image.build=true

Ja, tani mund të ekzekutojmë konteinerin me komandën docker run, duke e mapuar shërbimin tonë në portin 8080, në mënyrë që të mund të aksesohet.

docker run -i --rm -p 8080:8080 gcolman/quarkus-hello-world

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

Pas aktivizimit të instancës së konteinerit, mbetet vetëm të kontrollojmë me komandën curl nëse shërbimi ynë funksionon:

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

Pra, gjithçka funksionon, dhe ishte vërtet e lehtë dhe e thjeshtë.

Hapi 2 – dĂ«rgojmĂ« konteinerin tonĂ« nĂ« depozitĂ«n e imazheve tĂ« konteinerĂ«ve

Derisa imazhi që krijuam është ruajtur lokal, në magazinën tonë lokale të konteinerëve. Nëse dëshirojmë të përdorim këtë imazh në mjedisin tonë K8s, duhet ta ngarkojmë në ndonjë depo tjetër. Në Kubernetes nuk ka funksione të tilla, prandaj do të përdorim dockerhub. Sepse, së pari, është falas, dhe së dyti, (pothuajse) të gjithë e bëjnë kështu.

Kjo është gjithashtu shumë e thjeshtë, dhe këtu vetëm një llogari në dockerhub është e nevojshme.

Pra, ngarkojmë në dockerhub dhe e dërgojmë imazhin tonë aty.

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

Hapi 3 – aktivizoni Kubernetes

Ka shumĂ« mĂ«nyra pĂ«r tĂ« mbledhur konfigurimin e kubernetes pĂ«r tĂ« aktivizuar "Hello World" tonĂ«, por ne do tĂ« pĂ«rdorim mĂ«nyrĂ«n mĂ« tĂ« thjeshtĂ«, sepse kjo Ă«shtĂ« mĂ«nyra jonë 

NĂ« fillim, aktivizoni klasterin minikube:

minikube start

Hapi 4 – zhvillojmĂ« imazhin tonĂ« tĂ« kontejnerit

Tani duhet të kthejmë kodin tonë dhe imazhin e kontejnerit në konfigurimet e kubernetes. Me fjalë të tjera, na nevojitet definicioni i pod-it dhe deployment-it me referencë në imazhin tonë në dockerhub. Një nga mënyrat më të thjeshta për ta bërë këtë është të ekzekutojmë komandën create deployment, duke treguar për imazhin tonë:

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

kubectl create deployment hello-quarkus — image=gcolman/quarkus-hello-world:1.0.0-SNAPSHOT

Me këtë komandë, ne i thamë KUK tonë të krijojë konfigurimin e deployment-it, i cili duhet të përmbajë specifikimin e pod-it për imazhin tonë të kontejnerit. Kjo komandë gjithashtu do ta aplikojë këtë konfigurim në klasterin tonë minikube dhe do të krijojë një deployment që do të shkarkojë imazhin tonë të kontejnerit dhe do të aktivizojë pod-in në klaster.

Hapi 5 – hapim qasjen nĂ« shĂ«rbimin tonĂ«

Tani që kemi një imazh kontejneri të zhvilluar, është koha të mendojmë se si të konfigurojmë qasjen e jashtme në këtë shërbim Restful, i cili është programuar në kodin tonë.

Ka janë shumë mënyra. Për shembull, mund të përdorni komandën expose për të krijuar automatikisht komponentët përkatës Kubernetes, siç janë shërbimet dhe pikët e hyrjes. Në fakt, kështu do të veprojmë, duke ekzekutuar komandën expose për objektin tonë deployment.

kubectl expose deployment hello-quarkus --type=NodePort --port=8080

Le të ndalemi për një moment te opsioni "--type" i komandës expose.

Kur bëjmë expose dhe krijojmë komponentët e nevojshëm për të drejtuar shërbimin tonë, na nevojitet që të jashtme të mund të lidhen me shërbimin hello-quarkus, i cili ndodhet brenda rrjetit tonë të definuar me softuer. Dhe parametri type na lejon të krijojmë dhe lidhim gjëra siç janë balancuesit e ngarkesës për të riorientuar trafikun në këtë rrjet.

Për shembull, duke specifikuar type=LoadBalancer, ne automatikisht aktivizojmë balancuesin e ngarkesës në një re publike për t'u lidhur me klusterin tonë Kubernetes. Kjo është, sigurisht, e shkëlqyer, por duhet të kuptohet se një konfigurim i tillë do të jetë i lidhur ngushtë me një re publike specifike dhe do të jetë më e vështirë të transferosh midis instancave të Kubernetes në mjedise të ndryshme.

Në shembullin tonë type=NodePort, domethen, qoftë se adresimi në shërbimin tonë bëhet nëpërmjet IP-së së nodës dhe numrit të portit. Ky variant lejon që të mos përdoren asnjë cloud publik, por kërkon disa hapa shtesë. Së pari, ne kemi nevojë për balancimin e ngarkesës tonë, kështu që do të vendosim një balancues ngarkese NGINX në klasterin tonë.

Hapi 6 – vendosim balancuesin e ngarkesĂ«s

Minikube ka disa funksione platformës që thjeshtojnë krijimin e komponentëve të nevojshëm për qasje nga jashtë, si kontrollorët e ingress. Minikube vjen me kontrollorin ingress Nginx, dhe ne thjesht duhet ta aktivizojmë dhe ta konfigurojmë.

minikube addons enable ingress

Tani, me një komandë, do të krijojmë kontrollorin ingress Nginx, i cili do të funksionojë brenda klasterit tonë minikube:

ingress-nginx-controller-69ccf5d9d8-j5gs9 1/1 Po funksionon 1 33m

Hapi 7 – KonfigurojmĂ« ingress

Tani duhet të konfigurojmë kontrollorin ingress Nginx për të pranuar kërkesat hello-quarkus.

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

Dhe, përfundimisht, duhet ta aplikojmë këtë konfiguratë.

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

kubectl apply -f ingress.yml

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

Duke qenë se po i bëjmë të gjitha këto në kompjuterin tonë, thjesht shtojmë IP-në e nodës sonë në skedarin /etc/hosts, për të drejtuar kërkesat http ndaj minikube-tonë në balancuesin e ngarkesës NGINX.

192.168.99.100 hello-quarkus.info

Tani është, tani shërbimi ynë minikube është në dispozicion nga jashtë përmes kontrolluesit ingress Nginx.

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

Pra, ishte e lehtë, apo jo? Apo jo shumë?

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

Iniciimi në OpenShift (Code Ready Containers)

Tani do të shohim si të bëhet kjo në Red Hat OpenShift Container Platform (OCP).

Si nĂ« rastin e minikube, ne zgjedhim skemĂ«n me klaster njĂ«-nodshĂ«m OpenShift nĂ« formĂ«n e Code Ready Containers (CRC). Deri tani ai quhej minishift dhe ishte i bazuar nĂ« projektin OpenShift Origin, ndĂ«rsa tani Ă«shtĂ« CRC dhe Ă«shtĂ« ndĂ«rtuar mbi platformĂ«n Red Hat’ove OpenShift Container.

Këtu, na falni, nuk mund të ndalemi dhe të mos themi: "OpenShift është i mrekullueshëm!"

Fillimisht menduam të shkruajmë se zhvillimi në OpenShift nuk ndryshon nga zhvillimi në Kubernetes. Dhe në thelb është kështu. Por gjatë shkrimit të këtij artikulli, na erdhën në mendje sa shumë hapa të panevojshëm duhet të bësh kur nuk ke OpenShift, dhe prandaj është, përsëri, i mrekullueshëm. Ne e duam kur gjithçka bëhet lehtë, dhe siç është lehtë krahasuar me minikube që shembulli ynë zbulohet dhe fillon në OpenShift, realisht na frymëzoi për të shkruar këtë postim.

Le të përshkojmë procesin dhe të shohim çfarë do të na nevojitet të bëjmë.

Pra, në shembullin me minikube ne filluam me Docker... Prit, nuk është më e nevojshme që në makinë të jetë instaluar Docker.

Dhe git lokal nuk na nevojitet.
Dhe Maven nuk është i nevojshëm.
Dhe nuk është e nevojshme të krijoni manualisht imazhin e kontejnerit.
Dhe nuk është e nevojshme të kërkoni ndonjë depot të imazheve të kontenierëve.
Dhe nuk është e nevojshme të instaloni kontrollin e ingress.
Dhe as konfigurimi i ingress nuk është i nevojshëm.

E kuptuat, po? Për të vendosur dhe nisur aplikacionin tonë në OpenShift, nuk kemi nevojë për asnjë nga gjërat e lartpërmendura. Procesi vetë duket si më poshtë.

Hapi 1 – Nisni klasterin tuaj OpenShift

Ne përdorim Code Ready Containers nga Red Hat, i cili në thelb është i njëjti Minikube, por me një klaster një-nodësh të plotë OpenShift.

crc start

Hapi 2 – KryejmĂ« ndĂ«rtimin dhe vendosjen e aplikacionit nĂ« klasterin OpenShift

Saktësisht në këtë hap, thjeshtësia dhe lehtësia e OpenShift shfaqen në gjithë shkëlqimin e saj. Ashtu si në të gjitha shpërndarjet e Kubernetes, ne kemi shumë mënyra për të nisur aplikacionin në klaster. Dhe, si në rastin e KUK, ne zgjedhim veçanërisht metodën më të thjeshtë.

OpenShift gjithmonë është ndërtuar si një platformë për krijimin dhe nisjen e aplikacioneve në kontejnerë. Ndërtimi i kontejnerëve ka qenë gjithmonë një pjesë e pandashme e kësaj platforme, prandaj këtu ka shumë burime të tjera Kubernetes për detyra të caktuara.

Ne do të përdorim procesin Source 2 Image (S2I) të OpenShift, i cili ka disa mënyra të ndryshme për të marrë burimin tonë (kodin ose skedarët e binarit) dhe për ta kthyer atë në një imazh kontejneri që do të ekzekutohet në klasterin OpenShift.

Për këtë na nevojiten dy gjëra:

  • Kodi ynĂ« burimor nĂ« njĂ« depo git
  • Imazhi Builder, mbi tĂ« cilin do tĂ« kryhet ndĂ«rtimi.

Ekzistojnë shumë imazhe të tillë, të mbështetura si nga Red Hat ashtu edhe në nivelin e komunitetit, dhe ne do të përdorim imazhin OpenJDK, ngase po ndiej të ndërtoj një aplikacion Java.

Mund ta nisni ndërtimin S2I, si nga konsola grafike OpenShift Developer ashtu edhe nga linja e komandës. Ne do ta përdorim komandën new-app, duke i treguar se ku të marrë imazhin build dhe kodin tonë burimor.

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

oc new-app registry.access.redhat.com/ubi8/openjdk-11:latest~https://github.com/gcolman/quarkus-hello-world.git

E gjithë, aplikacioni ynë është krijuar. Procesi S2I ka përfunduar këto gjëra:

  • Krijova njĂ« build-pod shĂ«rbimi pĂ«r çdo gjĂ« qĂ« lidhet me ndĂ«rtimin e aplikacionit.
  • Krijova konfigurimin e OpenShift Build.
  • Shkarkova imazhin e builder nĂ« regjistrin e brendshĂ«m docker tĂ« OpenShift.
  • Klonova "Hello World" nĂ« repozitorin lokal.
  • PashĂ« qĂ« kishte njĂ« pom maven, pra kompilova aplikacionin duke pĂ«rdorur maven.
  • Krijova njĂ« imazh tĂ« ri kontejneri, qĂ« pĂ«rmbante aplikacionin e kompiluar Java, dhe e vendosa kĂ«tĂ« imazh nĂ« regjistrin e brendshĂ«m tĂ« kontejnerĂ«ve.
  • Krijova njĂ« Kubernetes Deployment me specifikimet e pod-it, shĂ«rbimit, etj.
  • Nisa deploy e imazhit tĂ« kontejnerit.
  • Fshiva build-pod-in shĂ«rbimi.

Në këtë listë ka shumë gjëra, por e rëndësishmja është se të gjithë ndërtimi ndodh ekskluzivisht brenda OpenShift, regjistri i brendshëm Docker ndodhet brenda OpenShift, dhe procesi i ndërtimit krijon të gjitha komponentët Kubernetes dhe i nis ato në klaster.

Nëse ndjekim vizualisht nisjen e S2I në konsolë, mund ta shohim se si gjatë kryerjes së ndërtimit niset build pod.

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

Tani le të shohim log-et e pod-it builder: së pari, atje shihet se si maven bën punën e tij dhe shkarkon varësi për ndërtimin e aplikacionit tonë java.

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

Pas pas, përfundimin e ndërtimit maven, nis ndërtimi i imazhit të kontejnerit dhe pastaj ky imazh i ndërtuar dërgohet në depo të brendshme.

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

Kjo është e gjitha. Procesi i ndërtimit përfundoi. Tani le të sigurohemi se pod't dhe shërbimet e aplikacionit tonë janë aktivizuar në klaster.

oc get service

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

Kjo është e gjitha. Dhe vetëm një komandë. Tani mbetet të bëjmë expose të këtij shërbimi për qasje nga jashtë.

Hapi 3 – bĂ«jmĂ« expose tĂ« shĂ«rbimit pĂ«r qasje nga jashtĂ«

Si në rastin e KUK, në platformën OpenShift, edhe «Hello World» ynë ka nevojë për një router për të drejtuar trafikun e jashtëm në shërbimin brenda klasterit. Në OpenShift, kjo është shumë e thjeshtë. Së pari, komponenti i rutinës HAProxy është instaluar sipas parazgjedhjes në klaster (mund të zëvendësohet me të njëjtin NGINX). Së dyti, ka burime speciale me mundësi të gjera konfigurimi, të quajtura Routes, që i ngjajnë objekteve Ingress në Kubernetes-in e vjetër (në të vërtetë, Routes nga OpenShift kanë ndikuar shumë në dizajnin e objekteve Ingress, të cilat tani mund të përdoren gjithashtu në OpenShift), por për «Hello World» tonë, dhe në të gjitha rastet e tjera, na mjafton një Route standard pa konfigurim shtesë.

Për të krijuar një FQDN të routuar për 'Hello World' (po, në OpenShift ka DNS të tij për routes sipas emrave të shërbimeve), ne thjesht do të ekzekutojmë expose për shërbimin tonë:

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

oc expose service quarkus-hello-world

Nëse shikojmë vetëm Route-n e sapokrijuar, atje mund të gjejmë FQDN dhe informacione të tjera rreth routimit:

oc get route

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

Dhe në fund, qasemi në shërbimin tonë nga shfletuesi:

Më fal, OpenShift, nuk të kemi vlerësuar mjaftueshëm dhe të kemi marrë për të dhënë.

Tani, kjo ishte me të vërtetë e lehtë!

Ne e duam Kubernetes dhe gjithçka që kjo teknologji na lejon të bëjmë, si dhe ne e duam thjeshtësinë dhe lehtësinë. Kubernetes u krijua për të thjeshtuar jashtëzakonisht operimin e kontejnerëve të shpërndarë dhe të shkallëzueshëm, por për implementimin e aplikacioneve, thjeshtësia e tij sot nuk mjafton. Këtu hyn në lojë OpenShift, i cili ecën me kohën dhe ofron Kubernetes të orientuar kryesisht drejt zhvilluesit. U investua shumë për të përshtatur platformën OpenShift pikërisht për zhvilluesin, duke përfshirë krijimin e mjeteve si S2I, ODI, Developer Portal, OpenShift Operator Framework, integrimin me IDE, Katalogët e Zhvilluesve, integrimin me Helm, monitorimin dhe shumë të tjera.

ShpresojmĂ« se ky artikull ishte i ĐžĐœŃ‚Đ”Ń€Đ”Ńançëm dhe i dobishĂ«m pĂ«r ju. Burime shtesĂ«, materiale dhe gjĂ«ra tĂ« tjera tĂ« dobishme pĂ«r zhvillimin nĂ« platformĂ«n OpenShift mund tĂ« gjenden nĂ« portalin Red Hat Developers.

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster