Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

Šis ieraksts tika uzrakstīts, jo mūsu darbiniekiem bija diezgan daudz sarunu ar klientiem par aplikāciju izstrādi Kubernetes un Ŕādas izstrādes specifiku OpenShift.

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

Mēs parasti sākam ar tēzi, ka Kubernetes ir tikai Kubernetes, un OpenShift jau ir Kubernetes platforma, piemēram, Microsoft AKS vai Amazon EKS. Katrai no Ŕīm platformām ir savas priekÅ”rocÄ«bas, kas vērstas uz konkrētu mērÄ·auditoriju. Un pēc tam saruna pārvērÅ”as par konkrētu platformu stipro un vājo puÅ”u salÄ«dzināŔanu.

Kopumā mēs domājām rakstÄ«t Å”o ziņu ar tādu secinājumu kā ā€œKlausies, nav svarÄ«gi, kur palaist kodu, OpenShift vai AKS, EKS, dažās pielāgotās Kubernetes vai jebkurā Kubernetes ierÄ«cē. (Ä«suma labad sauksim to par KUK) "Tas ir patieŔām vienkārÅ”i gan tur, gan tur."

Tad mēs plānojām paņemt vienkārŔāko ā€œHello Worldā€ un izmantot tās piemēru, lai parādÄ«tu, kas ir kopÄ«gs un ar ko atŔķiras KUC un Red Hat OpenShift Container Platform (turpmāk OCP vai vienkārÅ”i OpenShift).

Tomēr, rakstot Å”o ziņu, mēs sapratām, ka esam tik ilgi pieraduÅ”i izmantot OpenShift, ka vienkārÅ”i neapzinājāmies, kā tā ir izaugusi un pārvērtusies par pārsteidzoÅ”u platformu, kas kļuva daudz vairāk nekā tikai Kubernetes izplatÄ«Å”ana. Mums ir tendence uzskatÄ«t OpenShift briedumu un vienkārŔību par paÅ”saprotamu un aizmirst par tās spožumu.

Kopumā ir pienācis laiks aktÄ«vai grēku nožēlai, un tagad mēs soli pa solim salÄ«dzināsim mÅ«su ā€œHello Worldā€ nodoÅ”anu ekspluatācijā KUK un OpenShift, un mēs to darÄ«sim pēc iespējas objektÄ«vi (nu, izņemot dažkārt parādot personiskā attieksme pret tēmu). Ja jÅ«s interesē tÄ«ri subjektÄ«vs viedoklis par Å”o jautājumu, varat to izlasÄ«t Å”eit (EN). Un Å”ajā ierakstā mēs paliksim pie faktiem un tikai faktiem.

Kopas

Tātad mÅ«su ā€œSveika pasauleā€ prasa kopas. Mēs nekavējoties pateiksim ā€œnēā€ jebkuriem publiskajiem mākoņiem, lai nemaksātu par serveriem, reÄ£istriem, tÄ«kliem, datu pārsÅ«tÄ«Å”anu utt. AttiecÄ«gi mēs izvēlamies vienkārÅ”u viena mezgla kopu Minikube (par KUK) un Kodu gatavi konteineri (OpenShift klasterim). Abas Ŕīs opcijas ir patieŔām viegli instalējamas, taču tām bÅ«s nepiecieÅ”ams diezgan daudz resursu jÅ«su klēpjdatorā.

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

Montāža uz KUK-e

Tātad, ejam.

1. darbÄ«ba ā€“ konteinera attēla izveide

Sāksim ar mÅ«su ā€œHello Worldā€ izvietoÅ”anu minikube. Lai to izdarÄ«tu, jums bÅ«s nepiecieÅ”ams:

  1. 1. Docker instalēts.
  2. 2. Git instalēts.
  3. 3. Instalēts Maven (patiesÄ«bā Å”ajā projektā tiek izmantots mvnw binārs, tāpēc var iztikt bez tā).
  4. 4. Faktiski pats avots, t.i. repozitorija klons github.com/gcolman/quarkus-hello-world.git

Pirmais solis ir izveidot Quarkus projektu. Nebaidieties, ja nekad neesat strādājis ar Quarkus.io ā€” tas ir vienkārÅ”i. JÅ«s vienkārÅ”i izvēlaties komponentus, kurus vēlaties izmantot projektā (RestEasy, Hibernate, Amazon SQS, Camel utt.), un pēc tam pats Quarkus bez jÅ«su lÄ«dzdalÄ«bas konfigurē maven arhetipu un visu ievieto github. Tas ir, burtiski viens peles klikŔķis, un esat pabeidzis. Tāpēc mēs mÄ«lam Quarkus.

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

