Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

Šis įrašas buvo parašytas, nes mūsų darbuotojai nemažai kalbėjosi su klientais apie programų kūrimą Kubernetes ir tokio kūrimo specifiką OpenShift.

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

Paprastai pradedame nuo tezės, kad „Kubernetes“ yra tik „Kubernetes“, o „OpenShift“ jau yra „Kubernetes“ platforma, tokia kaip „Microsoft AKS“ ar „Amazon EKS“. Kiekviena iš šių platformų turi savų privalumų, orientuotų į tam tikrą tikslinę auditoriją. O po to pokalbis jau perauga į konkrečių platformų stipriųjų ir silpnųjų pusių palyginimą.

Apskritai, mes galvojome parašyti šį įrašą su tokia išvestimi kaip „Klausyk, nesvarbu, kur paleisite kodą: „OpenShift“ ar „AKS“, „EKS“, kai kuriose tinkintose „Kubernetes“, taip, bet kurioje „Kubernetes“. (trumpiau pavadinkime KUK) „Tai tikrai paprasta ir ten, ir ten“.

Tada planavome paimti paprasčiausią „Hello World“ ir juo parodyti, kas yra bendra ir kuo skiriasi CMC ir „Red Hat OpenShift Container Platform“ (toliau – OCP arba tiesiog OpenShift).

Tačiau rašydami šį įrašą supratome, kad taip įpratome naudoti „OpenShift“, kad tiesiog nesuvokiame, kaip jis išaugo ir virto nuostabia platforma, kuri tapo daug daugiau nei tik Kubernetes platinimas. „OpenShift“ brandumą ir paprastumą esame linkę laikyti savaime suprantamu dalyku, tačiau nepastebime jo didingumo.

Apskritai atėjo laikas aktyviai atgailauti, o dabar žingsnis po žingsnio lyginsime mūsų „Hello World“ paleidimą KUK ir „OpenShift“ ir darysime tai kuo objektyviau (na, nebent kartais parodysime asmeninį požiūris į temą). Jei jus domina grynai subjektyvi nuomonė šiuo klausimu, galite ją perskaityti čia (EN). O šiame įraše pasiliksime prie faktų ir tik faktų.

Klasteriai

Taigi, mūsų „Hello World“ reikia grupių. Tiesiog pasakykime „ne“ jokiems viešiems debesims, kad nereikėtų mokėti už serverius, registrus, tinklus, duomenų perdavimą ir pan. Atitinkamai pasirenkame paprastą vieno mazgo klasterį Minikubas (KUK) ir Paruošti kodui konteineriai („OpenShift“ klasteriui). Abi šias parinktis įdiegti labai paprasta, tačiau nešiojamajame kompiuteryje reikia daug išteklių.

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

Surinkimas KUK-e

Taigi, eikime.

1 veiksmas. Sukurkite konteinerio vaizdą

Pradėkime nuo „Hello World“ diegimo minikube. Tam reikės:

  1. 1. Įdiegtas Docker.
  2. 2. Įdiegtas Git.
  3. 3. Įdiegtas Maven (iš tikrųjų šis projektas naudoja mvnw dvejetainį failą, todėl galite apsieiti ir be jo).
  4. 4. Tiesą sakant, pats šaltinis, t.y. saugyklos klonas github.com/gcolman/quarkus-hello-world.git

Pirmas žingsnis – sukurti Quarkus projektą. Neišsigąskite, jei niekada nesinaudojote Quarkus.io – tai paprasta. Jūs tiesiog pasirenkate komponentus, kuriuos norite naudoti projekte ("RestEasy", "Hibernate", "Amazon SQS", "Camel" ir kt.), o tada pats Quarkus, be jokio jūsų dalyvavimo, nustato "maven" archetipą ir viską deda į "github". Tai yra, tiesiogine prasme vienas pelės paspaudimas – ir viskas. Štai kodėl mes mylime Quarkus.

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

