ProHoster > Blogs > AdministrÄcija > MÅ«sdienu programmas OpenShift, 3. daļa: OpenShift kÄ izstrÄdes vide un OpenShift cauruļvadi
MÅ«sdienu programmas OpenShift, 3. daļa: OpenShift kÄ izstrÄdes vide un OpenShift cauruļvadi
Sveiki visiem Å”ajÄ emuÄrÄ! Å is ir treÅ”ais ieraksts sÄrijÄ, kurÄ mÄs parÄdÄm, kÄ izvietot modernas tÄ«mekļa lietojumprogrammas Red Hat OpenShift.
IepriekÅ”Äjos divos ziÅojumos mÄs parÄdÄ«jÄm, kÄ izvietot modernas tÄ«mekļa lietojumprogrammas tikai dažÄs darbÄ«bÄs un kÄ izmantot jaunu S2I attÄlu kopÄ ar gatavu HTTP servera attÄlu, piemÄram, NGINX, izmantojot Ä·Ädes bÅ«vÄjumus, lai organizÄtu ražoÅ”anas izvietoÅ”anu. .
Å odien mÄs parÄdÄ«sim, kÄ palaist izstrÄdes serveri jÅ«su lietojumprogrammai OpenShift platformÄ un sinhronizÄt to ar vietÄjo failu sistÄmu, kÄ arÄ« runÄsim par to, kas ir OpenShift cauruļvadi un kÄ tos var izmantot kÄ alternatÄ«vu saistÄ«tajiem mezgliem.
OpenShift kÄ izstrÄdes vide
IzstrÄdes darbplÅ«sma
KÄ jau teikts pirmais ieraksts, tipisks mÅ«sdienu tÄ«mekļa lietojumprogrammu izstrÄdes process ir vienkÄrÅ”i sava veida āizstrÄdes serverisā, kas izseko izmaiÅas lokÄlajos failos. Kad tie notiek, tiek aktivizÄta lietojumprogrammas bÅ«vÄÅ”ana un pÄc tam tÄ tiek atjauninÄta pÄrlÅ«kprogrammÄ.
Vispirms apskatÄ«sim, kÄ tas darbojas, palaižot lietojumprogrammas lokÄli. Å emsim lietojumprogrammu kÄ piemÄru ReaÄ£Ät no iepriekÅ”Äjiem rakstiem, lai gan gandrÄ«z tÄdas paÅ”as darbplÅ«smas koncepcijas tiek izmantotas visos citos mÅ«sdienu ietvaros.
TÄtad, lai palaistu "dev serveri" mÅ«su React piemÄrÄ, mÄs ievadÄ«sim Å”Ädu komandu:
$ npm run start
Tad terminÄļa logÄ mÄs redzÄsim kaut ko lÄ«dzÄ«gu:
Un mÅ«su lietojumprogramma tiks atvÄrta noklusÄjuma pÄrlÅ«kprogrammÄ:
Tagad, ja mÄs veiksim izmaiÅas failÄ, lietojumprogramma ir jÄatjaunina pÄrlÅ«kprogrammÄ.
Labi, ar izstrÄdi vietÄjÄ režīmÄ viss ir skaidrs, bet kÄ to paÅ”u panÄkt OpenShift?
Attīstības serveris uz OpenShift
Ja atceries, iekÅ”Ä iepriekÅ”ÄjÄ ziÅa, mÄs apskatÄ«jÄm tÄ saukto S2I attÄla palaiÅ”anas fÄzi un redzÄjÄm, ka pÄc noklusÄjuma apkalpoÅ”anas modulis ir atbildÄ«gs par mÅ«su tÄ«mekļa lietojumprogrammas apkalpoÅ”anu.
TomÄr, ja paskatÄs tuvÄk palaist skriptu no Ŕī piemÄra tajÄ ir $NPM_RUN vides mainÄ«gais, kas ļauj izpildÄ«t komandu.
PiemÄram, mÄs varam izmantot moduli nodeshift, lai izvietotu mÅ«su lietojumprogrammu:
PiezÄ«me. IepriekÅ” minÄtais piemÄrs ir saÄ«sinÄts, lai ilustrÄtu vispÄrÄjo ideju.
Å eit mÄs savai izvietoÅ”anai esam pievienojuÅ”i vides mainÄ«go NPM_RUN, kas liek izpildlaikam palaist yarn start komandu, kas palaiž React izstrÄdes serveri mÅ«su OpenShift podÄ.
Ja paskatÄs uz skrieÅ”anas pÄksts žurnÄlu, tas izskatÄ«sies apmÄram Å”Ädi:
Protams, tas viss nebÅ«s nekas, kamÄr nevarÄsim sinhronizÄt lokÄlo kodu ar kodu, kas arÄ« tiek uzraudzÄ«ts, lai nerodas izmaiÅas, bet dzÄ«vo uz attÄlÄ servera.
TÄlvadÄ«bas un vietÄjÄ koda sinhronizÄÅ”ana
Par laimi, nodeshift var viegli palÄ«dzÄt sinhronizÄcijÄ, un jÅ«s varat izmantot komandu skatÄ«ties, lai izsekotu izmaiÅÄm.
TÄtad pÄc tam, kad esam izpildÄ«juÅ”i komandu, lai mÅ«su lietojumprogrammai izvietotu izstrÄdes serveri, mÄs varam droÅ”i izmantot Å”o komandu:
$ npx nodeshift watch
RezultÄtÄ tiks izveidots savienojums ar nedaudz agrÄk izveidoto darbvirsmu, tiks aktivizÄta mÅ«su vietÄjo failu sinhronizÄcija ar attÄlo klasteru, un mÅ«su vietÄjÄs sistÄmas faili tiks pÄrraudzÄ«ti, vai nav izmaiÅu.
TÄpÄc, ja tagad atjauninÄsim failu src/App.js, sistÄma reaÄ£Äs uz Ŕīm izmaiÅÄm, kopÄs tÄs uz attÄlo klasteru un startÄs izstrÄdes serveri, kas pÄc tam atjauninÄs mÅ«su lietojumprogrammu pÄrlÅ«kprogrammÄ.
Lai pabeigtu attÄlu, parÄdÄ«sim, kÄ izskatÄs visas Ŕīs komandas:
Watch komanda ir abstrakcija virs komandas oc rsync, jÅ«s varat uzzinÄt vairÄk par to, kÄ tÄ darbojas Å”eit.
Å is bija piemÄrs React, taÄu tieÅ”i to paÅ”u metodi var izmantot ar citÄm sistÄmÄm, vienkÄrÅ”i iestatiet NPM_RUN vides mainÄ«go pÄc vajadzÄ«bas.
ā
Openshift cauruļvadi
TÄlÄk mÄs runÄsim par tÄdu rÄ«ku kÄ OpenShift Pipelines un to, kÄ to var izmantot kÄ alternatÄ«vu Ä·ÄdÄ«tajÄm bÅ«vÄm.
Kas ir OpenShift cauruļvadi
OpenShift Pipelines ir mÄkoÅa CI/CD nepÄrtrauktas integrÄcijas un piegÄdes sistÄma, kas paredzÄta cauruļvadu organizÄÅ”anai, izmantojot Tekton. Tekton ir elastÄ«ga atvÄrtÄ pirmkoda Kubernetes CI/CD ietvars, kas ļauj automatizÄt izvietoÅ”anu dažÄdÄs platformÄs (Kubernetes, bez servera, virtuÄlÄs maŔīnas utt.), abstrahÄjoties no pamatÄ esoÅ”Ä slÄÅa.
Lai saprastu Å”o rakstu, ir nepiecieÅ”amas zinÄmas zinÄÅ”anas par cauruļvadiem, tÄpÄc mÄs ļoti iesakÄm vispirms to izlasÄ«t oficiÄlÄ mÄcÄ«bu grÄmata.
JÅ«su darba vides iekÄrtoÅ”ana
Lai spÄlÄtu ar Å”ajÄ rakstÄ minÄtajiem piemÄriem, vispirms ir jÄsagatavo sava darba vide:
InstalÄjiet un konfigurÄjiet OpenShift 4 klasteru. MÅ«su piemÄros Å”im nolÅ«kam tiek izmantoti CodeReady konteineri (CRD), kuru instalÄÅ”anas instrukcijas var atrast Å”eit.
Kad klasteris ir gatavs, tajÄ jÄinstalÄ Pipeline Operator. Nebaidieties, tas ir vienkÄrÅ”i, uzstÄdÄ«Å”anas instrukcijas Å”eit.
Palaidiet komandrindas rÄ«ku Create-react-app, lai izveidotu lietojumprogrammu, kuru pÄc tam izvietosit (Ŕī ir vienkÄrÅ”a lietojumprogramma ReaÄ£Ät).
(NeobligÄti) KlonÄjiet repozitoriju, lai lokÄli palaistu parauga lietojumprogrammu ar npm instalÄÅ”anu un pÄc tam npm start.
Lietojumprogrammu repozitorijÄ bÅ«s arÄ« mape k8s, kurÄ bÅ«s Kubernetes/OpenShift YAML, kas izmantoti lietojumprogrammas izvietoÅ”anai. BÅ«s uzdevumi, klasteru uzdevumi, resursi un cauruļvadi, kurus mÄs izveidosim Å”ajÄ krÄtuves.
SÄksim
Pirmais solis mÅ«su piemÄrÄ ir jauna projekta izveide OpenShift klasterÄ«. Nosauksim Å”o projektu webapp-pipeline un izveidosim to ar Å”Ädu komandu:
$ oc new-project webapp-pipeline
Å is projekta nosaukums parÄdÄ«sies kodÄ vÄlÄk, tÄdÄļ, ja nolemjat to nosaukt citÄdi, neaizmirstiet attiecÄ«gi rediÄ£Ät parauga kodu. SÄkot no Ŕī punkta, mÄs virzÄ«simies nevis no augÅ”as uz leju, bet gan no apakÅ”as uz augÅ”u: tas ir, mÄs vispirms izveidosim visas konveijera sastÄvdaļas un tikai pÄc tam paÅ”u konveijeru.
TÄtad, pirmkÄrt...
Uzdevumi
Izveidosim dažus uzdevumus, kas pÄc tam palÄ«dzÄs izvietot lietojumprogrammu mÅ«su konveijerÄ. Pirmais uzdevums - apply_manifests_task - ir atbildÄ«gs par YAML lietoÅ”anu tiem Kubernetes resursiem (pakalpojums, izvietoÅ”ana un marÅ”ruts), kas atrodas mÅ«su lietojumprogrammas mapÄ k8s. Otrais uzdevums ā update_deployment_task ā ir atbildÄ«gs par jau izvietota attÄla atjauninÄÅ”anu uz mÅ«su konveijera izveidoto attÄlu.
Neuztraucieties, ja tas vÄl nav Ä«sti skaidrs. Faktiski Å”ie uzdevumi ir kaut kas lÄ«dzÄ«gs utilÄ«tprogrammÄm, un mÄs tos aplÅ«kosim sÄ«kÄk nedaudz vÄlÄk. PagaidÄm vienkÄrÅ”i izveidosim tos:
PÄc tam, izmantojot komandu tkn CLI, mÄs pÄrbaudÄ«sim, vai uzdevumi ir izveidoti:
$ tkn task ls
NAME AGE
apply-manifests 1 minute ago
update-deployment 1 minute ago
PiezÄ«me. Å ie ir jÅ«su paÅ”reizÄjÄ projekta vietÄjie uzdevumi.
Klasteru uzdevumi
Klastera uzdevumi bÅ«tÄ«bÄ ir tÄdi paÅ”i kÄ vienkÄrÅ”ie uzdevumi. Tas ir, tÄ ir atkÄrtoti lietojama darbÄ«bu kolekcija, kas vienÄ vai otrÄ veidÄ tiek apvienota, izpildot konkrÄtu uzdevumu. AtŔķirÄ«ba ir tÄda, ka klastera uzdevums ir pieejams visur klasterÄ«. Lai skatÄ«tu klastera uzdevumu sarakstu, kas tiek automÄtiski izveidoti, pievienojot cauruļvada operatoru, mÄs atkal izmantosim komandu tkn CLI:
$ tkn clustertask ls
NAME AGE
buildah 1 day ago
buildah-v0-10-0 1 day ago
jib-maven 1 day ago
kn 1 day ago
maven 1 day ago
openshift-client 1 day ago
openshift-client-v0-10-0 1 day ago
s2i 1 day ago
s2i-go 1 day ago
s2i-go-v0-10-0 1 day ago
s2i-java-11 1 day ago
s2i-java-11-v0-10-0 1 day ago
s2i-java-8 1 day ago
s2i-java-8-v0-10-0 1 day ago
s2i-nodejs 1 day ago
s2i-nodejs-v0-10-0 1 day ago
s2i-perl 1 day ago
s2i-perl-v0-10-0 1 day ago
s2i-php 1 day ago
s2i-php-v0-10-0 1 day ago
s2i-python-3 1 day ago
s2i-python-3-v0-10-0 1 day ago
s2i-ruby 1 day ago
s2i-ruby-v0-10-0 1 day ago
s2i-v0-10-0 1 day ago
Tagad izveidosim divus klastera uzdevumus. Pirmais Ä£enerÄs S2I attÄlu un nosÅ«tÄ«s to uz iekÅ”Äjo OpenShift reÄ£istru; otrs ir veidot savu tÄlu, pamatojoties uz NGINX, izmantojot lietojumprogrammu, ko jau esam izveidojuÅ”i kÄ saturu.
Izveidojiet un nosÅ«tiet attÄlu
Veidojot pirmo uzdevumu, mÄs atkÄrtosim to, ko jau izdarÄ«jÄm iepriekÅ”ÄjÄ rakstÄ par saistÄ«tajÄm montÄžÄm. AtgÄdiniet, ka mÄs izmantojÄm S2I attÄlu (ubi8-s2i-web-app), lai āveidotuā savu lietojumprogrammu, un galu galÄ tika izveidots attÄls, kas tika saglabÄts OpenShift iekÅ”ÄjÄ reÄ£istrÄ. Tagad mÄs izmantosim Å”o S2I tÄ«mekļa lietotnes attÄlu, lai savai lietotnei izveidotu DockerFile, un pÄc tam izmantosim Buildah, lai veiktu faktisko veidoÅ”anu un nosÅ«tÄ«tu iegÅ«to attÄlu OpenShift iekÅ”Äjam reÄ£istram, jo āātas ir tieÅ”i tas, ko OpenShift dara, kad izvietojat savas lietojumprogrammas, izmantojot NodeShift. .
MÄs to neanalizÄsim detalizÄti, bet koncentrÄsimies tikai uz parametru OUTPUT_DIR:
params:
- name: OUTPUT_DIR
description: The location of the build output directory
default: build
PÄc noklusÄjuma Å”is parametrs ir vienÄds ar build, kur React ievieto salikto saturu. Citi ietvari izmanto dažÄdus ceļus, piemÄram, Ember tas ir dist. MÅ«su pirmÄ klastera uzdevuma izvade bÅ«s attÄls, kas satur mÅ«su apkopoto HTML, JavaScript un CSS.
Izveidojiet attÄlu, pamatojoties uz NGINX
Kas attiecas uz mÅ«su otro klastera uzdevumu, tam vajadzÄtu izveidot uz NGINX balstÄ«tu attÄlu, izmantojot mÅ«su jau izveidotÄs lietojumprogrammas saturu. BÅ«tÄ«bÄ Å”Ä« ir daļa no iepriekÅ”ÄjÄs sadaļas, kurÄ mÄs apskatÄ«jÄm Ä·ÄdÄ«tos bÅ«vÄjumus.
Lai to izdarÄ«tu, mÄs ā tieÅ”i tÄpat kÄ iepriekÅ” ā izveidosim klastera uzdevumu webapp-build-runtime:
Ja paskatÄs uz Å”o klastera uzdevumu kodu, jÅ«s varat redzÄt, ka tajÄ nav norÄdÄ«ts Git repozitorijs, ar kuru mÄs strÄdÄjam, vai mÅ«su veidojamo attÄlu nosaukumi. MÄs tikai norÄdÄm, ko tieÅ”i mÄs pÄrsÅ«tÄm uz Git, vai noteiktu attÄlu, kurÄ jÄizvada gala attÄls. TÄpÄc Å”os klastera uzdevumus var izmantot atkÄrtoti, strÄdÄjot ar citÄm lietojumprogrammÄm.
Un Å”eit mÄs graciozi pÄrejam pie nÄkamÄ punkta...
Resursi
TÄtad, tÄ kÄ, kÄ mÄs tikko teicÄm, klastera uzdevumiem jÄbÅ«t pÄc iespÄjas vispÄrÄ«gÄkiem, mums ir jÄizveido resursi, kas tiks izmantoti kÄ ievade (Git repozitorijs) un kÄ izvade (galÄ«gie attÄli). Pirmais mums nepiecieÅ”amais resurss ir Git, kurÄ atrodas mÅ«su lietojumprogramma, apmÄram Å”Ädi:
# This resource is the location of the git repo with the web application source
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
name: web-application-repo
spec:
type: git
params:
- name: url
value: https://github.com/nodeshift-starters/react-pipeline-example
- name: revision
value: master
Å eit PipelineResource ir git tipa. URL atslÄga sadaÄ¼Ä parametri norÄda uz konkrÄtu repozitoriju un norÄda galveno atzaru (tas nav obligÄts, taÄu mÄs to rakstÄm, lai nodroÅ”inÄtu pilnÄ«gumu).
Tagad mums ir jÄizveido attÄla resurss, kurÄ tiks saglabÄti s2i-web-app uzdevuma rezultÄti, tas tiek darÄ«ts Å”Ädi:
# This resource is the result of running "npm run build", the resulting built files will be located in /opt/app-root/output
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
name: built-web-application-image
spec:
type: image
params:
- name: url
value: image-registry.openshift-image-registry.svc:5000/webapp-pipeline/built-web-application:latest
Å eit PipelineResource ir attÄla tips, un url parametra vÄrtÄ«ba norÄda uz iekÅ”Äjo OpenShift attÄla reÄ£istru, jo Ä«paÅ”i to, kas atrodas tÄ«mekļa lietotnes konveijera nosaukumvietÄ. Ja izmantojat citu nosaukumvietu, neaizmirstiet mainÄ«t Å”o iestatÄ«jumu.
Visbeidzot, pÄdÄjais mums nepiecieÅ”amais resurss bÅ«s arÄ« attÄla tipa, un tas bÅ«s pÄdÄjais NGINX attÄls, kas tiks izmantots izvietoÅ”anas laikÄ:
# This resource is the image that will be just the static html, css, js files being run with nginx
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
name: runtime-web-application-image
spec:
type: image
params:
- name: url
value: image-registry.openshift-image-registry.svc:5000/webapp-pipeline/runtime-web-application:latest
Atkal Åemiet vÄrÄ, ka Å”is resurss saglabÄ attÄlu iekÅ”ÄjÄ OpenShift reÄ£istrÄ tÄ«mekļa lietotnes konveijera nosaukumvietÄ.
Lai izveidotu visus Å”os resursus vienlaikus, mÄs izmantojam komandu Create:
Å im uzdevumam tiek izmantoti ievades (gir resurss) un izvades (built-web-application-image resurss) parametri. MÄs tam arÄ« nododam Ä«paÅ”u parametru, lai tas nepÄrbaudÄ«tu TLS, jo mÄs izmantojam paÅ”parakstÄ«tus sertifikÄtus:
TÄpat kÄ iepriekÅ”ÄjÄ uzdevumÄ, mÄs nododam resursu, bet tagad tas ir iebÅ«vÄts tÄ«mekļa lietojumprogrammas attÄls (mÅ«su iepriekÅ”ÄjÄ uzdevuma izvade). Un kÄ izvadi mÄs atkal iestatÄm attÄlu. TÄ kÄ Å”is uzdevums ir jÄizpilda pÄc iepriekÅ”ÄjÄ, mÄs pievienojam lauku runAfter:
NÄkamie divi uzdevumi ir atbildÄ«gi par pakalpojuma, marÅ”ruta un izvietoÅ”anas YAML failu izmantoÅ”anu, kas atrodas mÅ«su tÄ«mekļa lietojumprogrammas k8s direktorijÄ, kÄ arÄ« par Ŕīs izvietoÅ”anas atjauninÄÅ”anu, veidojot jaunus attÄlus. Raksta sÄkumÄ mÄs definÄjÄm Å”os divus klastera uzdevumus.
Konveijera palaiŔana
TÄtad visas mÅ«su cauruļvada daļas ir izveidotas, un mÄs to izpildÄ«sim ar Å”Ädu komandu:
$ tkn pipeline start build-and-deploy-react
Å ajÄ posmÄ komandrinda tiek izmantota interaktÄ«vi, un jums ir jÄizvÄlas atbilstoÅ”ie resursi, atbildot uz katru tÄs pieprasÄ«jumu: git resursam atlasiet tÄ«mekļa lietojumprogrammu repo, pÄc tam pirmajam attÄla resursam iebÅ«vÄto tÄ«mekļa lietojumprogrammu. -image un, visbeidzot, otrajam attÄla resursam -runtime-web-application-image:
? Choose the git resource to use for web-application-repo: web-application-repo (https://github.com/nodeshift-starters/react-pipeline-example)
? Choose the image resource to use for built-web-application-image: built-web-application-image (image-registry.openshift-image-registry.svc:5000/webapp-pipeline/built-web-
application:latest)
? Choose the image resource to use for runtime-web-application-image: runtime-web-application-image (image-registry.openshift-image-registry.svc:5000/webapp-pipeline/runtim
e-web-application:latest)
Pipelinerun started: build-and-deploy-react-run-4xwsr
Tagad pÄrbaudÄ«sim cauruļvada statusu, izmantojot Å”Ädu komandu:
$ tkn pipeline logs -f
Kad cauruļvads ir sÄcies un lietojumprogramma ir izvietota, mÄs varam pieprasÄ«t publicÄto marÅ”rutu ar Å”Ädu komandu:
$ oc get route react-pipeline-example --template='http://{{.spec.host}}'
NoklikŔķinot uz apļa ikonas augÅ”ÄjÄ labajÄ stÅ«rÄ«, tiek atvÄrta mÅ«su lietojumprogramma, kÄ parÄdÄ«ts 4. attÄlÄ.
Rīsi. 4. Palaižot lietojumprogrammu React.
SecinÄjums
TÄtad, mÄs parÄdÄ«jÄm, kÄ palaist izstrÄdes serveri jÅ«su lietojumprogrammai OpenShift un sinhronizÄt to ar vietÄjo failu sistÄmu. MÄs arÄ« apskatÄ«jÄm, kÄ simulÄt Ä·Ädes veidoÅ”anas veidni, izmantojot OpenShift cauruļvadus. Visus Ŕī raksta kodu piemÄrus var atrast Å”eit.