Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

See post on kirjutatud, kuna meie töötajatel on olnud ĂŒsna palju vestlusi klientidega Kubernetesi ja OpenShifti rakenduste arendamise spetsiifikast.

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

Alustame tavaliselt vĂ€itest, et Kubernetes on lihtsalt Kubernetes, ja OpenShift on juba Kubernetes platvorm, nagu Microsoft AKS vĂ”i Amazon EKS. Igal neist platvormidest on oma eelised, suunatud teatud sihtrĂŒhmale. PĂ€rast seda vestlus suundub juba konkreetsete platvormide tugevuste ja nĂ”rkuste vĂ”rdlemisse.

Üldiselt mĂ”tleme kirjutada postituse, mille jĂ€reldus oleks midagi sellist, et "kuulake, pole tĂ€htis, kus koodi kĂ€itada, kas OpenShiftis vĂ”i AKS-is, EKS-is, mingisuguses kohandatud Kubernetesis, vĂ”i mis tahes Kubernetesis". (lĂŒhidalt nimetame seda KUK-iks) – see on tegelikult ĂŒhtemoodi lihtne, nii seal kui ka seal.

SeejĂ€rel plaanisime vĂ”tta kĂ”ige lihtsama "Hello World" ja selle nĂ€ite pĂ”hjal nĂ€idata, mis on ĂŒhist ja milles on erinevused KUKi ja Red Hat OpenShift Container Platformi (edasi, OCP vĂ”i lihtsalt OpenShift) vahel.

Kirjutamise kĂ€igus oleme aru saanud, et oleme OpenShifti kasutamist niivĂ”rd harjunud, et ei teadvusta, kui palju see on kasvanud ja muutunud imeliseks platvormiks, mis on palju rohkem kui lihtsalt Kubernetesi jaotamine. Oleme harjunud vĂ”tma OpenShifti kĂŒpsust ja lihtsust iseenesestmĂ”istetavana, unustades selle suurepĂ€rasuse.

NĂŒĂŒd on aeg aktiivseks kahetsuseks ning vĂ”rreldame samm-sammult oma "Hello World" kĂ€ivitamist KUK-is ja OpenShiftis ning teeme seda vĂ”imalikult objektiivselt (vahel vĂ”ib-olla vĂ€ljendades isiklikku arvamust). Kui teid huvitab ainult subjektiivne arvamus, siis seda saab lugeda siit (EN). Selles postituses kinnitume ainult faktidele.

Klastrid

Seega, et meie "Hello World" töötaks, vajame klastreid. Ütleme kohe "ei" igasugustele avalikele pilvedele, et vĂ€ltida serverite, registrite, vĂ”rkude, andmeedastuse jne eest maksmist. Seega valime lihtsa ĂŒhe sĂ”lmega klastrite Minikube (KUK-i jaoks) ja Code Ready Containers (OpenShifti klastri jaoks). MĂ”lemad variandid on tĂ”eliselt lihtsad seadistada, kuid nĂ”uavad teie sĂŒlearvutil ĂŒsna palju ressursse.

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

Ehitus KUK-is

Nii et, hakkame pihta.

Samm 1 – kogume meie konteineripildi

Alustame sellega, et kÀivitame meie 'Hello World' minikubes. Selleks on vajalikud:

  1. 1. Paigaldatud Docker.
  2. 2. Paigaldatud Git.
  3. 3. Paigaldatud Maven (tegelikult kasutatakse selle projekti puhul mvnw-binÀri, seega vÔib selle ka jÀtta vÀlja).
  4. 4. Loomulikult allikas ise, st repositooriumi kloon github.com/gcolman/quarkus-hello-world.git

Esmalt tuleb luua Quarkus projekt. Ärge kartke, isegi kui te pole kunagi töötanud Quarkus.io saidiga – see on lihtne. Lihtsalt valige komponendid, mida soovite projektis kasutada (RestEasy, Hibernate, Amazon SQS, Camel jne), ja seejĂ€rel seadistab Quarkus ilma teie osaluseta maven arhetĂŒĂŒbi ja ĂŒles laadib kĂ”ik GitHubi. See tĂ€hendab, et vajutate sĂ”na otseses mĂ”ttes hiire ĂŒhte klikki – ja kĂ”ik on valmis. SellepĂ€rast me armastame Quarkust.

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

KÔige lihtsam viis meie 'Hello World' kokku panna konteineripildiks on kasutada quarkus-maven laiendusi Dockerile, mis teevad kogu vajaliku töö Àra. Quarkuse tulekuga on see tÔeliselt lihtne: lisate laienduse container-image-docker ja saate luua pilte maveni kÀskudega.

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