Paprasčiausias būdas sukurti „Hello World“ į konteinerinį vaizdą yra naudoti „Docker“ skirtus quarkus-maven plėtinius, kurie atliks visą reikiamą darbą. Atsiradus „Quarkus“, tai tapo tikrai lengva ir paprasta: pridėkite konteinerio vaizdo doko plėtinį ir galėsite kurti vaizdus naudodami „maven“ komandas.

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

Ir galiausiai mes kuriame savo įvaizdį naudodami Maven. Dėl to mūsų šaltinio kodas virsta paruoštu konteinerio vaizdu, kurį jau galima paleisti konteinerio vykdymo metu.

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

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

Tiesą sakant, tai yra viskas, dabar galite paleisti konteinerį naudodami docker run komandą, susieję mūsų paslaugą su 8080 prievadu, kad ją būtų galima pasiekti.

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

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

Pradėjus konteinerio egzempliorių, belieka su curl komanda patikrinti, ar mūsų paslauga veikia:

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

Taigi, viskas veikia, ir tai buvo tikrai lengva ir paprasta.

2 veiksmas – pateikite mūsų konteinerį į konteinerio vaizdų saugyklą

Kol kas mūsų sukurtas vaizdas yra saugomas vietinėje talpyklos saugykloje. Jei norime naudoti šį vaizdą savo KUK aplinkoje, turime jį įdėti į kokią nors kitą saugyklą. Kubernetes šių funkcijų neturi, todėl naudosime dockerhub. Nes, pirma, tai nemokama, o antra, tai daro (beveik) visi.

Tai taip pat labai paprasta ir čia reikia tik dockerhub paskyros.

Taigi, mes įdiegiame dockerhub ir siunčiame savo vaizdą ten.

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

3 veiksmas – paleiskite „Kubernetes“.

Yra daug būdų, kaip sudaryti kubernetes konfigūraciją, kad paleistumėte mūsų „Hello World“, tačiau mes naudosime paprasčiausius iš jų, nes esame tokie žmonės ...

Pirmiausia pradedame minikube klasterį:

minikube start

4 veiksmas – mūsų sudėtinio rodinio vaizdo diegimas

Dabar turime konvertuoti savo kodą ir konteinerio vaizdą į kubernetes konfigūraciją. Kitaip tariant, mums reikia rinkinio ir diegimo apibrėžimo, nukreipiančio į mūsų konteinerio vaizdą dockerhub. Vienas iš paprasčiausių būdų tai padaryti yra paleisti komandą sukurti diegimą, nukreipiančią į mūsų vaizdą:

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

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

Naudodami šią komandą nurodėme COOK sukurti diegimo konfigūraciją, kurioje turėtų būti mūsų konteinerio vaizdo pod specifikacija. Ši komanda taip pat pritaikys šią konfigūraciją mūsų minikube klasteriui ir sukurs diegimą, kuris atsisiųs mūsų konteinerio vaizdą ir paleis grupę klasteryje.

5 veiksmas – atidarykite prieigą prie mūsų paslaugos

Dabar, kai turime įdiegtą konteinerio vaizdą, laikas pagalvoti, kaip sukonfigūruoti išorinę prieigą prie šios „Restful“ paslaugos, kuri iš tikrųjų yra užprogramuota mūsų kode.

Čia yra daug būdų. Pavyzdžiui, galite naudoti komandą expose, kad automatiškai sukurtumėte atitinkamus Kubernetes komponentus, tokius kaip paslaugos ir galiniai taškai. Tiesą sakant, tai mes padarysime vykdydami dislokavimo objekto komandą:

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

Trumpam apsistokime ties „expose“ komandos parinktimi „-type“.