VienkārŔākais veids, kā izveidot mÅ«su ā€œHello Worldā€ konteinera attēlu, ir izmantot Docker paplaÅ”inājumus quarkus-maven, kas veiks visu nepiecieÅ”amo darbu. LÄ«dz ar Quarkus parādÄ«Å”anos tas ir kļuvis patieŔām viegli un vienkārÅ”i: pievienojiet paplaÅ”inājumu konteiners-attēla-docker un varat izveidot attēlus, izmantojot komandas maven.

./mvnw quarkus:add-extension -Dextensions=ā€container-image-dockerā€

Visbeidzot, mēs veidojam savu tēlu, izmantojot Maven. Rezultātā mÅ«su pirmkods pārvērÅ”as par gatavu konteinera attēlu, ko jau var palaist konteinera izpildlaika vidē.

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

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

Tas arī viss. Tagad varat palaist konteineru ar docker run komandu, kartējot mūsu pakalpojumu ar portu 8080, lai tam varētu piekļūt.

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

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

Pēc konteinera instances palaiÅ”anas atliek tikai pārbaudÄ«t ar curl komandu, vai mÅ«su pakalpojums darbojas:

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

Tātad viss darbojas, un tas bija patieŔām viegli un vienkārŔi.

2. darbÄ«ba ā€“ nosÅ«tiet mÅ«su konteineru uz konteinera attēlu krātuvi

Pagaidām mÅ«su izveidotais attēls tiek glabāts lokāli, mÅ«su vietējā konteineru krātuvē. Ja mēs vēlamies izmantot Å”o attēlu savā COOK vidē, tad tas ir jāievieto kādā citā repozitorijā. Kubernetes Ŕādu funkciju nav, tāpēc izmantosim dockerhub. Jo, pirmkārt, tas ir bez maksas, otrkārt, to dara (gandrÄ«z) visi.

Tas ir arī ļoti vienkārŔi, un viss, kas jums nepiecieŔams, ir Dockerhub konts.

Tātad, mēs instalējam dockerhub un nosūtām tur savu attēlu.

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

3. darbÄ«ba ā€“ palaidiet Kubernetes

Ir daudz veidu, kā salikt kubernetes konfigurāciju, lai palaistu mÅ«su ā€œHello Worldā€, taču mēs izmantosim vienkārŔāko no tiem, tādi mēs esam...

Vispirms palaidīsim minikube klasteru:

minikube start

4. darbÄ«ba ā€” izvietojiet mÅ«su konteinera attēlu

Tagad mums ir jāpārvērÅ” mÅ«su kods un konteinera attēls kubernetes konfigurācijās. Citiem vārdiem sakot, mums ir nepiecieÅ”ama podziņa un izvietoÅ”anas definÄ«cija, kas norāda uz mÅ«su konteinera attēlu vietnē Dockerhub. Viens no vienkārŔākajiem veidiem, kā to izdarÄ«t, ir palaist komandu izveidot izvietoÅ”anu, kas norāda uz mÅ«su attēlu:

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

kubectl create deployment hello-quarkus ā€” image =gcolman/quarkus-hello-world:1.0.0-SNAPSHOT

Ar Å”o komandu mēs likām savam COO izveidot izvietoÅ”anas konfigurāciju, kurā bÅ«tu jāietver mÅ«su konteinera attēla pod specifikācija. Å Ä« komanda piemēros Å”o konfigurāciju arÄ« mÅ«su minikube klasterim un izveidos izvietoÅ”anu, kas lejupielādēs mÅ«su konteinera attēlu un palaidÄ«s kopu klasterÄ«.

5. darbÄ«ba ā€“ atveriet piekļuvi mÅ«su pakalpojumam

Tagad, kad mums ir izvietots konteinera attēls, ir pienācis laiks domāt par to, kā konfigurēt ārējo piekļuvi Å”im pakalpojumam Restful, kas faktiski ir ieprogrammēts mÅ«su kodā.

Å eit ir daudz veidu. Piemēram, varat izmantot komandu exose, lai automātiski izveidotu atbilstoÅ”os Kubernetes komponentus, piemēram, pakalpojumus un galapunktus. Faktiski tas ir tas, ko mēs darÄ«sim, izpildot mÅ«su izvietoÅ”anas objekta eksponÄ“Å”anas komandu:

