Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

Þessi færsla var skrifuð vegna þess að starfsfólk okkar átti töluvert af samtölum við viðskiptavini um þróun forrita á Kubernetes og sérstöðu slíkrar þróunar á OpenShift.

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

Við byrjum venjulega á þeirri ritgerð að Kubernetes sé bara Kubernetes og OpenShift sé nú þegar Kubernetes vettvangur, eins og Microsoft AKS eða Amazon EKS. Hver af þessum kerfum hefur sína kosti, með áherslu á tiltekinn markhóp. Og eftir það rennur samtalið nú þegar í samanburð á styrkleikum og veikleikum tiltekinna vettvanga.

Almennt datt okkur í hug að skrifa þessa færslu með úttak eins og „Heyrðu, það skiptir ekki máli hvar þú keyrir kóðann, á OpenShift eða á AKS, á EKS, á sumum sérsniðnum Kubernetes, já á hvaða Kubernetes sem er. (fyrir stuttu köllum við það KUK) „Þetta er mjög einfalt, bæði þar og þar.

Síðan ætluðum við að taka einfaldasta „Hello World“ og nota það til að sýna hvað er algengt og hver er munurinn á CMC og Red Hat OpenShift Container Platform (hér eftir OCP eða einfaldlega OpenShift).

Við gerðum þessa færslu hins vegar komumst við að því að við erum orðin svo vön að nota OpenShift að við gerum okkur einfaldlega ekki grein fyrir því hvernig það hefur vaxið og breyst í ótrúlegan vettvang sem er orðið miklu meira en bara Kubernetes dreifing. Við höfum tilhneigingu til að taka þroska og einfaldleika OpenShift sem sjálfsögðum hlut, á sama tíma og við lítum yfir glæsileika þess.

Almennt séð er kominn tími á virka iðrun og nú munum við skref fyrir skref bera saman gangsetningu „Hello World“ okkar á KUK og á OpenShift, og við munum gera það eins hlutlægt og mögulegt er (ja, nema stundum að sýna persónulega viðhorf til viðfangsefnisins). Ef þú hefur áhuga á eingöngu huglægri skoðun á þessu máli, þá geturðu lesið hana hér (EN). Og í þessari færslu munum við halda okkur við staðreyndir og aðeins staðreyndir.

Klasar

Svo, „Halló heimur“ okkar krefst klasa. Við segjum strax „nei“ við öllum opinberum skýjum, til að borga ekki fyrir netþjóna, skrár, net, gagnaflutning o.s.frv. Í samræmi við það veljum við einfaldan einn-hnúta þyrping á Minikube (fyrir KUK) og Kóði tilbúnir ílát (fyrir OpenShift klasa). Báðir þessir valkostir eru mjög auðveldir í uppsetningu, en krefjast talsverðs fjármagns á fartölvunni þinni.

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

Samkoma á KUK-e

Svo skulum fara.

Skref 1 - byggja upp gámamyndina okkar

Byrjum á því að dreifa „Halló heimur“ okkar á minikube. Þetta mun krefjast:

  1. 1. Docker uppsett.
  2. 2. Uppsett Git.
  3. 3. Uppsett Maven (reyndar notar þetta verkefni mvnw binary, svo þú getur verið án þess).
  4. 4. Reyndar er heimildin sjálf, þ.e. geymsluklón github.com/gcolman/quarkus-hello-world.git

Fyrsta skrefið er að búa til Quarkus verkefni. Ekki vera hræddur ef þú hefur aldrei notað Quarkus.io - það er auðvelt. Þú velur bara þá íhluti sem þú vilt nota í verkefninu (RestEasy, Hibernate, Amazon SQS, Camel, o.s.frv.), og síðan setur Quarkus sjálft, án nokkurrar þátttöku þinnar, upp maven erkitýpuna og setur allt á github. Það er bókstaflega einn smellur með músinni - og þú ert búinn. Þess vegna elskum við Quarkus.

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

Auðveldasta leiðin til að byggja „Halló heiminn“ okkar inn í gámamynd er að nota quarkus-maven viðbæturnar fyrir Docker, sem mun vinna alla nauðsynlega vinnu. Með tilkomu Quarkus er þetta orðið mjög auðvelt og einfalt: bættu við container-image-docer viðbótinni og þú getur búið til myndir með maven skipunum.

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

Og að lokum byggjum við ímynd okkar með Maven. Fyrir vikið breytist frumkóði okkar í tilbúna gámamynd, sem nú þegar er hægt að keyra í gámatímanum.

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

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

Það er allt, nú geturðu ræst gáminn með docker run skipuninni, kortlagt þjónustu okkar við port 8080 svo hægt sé að nálgast hana.

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

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

Eftir að gámatilvikið hefur byrjað er allt sem eftir er að athuga með krulluskipuninni að þjónustan okkar sé í gangi:

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

Svo, allt virkar, og það var mjög auðvelt og einfalt.

Skref 2 – sendu gáminn okkar í gámamyndageymsluna

Í bili er myndin sem við bjuggum til geymd á staðnum í staðbundinni gámageymslu okkar. Ef við viljum nota þessa mynd í KUK umhverfi okkar, þá þurfum við að setja hana í einhverja aðra geymslu. Kubernetes hefur ekki þessa eiginleika, svo við munum nota dockerhub. Vegna þess að í fyrsta lagi er þetta ókeypis og í öðru lagi gera það (næstum) allir.

Þetta er líka mjög einfalt og aðeins þarf dockerhub reikning hér.

Svo við setjum upp dockerhub og sendum myndina okkar þangað.

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

Skref 3 - Byrjaðu Kubernetes

Það eru margar leiðir til að setja saman kubernetes stillingar til að keyra „Halló heimur“ okkar, en við munum nota einfaldasta af þeim, vegna þess að við erum þannig fólk ...

Fyrst byrjum við minikube þyrpinguna:

minikube start

Skref 4 - Uppsetning gámamyndarinnar okkar

Nú þurfum við að breyta kóðanum okkar og gámamyndinni í kubernetes stillingar. Með öðrum orðum, við þurfum belg og dreifingarskilgreiningu sem bendir á gámamyndina okkar á dockerhub. Ein auðveldasta leiðin til að gera þetta er að keyra create deployment skipunina sem bendir á myndina okkar:

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

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

Með þessari skipun sögðum við COO okkar að búa til dreifingarstillingu, sem ætti að innihalda belgforskriftina fyrir gámamyndina okkar. Þessi skipun mun einnig nota þessa stillingu á minikube þyrpinguna okkar og búa til dreifingu sem mun hlaða niður gámamyndinni okkar og ræsa hólfið í þyrpingunni.

Skref 5 - opinn aðgangur að þjónustu okkar

Nú þegar við erum með dreifða gámamynd er kominn tími til að hugsa um hvernig eigi að stilla ytri aðgang að þessari Restful þjónustu, sem í raun er forrituð í kóðanum okkar.

Það eru margar leiðir hér. Til dæmis geturðu notað afhjúpunarskipunina til að búa sjálfkrafa til viðeigandi Kubernetes íhluti eins og þjónustu og endapunkta. Reyndar, þetta er það sem við munum gera með því að framkvæma afhjúpunarskipunina fyrir dreifingarhlutinn okkar:

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

Við skulum dvelja við „-gerð“ valmöguleikann í afhjúpunarskipuninni í smá stund.

Þegar við afhjúpum og búum til þá íhluti sem þarf til að keyra þjónustuna okkar þurfum við meðal annars að geta tengst utan frá við hello-quarkus þjónustuna sem situr inni í hugbúnaðarskilgreindu neti okkar. Og breytu tegund gerir okkur kleift að búa til og tengja hluti eins og álagsjafnara til að beina umferð á þetta net.

Til dæmis að skrifa type=LoadBalancer, frumstillum við sjálfkrafa almenningsskýjahleðslujafnara til að tengjast Kubernetes þyrpingunni okkar. Þetta er auðvitað frábært, en þú þarft að skilja að slík uppsetning verður þétt bundin við tiltekið opinbert ský og það verður erfiðara að flytja það á milli Kubernetes tilvika í mismunandi umhverfi.

Í okkar dæmi type=NodePort, það er, þjónusta okkar er aðgengileg með IP tölu hnútsins og gáttarnúmeri. Þessi valkostur gerir þér kleift að nota engin opinber ský, en krefst fjölda viðbótarskrefa. Í fyrsta lagi þarftu þinn eigin álagsjafnara, þannig að við munum setja NGINX álagsjafnara í þyrpinguna okkar.

Skref 6 - Settu upp álagsjafnara

minikube hefur fjölda vettvangseiginleika sem gera það auðvelt að búa til þá íhluti sem þú þarft fyrir ytri aðgang, svo sem inngöngustýringar. Minikube kemur með Nginx inngangsstýringu og allt sem við þurfum að gera er að virkja það og stilla það.

minikube addons enable ingress

Nú munum við búa til Nginx inngangsstýringu með aðeins einni skipun, sem mun virka inni í minikube þyrpingunni okkar:

ingress-nginx-controller-69ccf5d9d8-j5gs9 1/1 Running 1 33m