Kai atskleidžiame ir sukuriame komponentus, reikalingus mūsų paslaugai vykdyti, turime, be kita ko, turėti galimybę prisijungti iš išorės prie hello-quarkus tarnybos, kuri yra mūsų programinės įrangos apibrėžtame tinkle. Ir parametras tipas leidžia kurti ir prijungti tokius dalykus kaip apkrovos balansavimo priemonės, kad srautas būtų nukreiptas į tą tinklą.

Pavyzdžiui, rašymas type=LoadBalancer, automatiškai inicijuojame viešą debesies apkrovos balansavimo priemonę, kad prisijungtume prie mūsų „Kubernetes“ klasterio. Tai, žinoma, puiku, tačiau reikia suprasti, kad tokia konfigūracija bus glaudžiai susieta su konkrečiu viešuoju debesiu ir bus sunkiau ją perkelti iš vienos „Kubernetes“ egzempliorių skirtingose ​​aplinkose.

Mūsų pavyzdyje type=NodePort, tai yra, mūsų paslauga skambinama pagal mazgo IP adresą ir prievado numerį. Ši parinktis leidžia nenaudoti jokių viešųjų debesų, tačiau reikia atlikti keletą papildomų veiksmų. Pirma, jums reikia savo apkrovos balansavimo priemonės, todėl mes įdiegsime NGINX apkrovos balansavimo priemonę mūsų klasteryje.

6 veiksmas – nustatykite apkrovos balansavimo priemonę

„minikube“ turi daugybę platformos funkcijų, kurios leidžia lengvai sukurti išorinei prieigai reikalingus komponentus, pvz., įėjimo valdiklius. „Minikube“ pateikiamas kartu su „Nginx“ įėjimo valdikliu, ir viskas, ką turime padaryti, yra jį įjungti ir sukonfigūruoti.

minikube addons enable ingress

Dabar naudodami tik vieną komandą sukursime Nginx įėjimo valdiklį, kuris veiks mūsų minikube klasteryje:

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

7 veiksmas – nustatykite įėjimą

Dabar turime sukonfigūruoti „Nginx“ įėjimo valdiklį, kad priimtume „hello-quarkus“ užklausas.

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

Ir galiausiai turime pritaikyti šią konfigūraciją.

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

kubectl apply -f ingress.yml

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

Kadangi visa tai darome savo kompiuteryje, mes tiesiog pridedame savo mazgo IP adresą prie /etc/hosts failo, kad nukreiptume http užklausas į mūsų minikube į NGINX apkrovos balansavimo priemonę.

192.168.99.100 hello-quarkus.info

Viskas, dabar mūsų minikube paslauga pasiekiama iš išorės per Nginx įėjimo valdiklį.

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

Na, tai buvo lengva, tiesa? Ar ne tiek daug?

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

Paleisti naudojant „OpenShift“ (kodui paruoštus konteinerius)

O dabar pažiūrėkime, kaip visa tai daroma „Red Hat OpenShift Container Platform“ (OCP).

Kaip ir „minikube“ atveju, pasirenkame schemą su vieno mazgo „OpenShift“ grupe „Code Ready Containers“ (CRC) pavidalu. Anksčiau jis buvo vadinamas mini pamainomis ir buvo pagrįstas OpenShift Origin projektu, tačiau dabar jis yra CRC ir sukurtas remiantis Red Hat OpenShift konteinerių platforma.

Atsiprašome, mes negalime nepasakyti: „OpenShift yra puikus!

Iš pradžių galvojome parašyti, kad „OpenShift“ kūrimas niekuo nesiskiria nuo „Kubernetes“ kūrimo. Ir iš tikrųjų taip yra. Tačiau rašydami šį įrašą prisiminėme, kiek daug nereikalingų judesių turite atlikti, kai neturite „OpenShift“, todėl vėlgi, tai yra gražu. Mums patinka, kad viskas yra paprasta, o tai, kaip lengva įdiegti ir paleisti mūsų pavyzdį naudojant „OpenShift“, palyginti su „minikube“, paskatino mus parašyti šį įrašą.