kubectl expose deployment hello-quarkus ā€” type=NodePort ā€” port=8080

Atvēlēsim brÄ«di, lai apskatÄ«tu komandas eksponÄ“Å”anas opciju "-type".

Kad mēs atklājam un izveidojam komponentus, kas nepiecieÅ”ami mÅ«su pakalpojuma palaiÅ”anai, mums, cita starpā, ir jāspēj no ārpuses izveidot savienojumu ar pakalpojumu hello-quarkus, kas atrodas mÅ«su programmatÅ«ras definētajā tÄ«klā. Un parametrs tips ļauj mums izveidot un savienot lietas, piemēram, slodzes balansētājus, lai novirzÄ«tu trafiku uz Å”o tÄ«klu.

Piemēram, rakstot tips=LoadBalancer, mēs automātiski nodroÅ”inām slodzes balansētāju publiskajā mākonÄ«, lai izveidotu savienojumu ar mÅ«su Kubernetes klasteru. Tas, protams, ir lieliski, taču jums ir jāsaprot, ka Ŕāda konfigurācija bÅ«s stingri piesaistÄ«ta konkrētam publiskam mākoni un to bÅ«s grÅ«tāk pārsÅ«tÄ«t starp Kubernetes gadÄ«jumiem dažādās vidēs.

MÅ«su piemērā type=NodePort, tas ir, mÅ«su pakalpojumam var piekļūt, izmantojot mezgla IP adresi un porta numuru. Å Ä« opcija ļauj neizmantot publiskos mākoņus, taču tai ir nepiecieÅ”amas vairākas papildu darbÄ«bas. Pirmkārt, jums ir nepiecieÅ”ams savs slodzes balansētājs, tāpēc mēs izvietosim NGINX slodzes balansētāju mÅ«su klasterÄ«.

6. solis ā€“ uzstādiet slodzes balansētāju

minikube ir vairākas platformas funkcijas, kas atvieglo ārēji pieejamu komponentu, piemēram, ieejas kontrolleru, izveidi. Minikube ir komplektā ar Nginx ieejas kontrolieri, un viss, kas mums jādara, ir tas jāiespējo un jākonfigurē.

minikube addons enable ingress

Tagad mēs izveidosim Nginx ieejas kontrolieri tikai ar vienu komandu, kas darbosies mūsu minikube klasterī:

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

7. darbÄ«ba ā€“ ieejas iestatÄ«Å”ana

Tagad mums ir jākonfigurē Nginx ieejas kontrolleris, lai tas pieņemtu hello-quarkus pieprasījumus.

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

Un visbeidzot, mums ir jāpiemēro Ŕī konfigurācija.

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

kubectl apply -f ingress.yml

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

Tā kā mēs to visu darām savā datorā, mēs vienkārÅ”i pievienojam sava mezgla IP adresi failam /etc/ hosts, lai http pieprasÄ«jumus novirzÄ«tu uz mÅ«su minikube uz NGINX slodzes balansētāju.

192.168.99.100 hello-quarkus.info

Tas arī viss, tagad mūsu minikube pakalpojums ir pieejams ārēji, izmantojot Nginx ieejas kontrolleri.

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

Nu, tas bija viegli, vai ne? Vai ne tik daudz?

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

Darbojas ar OpenShift (kodam gatavi konteineri)

Tagad redzēsim, kā tas viss tiek darīts Red Hat OpenShift konteineru platformā (OCP).

Tāpat kā minikube gadÄ«jumā, mēs izvēlamies viena mezgla OpenShift klastera dizainu Code Ready Containers (CRC) formā. IepriekÅ” tas tika saukts par minishift un tika balstÄ«ts uz OpenShift Origin projektu, bet tagad tas ir CRC un veidots uz Red Hat OpenShift konteineru platformas.

Å eit mēs, atvainojiet, nevaram nepateikt: ā€œOpenShift ir brÄ«niŔķīgs!ā€

Sākotnēji mēs domājām rakstÄ«t, ka izstrāde OpenShift neatŔķiras no izstrādes Kubernetes. Un bÅ«tÄ«bā tas tā ir. Bet rakstot Å”o ziņu, mēs atcerējāmies, cik daudz papildu kustÄ«bu jums ir jāveic, ja jums nav OpenShift, un tāpēc tas atkal ir brÄ«niŔķīgi. Mums patÄ«k, kad viss tiek darÄ«ts viegli, un tas, cik viegli mÅ«su piemēru ir izvietot un palaist OpenShift salÄ«dzinājumā ar minikube, pamudināja mÅ«s uzrakstÄ«t Å”o ziņu.

Iesim cauri procesam un redzēsim, kas mums jādara.

Tātad minikube piemērā mēs sākām ar Docker... Pagaidiet, mums vairs nav nepiecieÅ”ams Docker instalēts maŔīnā.

Un mums nav vajadzīgs vietējais ģīmis.
Un Mavens nav vajadzīgs.
Un jums nav jāizveido konteinera attēls ar savām rokām.
Un jums nav jāmeklē konteinera attēlu krātuve.
Un nav nepiecieŔams uzstādīt ieejas kontrolieri.
Un jums arī nav jākonfigurē ieeja.

JÅ«s saprotat, vai ne? Lai izvietotu un palaistu mÅ«su lietojumprogrammu OpenShift, jums nav nepiecieÅ”ams neviens no iepriekÅ” minētajiem. Un pats process izskatās Ŕādi.

1. darbÄ«ba ā€“ palaidiet savu OpenShift klasteru

Mēs izmantojam Code Ready Containers no Red Hat, kas būtībā ir tas pats Minikube, bet tikai ar pilnvērtīgu viena mezgla Openshift klasteru.

crc start

2. darbÄ«ba ā€” izveidojiet un izvietojiet lietojumprogrammu OpenShift klasterÄ«

TieÅ”i Å”ajā posmā OpenShift vienkārŔība un ērtÄ«bas tiek atklātas visā tās krāŔņumā. Tāpat kā ar visiem Kubernetes izplatÄ«jumiem, mums ir daudz veidu, kā palaist lietojumprogrammu klasterÄ«. Un, tāpat kā KUK gadÄ«jumā, mēs Ä«paÅ”i izvēlamies vienkārŔāko.

OpenShift vienmēr ir veidota kā platforma konteinerizētu lietojumprogrammu izveidei un palaiÅ”anai. Konteineru veidoÅ”ana vienmēr ir bijusi Ŕīs platformas neatņemama sastāvdaļa, tāpēc ar to saistÄ«tiem uzdevumiem ir pieejams daudz papildu Kubernetes resursu.

Mēs izmantosim OpenShift Source 2 Image (S2I) procesu, kuram ir vairāki dažādi veidi, kā iegÅ«t mÅ«su avotu (kodu vai bināros failus) un pārvērst to konteinerizētā attēlā, kas darbojas OpenShift klasterÄ«.

Lai to izdarītu, mums ir vajadzīgas divas lietas:

  • MÅ«su pirmkods atrodas git repozitorijā
  • BÅ«vnieka attēls, uz kura pamata tiks veikta bÅ«vniecÄ«ba.

Ir daudz Ŕādu attēlu, ko uztur gan Red Hat, gan kopienas lÄ«menÄ«, un mēs izmantosim OpenJDK attēlu, jo es veidoju Java lietojumprogrammu.

S2I būvējumu var palaist gan no OpenShift Developer grafiskās konsoles, gan no komandrindas. Mēs izmantosim komandu new-app, norādot, kur iegūt veidotāja attēlu un mūsu avota kodu.

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

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

Tas arī viss, mūsu lietojumprogramma ir izveidota. To darot, S2I process veica Ŕādas darbības:

  • Izveidots pakalpojumu bÅ«vpods visu veidu lietām, kas saistÄ«tas ar lietojumprogrammas izveidi.
  • Izveidoja OpenShift Build konfigurāciju.
  • Es lejupielādēju veidotāja attēlu iekŔējā OpenShift docker reÄ£istrā.
  • Klonēts "Hello World" uz vietējo repozitoriju.
  • Es redzēju, ka tur ir maven pom, tāpēc es sastādÄ«ju aplikāciju, izmantojot maven.
  • Izveidots jauns konteinera attēls, kurā ir apkopota Java lietojumprogramma, un ievietots Å”is attēls iekŔējā konteinera reÄ£istrā.
  • Izveidota Kubernetes izvietoÅ”ana ar specifikācijām podam, pakalpojumam utt.
  • Es sāku izvietot konteinera attēlu.
  • Noņemts pakalpojuma build-pod.

Å ajā sarakstā ir daudz, taču galvenais ir tas, ka visa bÅ«vÄ“Å”ana notiek tikai OpenShift iekÅ”ienē, iekŔējais Docker reÄ£istrs atrodas OpenShift iekÅ”pusē, un veidoÅ”anas process izveido visus Kubernetes komponentus un palaiž tos klasterÄ«.

