ProHoster > Blog > Adminisztráció > Modern alkalmazások az OpenShift-en, 3. rész: OpenShift mint fejlesztői környezet és OpenShift-folyamatok
Modern alkalmazások az OpenShift-en, 3. rész: OpenShift mint fejlesztői környezet és OpenShift-folyamatok
Üdv mindenkinek ezen a blogon! Ez a harmadik bejegyzés a sorozatban, amelyben bemutatjuk, hogyan telepítsünk modern webes alkalmazásokat a Red Hat OpenShift rendszeren.
Az előző két bejegyzésben bemutattuk, hogyan lehet néhány lépésben telepíteni modern webalkalmazásokat, és hogyan lehet új S2I-képet használni egy kész HTTP-szerverkép mellett, mint például az NGINX, láncolt buildekkel az éles telepítések összehangolására. .
Ma megmutatjuk, hogyan futtathat fejlesztői kiszolgálót az alkalmazásához az OpenShift platformon és szinkronizálhatja azt a helyi fájlrendszerrel, valamint arról is beszélünk, hogy mik az OpenShift Pipelines, és hogyan használhatók a csatolt összeállítások alternatívájaként.
OpenShift, mint fejlesztői környezet
Fejlesztési munkafolyamat
Amint azt már leírtuk első poszt, a modern webalkalmazások tipikus fejlesztési folyamata egyszerűen valamiféle „fejlesztési szerver”, amely nyomon követi a helyi fájlok változásait. Amikor ezek előfordulnak, az alkalmazás összeállítása elindul, majd frissül a böngészőben.
A legtöbb modern keretrendszerben egy ilyen „fejlesztési szerver” be van építve a megfelelő parancssori eszközökbe.
Helyi példa
Először is nézzük meg, hogyan működik ez az alkalmazások helyi futtatásakor. Vegyük példának az alkalmazást Reagál korábbi cikkekből, bár szinte ugyanazok a munkafolyamat-koncepciók érvényesek minden más modern keretrendszerre.
Tehát a "dev szerver" elindításához a React példánkban a következő parancsot írjuk be:
$ npm run start
Ezután a terminál ablakában valami ilyesmit fogunk látni:
És alkalmazásunk az alapértelmezett böngészőben fog megnyílni:
Most, ha módosítjuk a fájlt, az alkalmazásnak frissülnie kell a böngészőben.
OK, minden világos a helyi módban történő fejlesztéssel, de hogyan érhetjük el ugyanezt az OpenShift-en?
Fejlesztői szerver OpenShift-en
Ha emlékszel, be előző poszt, megnéztük az S2I kép úgynevezett futtatási fázisát, és azt láttuk, hogy alapértelmezés szerint a szerver modul felel a webalkalmazásunk kiszolgálásáért.
Ha azonban jobban megnézed script futtatása ebből a példából a $NPM_RUN környezeti változót tartalmazza, amely lehetővé teszi a parancs végrehajtását.
Használhatjuk például a nodeshift modult az alkalmazásunk üzembe helyezéséhez:
Megjegyzés: A fenti példa rövidítése az általános elképzelés szemléltetésére szolgál.
Itt hozzáadtuk az NPM_RUN környezeti változót a telepítésünkhöz, amely megmondja a futási környezetnek, hogy futtassa a yarn start parancsot, amely elindítja a React fejlesztői kiszolgálót az OpenShift podban.
Ha megnézi egy futó pod naplóját, az valahogy így fog kinézni:
Mindez persze addig nem lesz semmi, amíg a helyi kódot nem tudjuk szinkronizálni a kóddal, amely ugyancsak figyeli a változásokat, de egy távoli szerveren él.
Távoli és helyi kód szinkronizálása
Szerencsére a nodeshift könnyen segíthet a szinkronizálásban, a watch paranccsal pedig nyomon követhetjük a változásokat.
Tehát miután futtattuk a parancsot a fejlesztői kiszolgáló telepítéséhez az alkalmazásunkhoz, biztonságosan használhatjuk a következő parancsot:
$ npx nodeshift watch
Ennek eredményeként létrejön egy kapcsolat a kicsit korábban létrehozott futó podhoz, aktiválódik a helyi fájljaink szinkronizálása a távoli fürttel, és elkezdődik a helyi rendszerünk fájlok változásainak figyelése.
Ezért ha most frissítjük az src/App.js fájlt, akkor a rendszer reagálni fog ezekre a változásokra, átmásolja azokat a távoli fürtbe, és elindítja a fejlesztőszervert, amely majd frissíti az alkalmazásunkat a böngészőben.
A kép teljessé tételéhez mutassuk meg, hogyan néznek ki ezek a teljes parancsok:
A watch parancs egy absztrakció az oc rsync parancson felül, többet megtudhat a működéséről itt.
Ez volt egy példa a Reacthoz, de pontosan ugyanaz a módszer használható más keretrendszerekkel is, csak szükség szerint állítsa be az NPM_RUN környezeti változót.
Openshift csővezetékek
Ezután egy olyan eszközről fogunk beszélni, mint az OpenShift Pipelines, és arról, hogyan használhatók a láncolt buildek alternatívájaként.
Mik azok az OpenShift-csővezetékek
Az OpenShift Pipelines egy felhőben natív CI/CD folyamatos integrációs és kézbesítési rendszer, amelyet a Tekton segítségével csővezetékek szervezésére terveztek. A Tekton egy rugalmas, nyílt forráskódú Kubernetes-natív CI/CD keretrendszer, amely lehetővé teszi a különféle platformokon (Kubernetes, kiszolgáló nélküli, virtuális gépek stb.) történő telepítés automatizálását az alapul szolgáló rétegtől való elvonatkoztatás révén.
Ennek a cikknek a megértéséhez bizonyos ismeretekre van szükség a csővezetékekről, ezért azt javasoljuk, hogy először olvassa el hivatalos tankönyv.
Munkakörnyezetének beállítása
A cikkben szereplő példákkal való játékhoz először fel kell készítenie munkakörnyezetét:
Telepítsen és konfiguráljon egy OpenShift 4 fürtöt. Példáink erre a CodeReady Container-t (CRD) használják, amelyek telepítési útmutatója megtalálható itt.
Miután a fürt elkészült, telepítenie kell rá a Pipeline Operatort. Ne féljen, egyszerű, telepítési útmutató itt.
Futtassa a create-react-app parancssori eszközt egy alkalmazás létrehozásához, amelyet ezután telepíteni fog (ez egy egyszerű alkalmazás Reagál).
(Opcionális) Klónozza a tárat a példaalkalmazás helyi futtatásához az npm install, majd az npm start segítségével.
Az alkalmazástárnak lesz egy k8s mappája is, amely tartalmazza az alkalmazás üzembe helyezéséhez használt Kubernetes/OpenShift YAML-eket. Lesznek Tasks, ClusterTasks, Resources és Pipelines, amelyeket ebben fogunk létrehozni adattárak.
Kezdjük el
Példánk első lépése egy új projekt létrehozása az OpenShift-fürtben. Nevezzük ezt a projektet webapp-pipeline-nak, és hozzuk létre a következő paranccsal:
$ oc new-project webapp-pipeline
Ez a projektnév a későbbiekben megjelenik a kódban, így ha úgy dönt, hogy más nevet ad, ne felejtse el ennek megfelelően módosítani a példakódot. Ettől a ponttól kezdve nem fentről lefelé haladunk, hanem alulról felfelé: vagyis először a szállítószalag összes alkatrészét hozzuk létre, és csak utána magát a szállítószalagot.
Szóval először is...
Feladatok
Hozzon létre néhány feladatot, amelyek azután segítik az alkalmazás telepítését a folyamatban. Az első feladat - apply_manifests_task - felelős az alkalmazásunk k8s mappájában található Kubernetes-erőforrások YAML-jének alkalmazásáért (szolgáltatás, telepítés és útvonal). A második feladat – update_deployment_task – a már telepített lemezkép frissítéséért felelős a folyamatunk által létrehozott képre.
Ne aggódjon, ha még nem teljesen világos. Valójában ezek a feladatok olyanok, mint a segédprogramok, és egy kicsit később részletesebben is megvizsgáljuk őket. Egyelőre csak hozzuk létre őket:
Ezután a tkn CLI paranccsal ellenőrizzük, hogy a feladatok létrejöttek-e:
$ tkn task ls
NAME AGE
apply-manifests 1 minute ago
update-deployment 1 minute ago
Megjegyzés: Ezek az aktuális projekt helyi feladatai.
Klaszter feladatok
A fürtfeladatok alapvetően megegyeznek az egyszerű feladatokkal. Azaz olyan lépések újrafelhasználható gyűjteménye, amelyek ilyen vagy olyan módon kombinálódnak egy adott feladat futtatásakor. A különbség az, hogy egy fürtfeladat mindenhol elérhető a fürtön belül. A Pipeline Operator hozzáadásakor automatikusan létrehozott fürtfeladatok listájának megtekintéséhez ismét a tkn CLI parancsot használjuk:
$ 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
Most hozzunk létre két fürtfeladatot. Az első létrehozza az S2I képfájlt, és elküldi a belső OpenShift rendszerleíró adatbázisba; a második az, hogy NGINX-re építjük az arculatunkat, a már felépített alkalmazást tartalomként használva.
Készítse el és küldje el a képet
Az első feladat elkészítésekor megismételjük azt, amit az előző cikkben már tettünk a linkelt összeállításokról. Emlékezzünk vissza, hogy az S2I képfájlt (ubi8-s2i-web-app) használtuk az alkalmazásunk „felépítéséhez”, és végül az OpenShift belső nyilvántartásában tárolt kép lett. Most ezt az S2I webalkalmazás-képet fogjuk használni, hogy létrehozzunk egy DockerFile-t az alkalmazásunkhoz, majd a Buildah segítségével végrehajtsuk a tényleges összeállítást, és az eredményül kapott képet az OpenShift belső registry-ébe küldjük, mivel az OpenShift pontosan ezt teszi, amikor NodeShift használatával telepíti az alkalmazásokat. .
Ezt nem elemezzük részletesen, csak az OUTPUT_DIR paraméterre összpontosítunk:
params:
- name: OUTPUT_DIR
description: The location of the build output directory
default: build
Alapértelmezés szerint ez a paraméter megegyezik a build értékkel, amelybe a React helyezi az összeállított tartalmat. Más keretrendszerek különböző útvonalakat használnak, például az Emberben ez a dist. Első fürtfeladatunk kimenete egy kép lesz, amely az általunk összegyűjtött HTML-t, JavaScriptet és CSS-t tartalmazza.
Készítsen képet az NGINX alapján
Ami a második fürtfeladatunkat illeti, egy NGINX alapú képet kell készítenie nekünk, felhasználva a már felépített alkalmazás tartalmát. Lényegében ez az a része az előző résznek, ahol a láncolt buildeket néztük meg.
Ehhez - pontosan ugyanúgy, mint fent - létrehozunk egy webapp-build-runtime fürtfeladatot:
Ha megnézi ezeknek a fürtfeladatoknak a kódját, láthatja, hogy nem határozza meg azt a Git-tárat, amellyel dolgozunk, vagy az általunk létrehozott képek nevét. Csak azt adjuk meg, hogy pontosan mit vigyünk át a Git-be, vagy egy bizonyos képet, ahol a végső képet kell kiadni. Ezért ezek a fürtfeladatok újra felhasználhatók más alkalmazásokkal való munka során.
És itt kecsesen áttérünk a következő pontra...
Ресурсы
Tehát, mivel, ahogy az imént mondtuk, a fürtfeladatoknak a lehető legáltalánosabbaknak kell lenniük, olyan erőforrásokat kell létrehoznunk, amelyeket bemenetként (a Git-tár) és kimenetként (a végső képek) használunk. Az első erőforrás, amire szükségünk van, a Git, ahol az alkalmazásunk található, valami ilyesmi:
# 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
Itt a PipelineResource git típusú. A params részben lévő url kulcs egy adott tárhelyre mutat, és megadja a fő ágat (ez nem kötelező, de a teljesség kedvéért írjuk).
Most létre kell hoznunk egy erőforrást a képhez, ahol az s2i-web-app feladat eredményei mentésre kerülnek, ez a következőképpen történik:
# 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
Itt a PipelineResource kép típusú, és az url paraméter értéke a belső OpenShift Image Registry-re mutat, különösen arra, amely a webapp-pipeline névtérben található. Ne felejtse el módosítani ezt a beállítást, ha más névteret használ.
És végül, az utolsó erőforrás, amire szükségünk van, szintén image típusú lesz, és ez lesz az utolsó NGINX-kép, amelyet ezután a telepítés során használunk majd:
# 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
Ismét vegye figyelembe, hogy ez az erőforrás a belső OpenShift-nyilvántartásban tárolja a képet a webapp-pipeline névtérben.
Az összes erőforrás egyidejű létrehozásához a create parancsot használjuk:
Ezután létrehozzuk azokat a feladatokat, amelyeket a folyamatunknak el kell végeznie. Először is végre kell hajtania az általunk már létrehozott s2i-web-app feladatot:
Ez a feladat bemeneti (gir erőforrás) és kimeneti (beépített webalkalmazás-kép erőforrás) paramétereket vesz igénybe. Egy speciális paramétert is átadunk neki, hogy ne ellenőrizze a TLS-t, mivel önaláírt tanúsítványokat használunk:
Az előző feladathoz hasonlóan itt is átadunk egy erőforrást, de ez most build-web-application-image (az előző feladatunk kimenete). És kimenetként ismét beállítjuk a képet. Mivel ezt a feladatot az előző után kell végrehajtani, hozzáadjuk a runAfter mezőt:
A következő két feladat a webalkalmazásunk k8s könyvtárában található szolgáltatás-, útvonal- és telepítési YAML-fájlok használatáért, valamint az új lemezképek létrehozásakor a telepítés frissítéséért felel. Ezt a két klaszterfeladatot definiáltuk a cikk elején.
A szállítószalag indítása
Tehát a folyamat minden része létrejön, és a következő paranccsal futtatjuk:
$ tkn pipeline start build-and-deploy-react
Ebben a szakaszban a parancssort interaktívan használják, és minden egyes kérésére ki kell választani a megfelelő erőforrásokat: a git erőforráshoz válassza a web-application-repo, majd az első képerőforrásnál a beépített webalkalmazást. -image, és végül a második képforráshoz –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
Most ellenőrizzük a csővezeték állapotát a következő paranccsal:
$ tkn pipeline logs -f
A folyamat elindítása és az alkalmazás telepítése után a következő paranccsal kérhetjük a közzétett útvonalat:
$ oc get route react-pipeline-example --template='http://{{.spec.host}}'
A jobb megjelenítés érdekében megtekintheti folyamatunkat a webkonzol Fejlesztői módjában a részben Csővezetékekábrán látható módon. 1.
1. ábra. A futó csővezetékek áttekintése.
Ha egy futó csővezetékre kattint, további részletek jelennek meg, amint az a 2. ábrán látható.
Rizs. 2. További információk a csővezetékről.
További információ után a futó alkalmazásokat láthatja a nézetben Topológia, amint azt a 3. ábra mutatja.
3. ábra. Elindult pod.
Az ikon jobb felső sarkában lévő körre kattintva megnyílik az alkalmazásunk, ahogy az a 4. ábrán látható.
Rizs. 4. A React alkalmazás futtatása.
Következtetés
Tehát megmutattuk, hogyan futtathat fejlesztőkiszolgálót az alkalmazásához az OpenShift-en, és hogyan szinkronizálhatja azt a helyi fájlrendszerrel. Azt is megvizsgáltuk, hogyan lehet szimulálni egy láncolt felépítésű sablont az OpenShift Pipelines használatával. A cikkben szereplő összes példakód megtalálható itt.