Pereikime procesą ir pažiūrėkime, ką turime padaryti.

Taigi minikube pavyzdyje pradėjome nuo Docker... Palaukite, mums nebereikia įrenginyje įdiegti Docker.

Ir mums nereikia vietinio gito.
Ir Maven nereikia.
Ir jums nereikia ranka kurti konteinerio vaizdo.
Ir jums nereikia ieškoti jokios talpyklos vaizdų saugyklos.
Ir jums nereikia įdiegti įėjimo valdiklio.
Ir jums taip pat nereikia konfigūruoti įėjimo.

Ar tu supranti? Norint įdiegti ir paleisti programą naudojant „OpenShift“, nereikia nė vieno iš pirmiau nurodytų dalykų. O pats procesas yra toks.

1 veiksmas – „OpenShift“ klasterio paleidimas

Mes naudojame „Red Hat“ kodo paruoštus konteinerius, kurie iš esmės yra tas pats „Minikube“, bet tik su visu vieno mazgo „Openshift“ grupe.

crc start

2 veiksmas – sukurkite ir įdiekite programą „OpenShift“ klasteryje

Būtent šiame žingsnyje „OpenShift“ paprastumas ir patogumas pasireiškia visa savo šlove. Kaip ir visi „Kubernetes“ paskirstymai, turime daug būdų, kaip paleisti programą klasteryje. Ir, kaip ir KUK atveju, specialiai renkamės patį paprasčiausią.

„OpenShift“ visada buvo sukurta kaip platforma konteinerinėms programoms kurti ir paleisti. Konteinerių kūrimas visada buvo neatsiejama šios platformos dalis, todėl atitinkamoms užduotims atlikti yra daugybė papildomų Kubernetes išteklių.

Naudosime „OpenShift“ šaltinio 2 vaizdo (S2I) procesą, kuris turi kelis skirtingus būdus, kaip paimti šaltinį (kodą arba dvejetainius failus) ir paversti jį konteineriniu vaizdu, kuris veikia „OpenShift“ klasteryje.

Tam mums reikia dviejų dalykų:

  • Mūsų šaltinio kodas git saugykloje
  • Builder-vaizdas, kurio pagrindu bus atliktas surinkimas.

Yra daug tokių vaizdų, kuriuos prižiūri ir Red Hat, ir bendruomenė, ir mes naudosime OpenJDK vaizdą, na, nes aš kuriu Java programą.

S2I versiją galite paleisti iš „OpenShift Developer“ grafinės konsolės ir iš komandinės eilutės. Naudosime komandą new-app, nurodydami, kur gauti kūrėjo vaizdą ir šaltinio kodą.

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

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

Štai viskas, mūsų programa sukurta. Tai darydamas S2I procesas atliko šiuos veiksmus:

  • Sukūrė paslaugų rinkinį, skirtą įvairiems dalykams, susijusiems su programos kūrimu.
  • Sukūrė „OpenShift Build“ konfigūraciją.
  • Atsisiunčiau kūrėjo vaizdą į vidinį OpenShift docker registrą.
  • Klonuotas „Hello World“ į vietinę saugyklą.
  • Pamatė, kad ten yra maven pom, todėl sudarė programą su maven.
  • Sukurtas naujas konteinerio vaizdas, kuriame yra sukompiliuota „Java“ programa, ir įtrauktas šis vaizdas į vidinį konteinerio registrą.
  • Sukūrė „Kubernetes“ diegimą su priedo, paslaugos ir kt. specifikacijomis.
  • Paleistas diegimo sudėtinio rodinio vaizdas.
  • Pašalintas aptarnavimo modulis.

Šiame sąraše yra daug, tačiau svarbiausia yra tai, kad visas kūrimas vyksta tik OpenShift viduje, vidinis Docker registras yra OpenShift viduje, o kūrimo procesas sukuria visus Kubernetes komponentus ir paleidžia juos klasteryje.