Ja konsolē vizuāli pārraugāt S2I palaiÅ”anu, varat redzēt, kā bÅ«vÄ“Å”anas pods tiek palaists, kad bÅ«vÄ“Å”ana ir pabeigta.

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

Tagad apskatīsim veidotāju pod žurnālus: pirmkārt, tas parāda, kā maven veic savu darbu, un lejupielādē atkarības, lai izveidotu mūsu Java lietojumprogrammu.

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

Kad Maven bÅ«vÄ“Å”ana ir pabeigta, tiek sākta konteinera attēla bÅ«vÄ“Å”ana, un pēc tam Å”is veidotais attēls tiek nosÅ«tÄ«ts uz iekŔējo repozitoriju.

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

Tas arī viss, izveides process ir pabeigts. Tagad pārliecināsimies, ka mūsu lietojumprogrammas podi un pakalpojumi darbojas klasterī.

oc get service

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

Tas ir viss. Un tikai viena komanda. Viss, kas mums jādara, ir atklāt Å”o pakalpojumu, lai tas varētu piekļūt no ārpuses.

3. darbÄ«ba ā€“ atklājiet pakalpojumam piekļuvi no ārpuses

Tāpat kā KUC gadÄ«jumā, OpenShift platformā mÅ«su ā€œHello Worldā€ arÄ« ir nepiecieÅ”ams marÅ”rutētājs, lai novirzÄ«tu ārējo trafiku uz pakalpojumu klasterÄ«. OpenShift to padara ļoti vienkārÅ”u. Pirmkārt, HAProxy marÅ”rutÄ“Å”anas komponents ir instalēts klasterÄ« pēc noklusējuma (to var mainÄ«t uz to paÅ”u NGINX). Otrkārt, ir Ä«paÅ”i un ļoti konfigurējami resursi, ko sauc par marÅ”rutiem un atgādina Ingress objektus vecajā labajā Kubernetes (patiesÄ«bā OpenShift marÅ”ruti lielā mērā ietekmēja Ingress objektu dizainu, ko tagad var izmantot OpenShift), bet mÅ«su "Hello World" , un gandrÄ«z visos citos gadÄ«jumos mums pietiek ar standarta MarÅ”rutu bez papildu konfigurācijas.

Lai izveidotu marÅ”rutējamu FQDN ā€œHello Worldā€ (jā, OpenShiift ir savs DNS marÅ”rutÄ“Å”anai pēc pakalpojumu nosaukumiem), mēs vienkārÅ”i atklāsim savu pakalpojumu:

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

oc expose service quarkus-hello-world

Ja skatāties uz jaunizveidoto marÅ”rutu, tajā varat atrast FQDN un citu marÅ”rutÄ“Å”anas informāciju:

oc get route

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

Visbeidzot, mēs piekļūstam savam pakalpojumam no pārlūkprogrammas:

Atvainojiet, OpenShift, mēs jÅ«s nepietiekami novērtējām un uzskatÄ«jām par paÅ”saprotamu

Bet tagad tas bija patieŔām viegli!

Mēs mÄ«lam Kubernetes un visu, ko Ŕī tehnoloÄ£ija mums ļauj darÄ«t, kā arÄ« mēs mÄ«lam vienkārŔību un vieglumu. Kubernetes tika izveidots, lai neticami vienkārÅ”otu sadalÄ«to, mērogojamo konteineru darbÄ«bu, taču ar tās vienkārŔību vairs nepietiek, lai Å”odien ieviestu lietojumprogrammas ražoÅ”anā. Å eit tiek izmantota OpenShift, kas seko lÄ«dzi laikam un piedāvā Kubernetes, kas galvenokārt paredzēta izstrādātājam. Ir ieguldÄ«ts daudz pūļu, lai OpenShift platformu pielāgotu Ä«paÅ”i izstrādātājam, tostarp tādu rÄ«ku izveidei kā S2I, ODI, izstrādātāju portāls, OpenShift Operator Framework, IDE integrācija, izstrādātāju katalogi, Helm integrācija, uzraudzÄ«ba un daudzi citi.

Mēs ceram, ka Å”is raksts jums bija interesants un noderÄ«gs. Portālā var atrast papildu resursus, materiālus un citas izstrādei noderÄ«gas lietas OpenShift platformā Red Hat izstrādātāji.

Avots: www.habr.com

Pievieno komentāru