Ja lÔpuks kompileerime meie pildi, kasutades Mavenit. Selle tulemusena muutub meie lÀhtekood valmis konteineripildiks, mida saab juba konteinerite kÀituskeskkonnas kasutada.

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

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

NĂŒĂŒd on see kĂ”ik — saame konteineri kĂ€ivitada kĂ€suga docker run, suunates meie teenuse pordi 8080 peale, et sellele ligi pÀÀseda.

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

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

PÀrast konteineri instantsi kÀivitamist jÀÀb vaid kontrollida kÀsuga curl, kas meie teenus töötab:

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

Nii et kÔik töötab ja see oli tÔeliselt lihtne ja mugav.

Etapp 2 – saadame meie konteineri konteineripiltide registrisse

Praegu hoitakse meie loodud pilti kohalikult meie lokaalses konteinerite hoidlas. Kui soovime seda pilti oma K8s keskkonnas kasutada, tuleb see panna mÔnda teise registrisse. Kuberneteses pole selliseid funktsioone, seega kasutame dockerhubi. Esiteks, see on tasuta, ja teiseks, (peaaegu) kÔik teevad nii.

See on samuti vÀga lihtne, ja ainus, mida seal vaja, on konto dockerhubis.

Nii et loome dockerhubi konto ja saadame sinna meie pildi.

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

Samm 3 – kĂ€ivitame Kubernetes

Kubernetesi konfiguratsiooni kogumiseks on palju viise, et kÀivitada meie 'Hello World', kuid kasutame neist kÔige lihtsamat, kuna me oleme sellised inimesed...

Alustame minikube klastri kÀivitamisega:

minikube start

Samm 4 – juurutame meie konteineri pildi

NĂŒĂŒd peame meie koodi ja konteineri pildi muutma Kubernetes'i konfiguratsioonideks. TeisisĂ”nu, me vajame pod'i ja juurutamise mÀÀratlust, mis viitab meie konteineri pildile DockerHubis. Üks lihtsamaid viise selle tegemiseks on kĂ€ivitada kĂ€sk create deployment, viidates meie pildile:

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

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

Selle kĂ€sklusega ĂŒtlesime meie KUBEt'ile, et luua juurutamisconfiguratsioon, mis peab sisaldama pod'i spetsiifikatsiooni meie konteineri pildi jaoks. See kĂ€sk rakendab ka selle konfiguratsiooni meie minikube klasstris ja loob juurutamise, mis allalaadib meie konteineri pildi ja kĂ€ivitab pod'i klastri sees.

Samm 5 – avame juurdepÀÀsu meie teenusele

NĂŒĂŒd, kui meil on juurutatud konteineri pilt, on aeg mĂ”elda, kuidas konfigureerida vĂ€lisesse juurdepÀÀsu sellele Restful-teenusele, mis on tegelikult meie koodis programmeeritud.

Siin on palju vÔimalusi. NÀiteks saab kasutada kÀsklust expose, et automaatselt luua vastavad Kubernetes-komponendid, nagu teenused ja lÔpp-punktid. Just nii me teeme, kÀivitades kÀskluse expose meie deployment-objekti jaoks:

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

VĂ”tame hetkeks aja, et peatuda kĂ€sku expose valikul „--type”.

Kui teeme expose'i ja loome komponendid, mis on vajalikud meie teenuse kĂ€ivitamiseks, peame muu hulgas tagama, et vĂ€ljastpoolt saaks ĂŒhendust vĂ”tta teenusega hello-quarkus, mis asub meie programmipĂ”hises vĂ”rgus. Ja parameeter type aitab meil luua ja ĂŒhendada selliseid asju nagu koormuse tasandajad, et suunata liiklust sellesse vĂ”rku.

NĂ€iteks, mÀÀrates type=LoadBalancer, aktiveerime automaatselt koormuse tasandaja avalikus pilves, et ĂŒhenduda meie Kubernetes-klastriga. See on muidugi suurepĂ€rane, kuid tuleb aru saada, et selline konfiguratsioon on tihedalt seotud konkreetse avaliku pilvega ja seda on raskem ĂŒle kanda erinevate Kubernetes-instantide vahel erinevates keskkondades.

Meie nÀites type=NodePort, st. see our service using the IP address of the node and port number. This option allows us to avoid using any public clouds, but requires a number of additional steps. First of all, you need your own load balancer, which means we will deploy an NGINX load balancer in our cluster.

Step 6 – Install the load balancer

Minikube has a number of platform functions that simplify the creation of components needed for external access, such as ingress controllers. Minikube comes with the Nginx ingress controller, and all we need to do is enable and configure it.

minikube addons enable ingress

Now with just one command, I will create the Nginx ingress controller that will operate within our minikube cluster:

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