Skref 7 - Settu upp inngönguna

Nú þurfum við að stilla Nginx inngöngustýringu til að samþykkja halló-quarkus beiðnir.

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

Og að lokum þurfum við að beita þessari stillingu.

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

kubectl apply -f ingress.yml

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

Þar sem við erum að gera allt þetta á okkar eigin tölvu, bætum við einfaldlega IP tölu hnútsins okkar við /etc/ hosts skrána til að beina http beiðnir til minikube okkar yfir í NGINX hleðslujafnara.

192.168.99.100 hello-quarkus.info

Það er það, nú er minikube þjónustan okkar fáanleg utan frá í gegnum Nginx inngöngustýringu.

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

Jæja, þetta var auðvelt, ekki satt? Eða ekki svo mikið?

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

Keyra á OpenShift (Code Ready Containers)

Og nú skulum við sjá hvernig það er allt gert á Red Hat OpenShift Container Platform (OCP).

Eins og í tilviki minikube, veljum við kerfi með einn-hnút OpenShift þyrping í formi Code Ready Containers (CRC). Það var áður kallað minishift og var byggt á OpenShift Origin verkefninu, en nú er það CRC og byggt á Red Hat's OpenShift Container Platform.

Hér, því miður, við getum ekki annað en sagt: "OpenShift er frábært!"

Upphaflega datt okkur í hug að skrifa að þróun á OpenShift væri ekkert frábrugðin þróun á Kubernetes. Og í raun er þetta svona. En í því ferli að skrifa þessa færslu mundum við hversu margar aukahreyfingar þú þarft að gera þegar þú ert ekki með OpenShift, og þess vegna er það aftur dásamlegt. Við elskum það þegar allt er gert auðveldlega og hversu auðvelt dæmið okkar er að dreifa og keyra á OpenShift samanborið við minikube er það sem varð til þess að við skrifuðum þessa færslu.

Við skulum hlaupa í gegnum ferlið og sjá hvað við þurfum að gera.

Svo í minikube dæminu byrjuðum við með Docker... Bíddu, við þurfum ekki Docker uppsett á vélinni lengur.

Og við þurfum ekki staðbundið git.
Og Maven er ekki þörf.
Og þú þarft ekki að búa til gámamynd með höndunum.
Og þú þarft ekki að leita að neinni geymslu með gámamyndum.
Og þú þarft ekki að setja inn innrásarstýringu.
Og þú þarft ekki að stilla inngöngu heldur.

Þú skilur, ekki satt? Til að dreifa og keyra forritið okkar á OpenShift þarftu ekkert af ofangreindu. Og ferlið sjálft lítur svona út.

Skref 1 - Opnaðu OpenShift þyrpinguna þína

Við notum Code Ready Containers frá Red Hat, sem er í meginatriðum sami Minikube, en aðeins með fullum einshnúts Openshift klasa.

crc start

Skref 2 - Búðu til og dreifðu forritinu í OpenShift þyrpinguna

Það er á þessu skrefi sem einfaldleiki og þægindi OpenShift koma í ljós í allri sinni dýrð. Eins og með allar Kubernetes dreifingar höfum við margar leiðir til að keyra forrit í klasa. Og, eins og í tilfelli KUK, veljum við sérstaklega þann einfaldasta.

OpenShift hefur alltaf verið smíðaður sem vettvangur til að byggja og keyra gámaforrit. Að byggja gáma hefur alltaf verið óaðskiljanlegur hluti af þessum vettvangi, svo það eru fullt af Kubernetes-tilföngum til viðbótar fyrir samsvarandi verkefni.

Við munum nota OpenShift's Source 2 Image (S2I) ferli, sem hefur nokkrar mismunandi leiðir til að taka uppruna okkar (kóða eða tvöfaldur) og breyta því í gámamynd sem keyrir á OpenShift klasa.

Til þess þurfum við tvennt:

  • Frumkóði okkar í git geymslunni
  • Byggingarmynd á grundvelli þess sem byggingin verður framkvæmd.

Það eru til margar slíkar myndir, viðhaldið bæði af Red Hat og samfélaginu, og við munum nota OpenJDK myndina, þar sem ég er að smíða Java forrit.

Þú getur keyrt S2I byggingu bæði frá OpenShift Developer grafísku stjórnborðinu og frá skipanalínunni. Við munum nota new-app skipunina og segja henni hvar á að fá byggingarmyndina og frumkóðann okkar.

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

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

Það er það, forritið okkar er búið til. Með því að gera það gerði S2I ferlið eftirfarandi hluti:

  • Búið til þjónustuuppbyggingarpod fyrir alls kyns hluti sem tengjast smíði forritsins.
  • Bjó til OpenShift Build stillingar.
  • Ég hlaðið niður byggingarmyndinni í innri OpenShift docker skrásetninguna.
  • Klónað „Hello World“ í staðbundna geymslu.
  • Sá að það var maven pom þarna inni og setti svo saman appið með maven.
  • Búið til nýja gámamynd sem inniheldur samsetta Java forritið og setti þessa mynd inn í innri gámaskrána.
  • Búið til Kubernetes dreifingu með forskriftum fyrir hólf, þjónustu osfrv.
  • Ég byrjaði að dreifa gámamyndinni.
  • Fjarlægði þjónustubyggingar-pod.

Það er margt á þessum lista, en aðalatriðið er að öll byggingin fer eingöngu fram inni í OpenShift, innri Docker skrásetningin er inni í OpenShift og smíðaferlið býr til alla Kubernetes íhluti og keyrir þá á klasanum.

Ef þú fylgist sjónrænt með ræsingu S2I í stjórnborðinu geturðu séð hvernig byggingapodurinn er ræstur meðan á smíði stendur.

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

Og nú skulum við kíkja á annála smiðjubelgsins: Í fyrsta lagi, þar geturðu séð hvernig Maven vinnur starf sitt og hleður niður ósjálfstæði til að byggja upp Java forritið okkar.

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

Eftir að maven-byggingunni er lokið er byrjað á smíði gámamyndarinnar og síðan er þessi byggða mynd send í innri geymsluna.

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

Það er það, byggingarferlið er lokið. Nú skulum við ganga úr skugga um að belg og þjónusta forritsins okkar séu í gangi í þyrpingunni.

oc get service

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

Það er allt og sumt. Og bara eitt lið. Allt sem við þurfum að gera er að afhjúpa þessa þjónustu fyrir aðgang að utan.

Skref 3 - gera þjónustuna óvarða fyrir aðgang að utan

Eins og í tilfelli KUK, á OpenShift vettvangnum, þarf „Halló heimur“ okkar einnig beini til að beina utanaðkomandi umferð að þjónustu inni í klasanum. Í OpenShift gerir þetta það mjög auðvelt. Í fyrsta lagi er HAProxy leiðarhlutinn sjálfgefið uppsettur í þyrpingunni (hægt að breyta honum í sama NGINX). Í öðru lagi eru sérstök og mjög stillanleg úrræði sem kallast Routes, sem minna á Ingress hluti í gömlu góðu Kubernetes (reyndar höfðu leiðir OpenShift mikil áhrif á hönnun Ingress hluti, sem nú er hægt að nota í OpenShift) , en fyrir okkar "Halló World", og í næstum öllum öðrum tilfellum er staðlað leið nóg fyrir okkur án viðbótarstillingar.

Til að búa til leiðanlegt FQDN fyrir „Hello World“ (já, OpenShiift hefur sitt eigið DNS til að beina eftir þjónustuheitum), afhjúpum við einfaldlega þjónustu okkar:

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

oc expose service quarkus-hello-world

Ef þú skoðar nýstofnaða leið, þá geturðu fundið FQDN og aðrar leiðarupplýsingar þar:

oc get route

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

Og að lokum fáum við aðgang að þjónustu okkar úr vafranum:

Fyrirgefðu, OpenShift, við kunnum ekki að meta þig nógu mikið og tókum þér sem sjálfsögðum hlut

En nú var þetta mjög auðvelt!

Við elskum Kubernetes og allt sem þessi tækni gerir þér kleift að gera, og við elskum líka einfaldleika og léttleika. Kubernetes var hannað til að gera dreifða, stigstærða ílát ótrúlega auðveld í notkun, en einfaldleiki þeirra er ekki lengur nóg til að koma forritum í framleiðslu í dag. Þetta er þar sem OpenShift kemur við sögu, fylgist með tímanum og býður upp á þróunarmiðaða Kubernetes. Mikið átak hefur verið lagt í að sérsníða OpenShift vettvanginn sérstaklega fyrir þróunaraðilann, þar á meðal að búa til verkfæri eins og S2I, ODI, Developer Portal, OpenShift Operator Framework, IDE samþættingu, þróunarskrár, Helm samþættingu, eftirlit og mörg önnur.

Við vonum að þessi grein hafi verið áhugaverð og gagnleg fyrir þig. Þú getur fundið frekari úrræði, efni og annað gagnlegt fyrir þróun á OpenShift pallinum á vefsíðunni Red Hat hönnuðir.

Heimild: www.habr.com

Bæta við athugasemd