Jei vizualiai stebite S2I paleidimą konsolėje, galite pamatyti, kaip kūrimo metu paleidžiamas kūrimo blokas.

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

O dabar pažvelkime į „builder pod“ žurnalus: pirma, ten galite pamatyti, kaip „maven“ atlieka savo darbą ir atsisiunčia priklausomybes, kad sukurtų mūsų „Java“ programą.

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

Užbaigus „maven“ kūrimą, pradedamas sudėtinio rodinio vaizdo kūrimas, o tada šis sukurtas vaizdas siunčiamas į vidinę saugyklą.

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

Viskas, surinkimo procesas baigtas. Dabar įsitikinkime, kad mūsų programos ankštys ir paslaugos paleisti klasteryje.

oc get service

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

Tai viskas. Ir yra tik viena komanda. Viskas, ką turime padaryti, tai pateikti šią paslaugą išorinei prieigai.

3 veiksmas – padarykite, kad paslauga būtų prieinama iš išorės

Kaip ir KUK atveju, „OpenShift“ platformoje mūsų „Hello World“ taip pat reikia maršrutizatoriaus, kuris nukreiptų išorinį srautą į paslaugą klasterio viduje. „OpenShift“ tai labai palengvina. Pirma, HAProxy maršruto parinkimo komponentas yra įdiegtas klasteryje pagal numatytuosius nustatymus (jis gali būti pakeistas į tą patį NGINX). Antra, yra specialūs ir labai konfigūruojami ištekliai, vadinami maršrutais, kurie primena Ingress objektus senuose geruose Kubernetes (iš tikrųjų OpenShift maršrutai padarė didelę įtaką Ingress objektų dizainui, kuriuos dabar galima naudoti OpenShift), bet mūsų „Sveiki. Pasaulis“, o beveik visais kitais atvejais mums užtenka standartinio Route be papildomos konfigūracijos.

Norėdami sukurti nukreipiamąjį FQDN „Hello World“ (taip, „OpenShiift“ turi savo DNS maršrutizavimui pagal paslaugų pavadinimus), mes tiesiog atskleidžiame savo paslaugą:

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

oc expose service quarkus-hello-world

Jei pažvelgsite į naujai sukurtą maršrutą, ten galite rasti FQDN ir kitą maršruto informaciją:

oc get route

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

Ir galiausiai savo paslaugą pasiekiame iš naršyklės:

Atsiprašau, OpenShift, mes nepakankamai tavęs įvertinome ir laikėme tave savaime suprantamu dalyku

Bet dabar tai buvo tikrai lengva!

Mums patinka „Kubernetes“ ir viskas, ką ši technologija leidžia padaryti, taip pat mėgstame paprastumą ir lengvumą. „Kubernetes“ buvo sukurta taip, kad paskirstytus, keičiamo dydžio konteinerius būtų neįtikėtinai lengva valdyti, tačiau jo paprastumo nebepakanka, kad šiandien būtų galima pradėti gaminti programas. Štai čia pradeda veikti „OpenShift“, kuris neatsilieka nuo laiko ir siūlo „Kubernetes“, daugiausia dėmesio skiriantį kūrėjui. Įdėta daug pastangų, kad „OpenShift“ platforma būtų pritaikyta specialiai kūrėjui, įskaitant tokių įrankių kaip S2I, ODI, kūrėjų portalo, „OpenShift Operator Framework“, IDE integravimo, kūrėjų katalogų, „Helm“ integravimo, stebėjimo ir daugelio kitų kūrimą.

Tikimės, kad šis straipsnis jums buvo įdomus ir naudingas. Portale galite rasti papildomų išteklių, medžiagų ir kitų dalykų, naudingų kuriant OpenShift platformą „Red Hat“ kūrėjai.

Šaltinis: www.habr.com

Добавить комментарий