Step 7 – Configure ingress

Next, we need to configure the Nginx ingress controller to handle requests for hello-quarkus.

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

And finally, we need to apply this configuration.

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

kubectl apply -f ingress.yml

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

Since we're doing all this on our computer, we simply add the IP address of our node to the /etc/hosts file to direct HTTP requests to our minikube on the NGINX load balancer.

192.168.99.100 hello-quarkus.info

NĂŒĂŒd on meie minikube teenus saadaval vĂ€ljastpoolt Nginx'i ingress-kontrolleri kaudu.

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

No mis, kas see ei olnud lihtne, jah? VÔi mitte just eriti?

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

KĂ€ivitamine OpenShiftis (Code Ready Containers)

NĂŒĂŒd vaatame, kuidas see kĂ”ik kĂ€ib Red Hat OpenShift Container Platformil (OCP).

Nagu minikube puhul, valime ĂŒhe sĂ”lme OpenShift klastrite skeemi Code Ready Containers (CRC) vormis. Varem tuntud kui minishift, mis pĂ”hines OpenShift Origini projektil, nĂŒĂŒd on see CRC ja ehitatud Red Hati OpenShift Container Platformi peale.

Siin me vabandame, et ei saa jĂ€tta ĂŒtlemata: «OpenShift on imeline!»

Alguses mÔtlesime kirjutada, et OpenShiftis arendamine ei erine Kuberneteses arendamisest. Ja tegelikult on see nii. Kuid selle postituse kirjutamise ajal meenutasime, kui palju liigseid samme tuleb astuda, kui OpenShiftit pole ja seetÔttu on see tÔepoolest imeline. Meile meeldib, kui kÔik kÀib lihtsalt, ja see, kui lihtsalt meie nÀide OpenShiftis minikube'iga vÔrreldes kÀivitub ja tööle hakkab, ajendas meid selle postituse kirjutama.

LÀhme protsessist lÀbi ja vaatame, mida me peame tegema.

Nii et nÀites minikube'iga alustasime Dockeriga... Oota, meil ei ole enam vaja, et masinal oleks Docker paigaldatud.

Ja kohalikku git'i ei ole meil vaja.
Ja Maven ei ole vajalik.
Ja ei pea kÀsitsi konteineripilti looma.
Ja ei pea otsima mingit konteineripiltide register.
Ja ingress-kontrollerit ei ole vaja installida.
Ja ingress'i konfigureerimine ei ole samuti vajalik.

Sa said aru, jah? Et meie rakendust OpenShift'is juurutada ja kÀivitada, ei ole vaja mitte midagi eelnevalt mainituist. Protsess nÀeb vÀlja jÀrgmine.

Samm 1 – KĂ€ivitame oma OpenShift klastrit

Kasutame Red Hati Code Ready Containers'i, mis on pĂ”himĂ”tteliselt sama, mis Minikube, kuid ainult tĂ€isfunktsionaalne ĂŒhte sĂ”lme OpenShift klaster.

crc start

Samm 2 – Teeme rakenduse kogumise ja juurutamise OpenShift klasteris

Just sellest sammust alates paistab OpenShift'i lihtsus ja mugavus tÀielikult silma. Nagu kÔikides Kubernetes' jaotustes, on meil palju viise rakenduse kÀivitamiseks klastris. Ja nagu KUK-i puhul, valime me spetsiaalselt kÔige lihtsama versiooni.

OpenShift on alati ehitatud konteinerirakenduste loomise ja kĂ€itamise platvormina. Konteinerite koostamine on alati olnud selle platvormi lahutamatu osa, nii et siit leiate hulga tĂ€iendavaid Kubernetes'i ressursse vastavate ĂŒlesannete jaoks.

Kasutame OpenShift'i Source 2 Image (S2I) protsessi, millel on mitmeid erinevaid viise meie lÀhtekoodi (nÀiteks koodi vÔi binaarfailide) konteineripildiks muutmiseks, mis töötab OpenShift'i klastris.

Selleks vajame kahte asja:

  • Meie lĂ€htekood git-repositoriumis
  • Builder-pilt, mille alusel toimub koostamine.

Selliseid pilte on palju, mida toetavad nii Red Hat'i jÔud kui ka kogukond. Kasutame OpenJDK pilti, kuna ma kogun Java-rakendust.

S2I koostamist saab kÀivitada nii OpenShift Developer'i graafilisest liidesest kui ka kÀsurealt. Kasutame kÀsku new-app, mÀÀrates, kust vÔtta builder-pilt ja meie lÀhtekood.

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

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

KÔik, meie rakendus on loodud. Selles protsessis on S2I teinud jÀrgmised asjad:

  • Loodud teeninduslik build-pood rakenduse kogumisega seotud asjade jaoks.
  • Loodud OpenShift Build konfiguratsioon.
  • Laaditud builder-pilt sisemisse OpenShift docker-rekistrisse.
  • Kloneeritud 'Hello World' lokaalsetesse repo.
  • NĂ€gin, et seal on maven pom, ja seetĂ”ttu kompileerisin rakenduse koos maveniga.
  • Loodud uus konteineripilt, mis sisaldab kompileeritud Java rakendust, ja see pilt pandi sisemisse konteinerite registrisse.
  • Loodud Kubernetes Deployment pod’i, teenuse jne spetsifikatsioonidega.
  • KĂ€ivitati konteineripildi deploy.
  • Kustutatud teeninduslik build-pood.

Selles nimekirjas on palju asju, aga peamine on see, et kogu kogumine toimub ainult OpenShift’is, sisemine Docker-rekistrite asub OpenShift'is ja kogumise protsess loob kĂ”ik Kubernetes komponendid ning kĂ€ivitab need klastri sees.

Kui visuaalselt jÀlgida S2I kÀivitamist konsoolis, siis vÔib nÀha, kuidas build pood kÀivitatakse kogumise ajal.

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

Ja nĂŒĂŒd vaatame builder pod’i logisid: kĂ”igepealt on seal nĂ€ha, kuidas maven oma tööd teeb ja allalaadib sĂ”ltuvusi meie java rakenduse kogumiseks.

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

PÀrast maven-kogumise lÔpetamist kÀivitub konteineri pildi koostamine ja seejÀrel saadetakse see koostatud pilt sisemisse repositooriumisse.

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

Protsess on lĂ”petatud. NĂŒĂŒd veendume, et klastris on kĂ€ivitatud meie rakenduse pod'id ja teenused.

oc get service

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

Ja kĂ”ik. Ainult ĂŒks kĂ€sk. Meil jÀÀb ĂŒle vaid see teenus avada, et sellele vĂ€ljast ligi pÀÀseda.

Samm 3 – avame teenuse vĂ€liseks ligipÀÀsuks

Nagu KUK-i puhul, vajab ka meie 'Hello World' OpenShiftis ruuterit, et suunata vĂ€list liiklust teenusele klastris. OpenShiftis on see vĂ€ga lihtne. Esiteks, klastris on vaikimisi seadistatud HAProxy marsruutimise komponent (seda saab muuta ka NGINX-iks). Teiseks, siin on spetsiaalsed ja laialdase konfigureerimismahuga ressursid, mida nimetatakse Routes'iks ja mis meenutavad Ingress-objekte vanas heades Kuberneteses (t tegelikult mĂ”jutasid OpenShift'i Routes-objektid tugevalt Ingress-objektide kujundamist, mida saab nĂŒĂŒd kasutada ka OpenShiftis), kuid meie 'Hello World'i jaoks ja peaaegu kĂ”igil muudel juhtudel piisab meile tavalise Route'i kasutamisest ilma tĂ€iendava seadistamiseta.

Ette luua „Hello World“ marsruutitava FQDN (jah, OpenShiftis on oma DNS teenuste nimede marsruutimiseks), teeme lihtsalt teenusele expose:

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

oc expose service quarkus-hello-world

Kui vaatame just loodud marsruuti, leiate sealt FQDN-i ja teised marsruudiga seotud andmed:

oc get route

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

Ja lÔpuks, pÀÀseme oma teenusele veebibrauserist:

Vabandust, OpenShift, me ei hinnanud sind piisavalt ja kohtlesime sind iseenesestmÔistetavalt.

NĂŒĂŒd oli see tĂ”esti lihtne!

Me armastame Kubernetes't ja kÔike, mida see tehnoloogia vÔimaldab, samuti armastame lihtsust ja kergust. Kubernetes loodi selleks, et erakordselt lihtsustada hajutatud, skaleeritavate konteinerite haldamist, kuid rakenduste kasutusele vÔtmiseks ei piisa tÀnapÀeva lihtsusest. Siin tuleb mÀngu OpenShift, mis on ajaga kaasas ja pakub Kubernetes't, mis on suunatud eelkÔige arendajatele. OpenShift'i platvormi arendamiseks on tehtud palju tööd, sealhulgas selliste tööriistade nagu S2I, ODI, Developer Portal, OpenShift Operator Framework, IDE integreerimine, Developer Catalogues, Helm integreerimine, monitooring ja paljud teised loomine.

Loodame, et see artikkel oli teile huvitav ja kasulik. TĂ€iendavate ressursside, materjalide ja muude OpenShift'i platvormil arendamiseks vajalike asjade leidmiseks kĂŒlastage portaali Red Hat Developers.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster