ProHoster > Pūnaewele > Nā Administration > Nā noi hou ma OpenShift, ʻāpana 3: OpenShift ma ke ʻano he wahi hoʻomohala a me OpenShift Pipelines
Nā noi hou ma OpenShift, ʻāpana 3: OpenShift ma ke ʻano he wahi hoʻomohala a me OpenShift Pipelines
Aloha kākou a pau ma kēia blog! ʻO kēia ke kolu o ka pou i loko o kahi pūʻulu e hōʻike ai mākou i ka hoʻolālā ʻana i nā noi pūnaewele hou ma Red Hat OpenShift.
Ma nā pou ʻelua i hala aku nei, ua hōʻike mākou pehea e hoʻonohonoho ai i nā noi pūnaewele hou i loko o kahi liʻiliʻi wale nō a pehea e hoʻohana ai i kahi kiʻi S2I hou me kahi kiʻi kikowaena HTTP waho-ka-shelf, e like me NGINX, me ka hoʻohana ʻana i nā hale kaulahao e hoʻonohonoho i nā hoʻolaha hana. .
I kēia lā e hōʻike mākou pehea e holo ai i kahi kikowaena hoʻomohala no kāu noi ma ka OpenShift platform a hoʻonohonoho pū me ka ʻōnaehana faila kūloko, a kamaʻilio pū hoʻi e pili ana i ke ʻano o OpenShift Pipelines a pehea e hiki ai ke hoʻohana ʻia ma ke ʻano he koho i nā hui pili.
ʻO OpenShift ma ke ʻano he wahi hoʻomohala
Kaʻina hana hoʻomohala
E like me ka mea i olelo mua ia ma pou mua, ʻo ke kaʻina hana hoʻomohala maʻamau no nā noi pūnaewele hou he ʻano wale nō ia o ka "server development" e hahai ana i nā loli i nā faila kūloko. I ka wā e hiki mai ai, hoʻomaka ke kūkulu ʻia ʻana o ka noi a laila hoʻonui ʻia i ka polokalamu kele pūnaewele.
I ka hapanui o nā ʻōnaehana hou, ua kūkulu ʻia kahi "server hoʻomohala" i loko o nā mea hana laina kauoha.
Laʻana kūloko
ʻO ka mea mua, e ʻike kākou pehea e hana ai kēia i ka wā e holo ana i nā noi ma ka ʻāina. E lawe kākou i ka palapala noi i laʻana pane koke mai nā ʻatikala ma mua, ʻoiai ua pili like nā manaʻo kaila hana i nā ʻano hana hou a pau.
No laila, e hoʻomaka i ka "dev server" i kā mākou React example, e komo mākou i kēia kauoha:
$ npm run start
A laila ma ka puka makani ʻike mākou i kahi mea e like me kēia:
A e wehe ʻia kā mākou noi ma ka polokalamu kele pūnaewele:
I kēia manawa, inā hoʻololi mākou i ka faila, pono e hoʻonui ka noi i ka polokalamu kele pūnaewele.
ʻAe, maopopo nā mea āpau me ka hoʻomohala ʻana i ke ʻano kūloko, akā pehea e hoʻokō ai i ka like ma OpenShift?
Ke kikowaena hoʻomohala ma OpenShift
Ina oe e hoomanao, in pou mua, ua nānā mākou i ka mea i kapa ʻia ʻo ka māhele holo o ke kiʻi S2I a ʻike mākou ma ke ʻano maʻamau, ʻo ka module serve ke kuleana no ka lawelawe ʻana i kā mākou noi pūnaewele.
Eia naʻe, inā ʻoe e nānā pono holo palapala mai kēlā laʻana, loaʻa ka $NPM_RUN environment variable, e hiki ai iā ʻoe ke hoʻokō i kāu kauoha.
No ka laʻana, hiki iā mākou ke hoʻohana i ka module nodeshift e kau i kā mākou noi:
Nānā: Hoʻopau ʻia ka laʻana ma luna e hōʻike i ka manaʻo nui.
Maʻaneʻi ua hoʻohui mākou i ka NPM_RUN hoʻololi kaiapuni i kā mākou hoʻolālā, e haʻi ana i ka manawa holo e holo i ke kauoha hoʻomaka yarn, e hoʻomaka ana i ka React development server i loko o kā mākou OpenShift pod.
Inā ʻoe e nānā i ka log o kahi pahu holo, e like me kēia:
ʻOiaʻiʻo, he mea ʻole kēia a hiki i ka hiki iā mākou ke hoʻonohonoho i ke code kūloko me ke code, ka mea i nānā ʻia no nā loli, akā noho ma kahi kikowaena mamao.
ʻO ka hoʻonohonoho ʻana i nā code mamao a kūloko
ʻO ka mea pōmaikaʻi, hiki i ka nodeshift ke kōkua maʻalahi me ka hoʻonohonoho ʻana, a hiki iā ʻoe ke hoʻohana i ke kauoha wati e hahai i nā loli.
No laila, ma hope o kā mākou holo ʻana i ke kauoha e kau i ka kikowaena hoʻomohala no kā mākou noi, hiki iā mākou ke hoʻohana palekana i kēia kauoha:
$ npx nodeshift watch
ʻO ka hopena, e hana ʻia kahi pilina i ka pod holo a mākou i hana ai ma mua iki, e hoʻāla ʻia ka synchronization o kā mākou mau faila kūloko me ka puʻupuʻu mamao, a hoʻomaka nā faila ma kā mākou ʻōnaehana kūloko e nānā ʻia no nā loli.
No laila, inā mākou e hōʻano hou i ka faila src/App.js, e pane ka ʻōnaehana i kēia mau hoʻololi, e kope iā lākou i ka puʻupuʻu mamao a hoʻomaka i ka kikowaena hoʻomohala, a laila e hōʻano hou i kā mākou noi ma ka polokalamu kele pūnaewele.
No ka hoʻopiha ʻana i ke kiʻi, e hōʻike kākou i ke ʻano o kēia mau kauoha holoʻokoʻa:
ʻO ke kauoha kiaʻi he abstraction ma luna o ke kauoha oc rsync, hiki iā ʻoe ke aʻo hou e pili ana i ka hana maanei.
He laʻana kēia no React, akā hiki ke hoʻohana ʻia ke ʻano like me nā frameworks ʻē aʻe, e hoʻonohonoho wale i ka NPM_RUN environment variable e like me ka mea e pono ai.
Nā Paipa Openhift
A laila e kamaʻilio mākou e pili ana i kahi hāmeʻa e like me OpenShift Pipelines a pehea e hiki ai ke hoʻohana ʻia ma ke ʻano he ʻokoʻa i nā kūkulu kaulahao.
He aha nā OpenShift Pipelines
ʻO OpenShift Pipelines kahi ʻōnaehana hoʻohui mau a me ka hoʻouna ʻana i ka ʻōnaehana ʻo CI/CD i hoʻolālā ʻia no ka hoʻonohonoho ʻana i nā pipeline me Tekton. ʻO Tekton kahi kumu hoʻoheheʻe ʻia ʻo Kubernetes-native CI/CD framework e hiki ai iā ʻoe ke hoʻokaʻawale i ka hoʻolalelale ʻana ma nā pae like ʻole (Kubernetes, serverless, virtual machines, etc.) ma ka unuhi ʻana mai ka papa lalo.
Pono ka hoʻomaopopo ʻana i kēia ʻatikala i kekahi ʻike o Pipelines, no laila ke paipai nui nei mākou e heluhelu mua ʻoe puke haʻawina kūhelu.
Hoʻonohonoho i kāu wahi hana
No ka pāʻani me nā hiʻohiʻona o kēia ʻatikala, pono ʻoe e hoʻomākaukau i kāu wahi hana:
E hoʻouka a hoʻonohonoho i kahi puʻupuʻu OpenShift 4. Hoʻohana kā mākou mau hiʻohiʻona i nā CodeReady Containers (CRD) no kēia, hiki ke loaʻa nā ʻōkuhi hoʻonohonoho. maanei.
Ma hope o ka mākaukau ʻana o ka hui, pono ʻoe e hoʻokomo i ka Pipeline Operator ma luna. Mai makaʻu, he maʻalahi, nā kuhikuhi hoʻonohonoho maanei.
E holo i ka mea hana laina kauoha create-react-app e hana i kahi noi āu e kau ai (he noi maʻalahi kēia. pane koke).
(Kūpono) Hoʻopili i ka waihona e holo i ka noi laʻana ma ka wahi me ka npm install a laila hoʻomaka ka npm.
E loaʻa nō hoʻi i ka waihona palapala noi kahi waihona k8s, kahi e loaʻa ai nā Kubernetes/OpenShift YAML i hoʻohana ʻia e kau i ka noi. Aia nā hana, ClusterTasks, Resources and Pipelines a mākou e hana ai ma kēia hale waihona.
E hoʻomaka kākou
ʻO ka hana mua no kā mākou hiʻohiʻona e hana i kahi papahana hou i ka hui OpenShift. E kāhea kākou i kēia papahana webapp-pipeline a hana iā ia me kēia kauoha:
$ oc new-project webapp-pipeline
E hōʻike ʻia kēia inoa papahana ma ke code ma hope aku, no laila, inā hoʻoholo ʻoe e kapa iā ia i kahi mea ʻē aʻe, mai poina e hoʻoponopono i ke code laʻana e like me ia. E hoʻomaka ana mai kēia wahi, ʻaʻole mākou e hele i luna, akā i lalo i luna: ʻo ia hoʻi, e hana mua mākou i nā ʻāpana āpau o ka conveyor, a laila ʻo ka conveyor ponoʻī.
No laila, ʻo ka mea mua ...
Nā hana
E hana mākou i ʻelua mau hana, a laila e kōkua i ka hoʻopili ʻana i ka noi i loko o kā mākou pipeline. ʻO ka hana mua - apply_manifests_task - ke kuleana no ka hoʻohana ʻana i ka YAML o kēlā mau kumuwaiwai Kubernetes (lawelawe, hoʻolaha a me ke ala) aia ma ka waihona k8s o kā mākou noi. ʻO ka hana ʻelua - update_deployment_task - ke kuleana no ka hoʻonui ʻana i kahi kiʻi i kau ʻia i ka mea i hana ʻia e kā mākou pipeline.
Mai hopohopo inā ʻaʻole maopopo loa. ʻO ka ʻoiaʻiʻo, ʻo kēia mau hana he mea like ia me nā pono hana, a e nānā mākou iā lākou i nā kikoʻī hou aku ma hope. I kēia manawa, e hana kākou iā lākou:
A laila, me ka hoʻohana ʻana i ke kauoha tkn CLI, e nānā mākou ua hana ʻia nā hana:
$ tkn task ls
NAME AGE
apply-manifests 1 minute ago
update-deployment 1 minute ago
Nānā: He mau hana kūloko kēia no kāu papahana o kēia manawa.
Nā hana pūʻulu
ʻO nā hana puʻupuʻu e like me nā hana maʻalahi. ʻO ia hoʻi, he hōʻiliʻili hoʻohana hou ia o nā ʻanuʻu i hui pū ʻia ma kekahi ala a i ʻole ke holo ʻana i kahi hana kikoʻī. ʻO ka ʻokoʻa, aia kahi hana puʻupuʻu i nā wahi āpau i loko o ka pūʻulu. No ka ʻike ʻana i ka papa inoa o nā hana cluster i hana ʻia i ka wā e hoʻohui ai i ka Pipeline Operator, e hoʻohana hou mākou i ke kauoha 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
I kēia manawa e hana mākou i ʻelua mau hana cluster. ʻO ka mea mua e hoʻopuka i ke kiʻi S2I a hoʻouna iā ia i ka papa inoa OpenShift kūloko; ʻO ka lua o ke kūkulu ʻana i kā mākou kiʻi ma muli o NGINX, me ka hoʻohana ʻana i ka noi a mākou i kūkulu ai ma ke ʻano he ʻike.
Hana a hoʻouna i ke kiʻi
I ka hana ʻana i ka hana mua, e hana hou mākou i ka mea a mākou i hana ai ma ka ʻatikala mua e pili ana i nā hui pili. E hoʻomanaʻo ua hoʻohana mākou i ke kiʻi S2I (ubi8-s2i-web-app) e "kūkulu" i kā mākou noi, a hoʻopau ʻia me kahi kiʻi i mālama ʻia i loko o ka papa inoa kūloko OpenShift. I kēia manawa e hoʻohana mākou i kēia kiʻi kiʻi pūnaewele S2I e hana i kahi DockerFile no kā mākou app a laila hoʻohana iā Buildah e hana i ka hana maoli a paʻi i ke kiʻi hopena i ka OpenShift internal registry, ʻoiai ʻo ia ka mea a OpenShift e hana ai ke kau ʻoe i kāu mau noi me ka hoʻohana ʻana iā NodeShift. .
Pehea mākou i ʻike ai i kēia mau mea, ke nīnau nei ʻoe? Mai mana mana o Node.js mana, ua kope wale mākou a hoʻololi iā mākou iho.
No laila, e hana kākou i ka s2i-web-app cluster task:
ʻAʻole mākou e hoʻopaʻa kikoʻī i kēia, akā e nānā wale i ka ʻāpana OUTPUT_DIR:
params:
- name: OUTPUT_DIR
description: The location of the build output directory
default: build
Ma ka maʻamau, ua like kēia ʻāpana me ke kūkulu ʻana, kahi e waiho ai ʻo React i ka ʻikepili i hui ʻia. Hoʻohana nā papa hana ʻē aʻe i nā ala like ʻole, no ka laʻana, ma Ember he dist. ʻO ka hoʻopuka o kā mākou hana hui mua he kiʻi i loaʻa ka HTML, JavaScript, a me CSS a mākou i hōʻiliʻili ai.
E kūkulu i kiʻi ma muli o NGINX
ʻO kā mākou hana puʻupuʻu ʻelua, pono ia e kūkulu i kahi kiʻi NGINX no mākou, me ka hoʻohana ʻana i ka ʻike o ka noi a mākou i kūkulu ai. ʻO ka mea nui, ʻo kēia ka ʻāpana o ka pauku mua kahi i nānā ai mākou i nā kūkulu kaulahao.
No ka hana ʻana i kēia, mākou - e like me ka mea ma luna - e hana i kahi hana cluster webapp-build-runtime:
Inā ʻoe e nānā i ke code no kēia mau hana puʻupuʻu, ʻike ʻoe ʻaʻole ia e kuhikuhi i ka waihona Git a mākou e hana nei a i ʻole nā inoa o nā kiʻi a mākou e hana nei. Hōʻike wale mākou i ka mea a mākou e neʻe nei iā Git, a i ʻole kekahi kiʻi kahi e hoʻopuka ai ke kiʻi hope. ʻO ia ke kumu e hiki ai ke hoʻohana hou ʻia kēia mau hana cluster i ka wā e hana pū ai me nā noi ʻē aʻe.
A eia mākou me ka lokomaikaʻi e neʻe aku i kahi aʻe ...
Nā Punawai
No laila, no ka mea, e like me kā mākou i ʻōlelo ai, pono nā hana cluster e like me ka mea hiki, pono mākou e hana i nā kumuwaiwai e hoʻohana ʻia e like me ka hoʻokomo (ka waihona Git) a me ka puka (nā kiʻi hope). ʻO ka punawai mua a mākou e pono ai ʻo Git, kahi e noho ai kā mākou noi, e like me kēia:
# 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
Eia ʻo PipelineResource o ke ʻano git. ʻO ke kī url ma ka ʻāpana params e kuhikuhi ana i kahi waihona kikoʻī a kuhikuhi i ka lālā kumu (he koho kēia, akā kākau mākou no ka hoʻopiha ʻana).
I kēia manawa pono mākou e hana i kahi kumuwaiwai no ke kiʻi kahi e mālama ʻia ai nā hopena o ka hana s2i-web-app, hana ʻia e like me kēia:
# 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
Eia ka PipelineResource o ke ʻano kiʻi, a ʻo ka waiwai o ka ʻāpana url e kuhikuhi ana i ka OpenShift Image Registry i loko, ʻo ia hoʻi ka mea i loaʻa ma ka webapp-pipeline namespace. Mai poina e hoʻololi i kēia hoʻonohonoho inā hoʻohana ʻoe i kahi inoa inoa ʻē aʻe.
A ʻo ka mea hope loa, ʻo ka punawai hope loa e pono ai mākou he kiʻi ʻano ʻano a ʻo ia ke kiʻi NGINX hope loa e hoʻohana ʻia i ka wā o ka hoʻolālā ʻana:
# 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
Eia hou, e hoʻomanaʻo e mālama kēia kumuwaiwai i ke kiʻi i loko o ka waihona OpenShift kūloko ma ka webapp-pipeline namespace.
No ka hana ʻana i kēia mau kumuwaiwai i ka manawa hoʻokahi, hoʻohana mākou i ke kauoha hana:
Lawe kēia hana i nā ʻāpana hoʻokomo (gir resource) a me ka hoʻopuka (built-web-application-image resource). Hāʻawi pū mākou iā ia i kahi ʻāpana kūikawā i ʻole ia e hōʻoia i ka TLS no ka mea ke hoʻohana nei mākou i nā palapala hōʻoia ponoʻī:
E like me ka hana ma mua, hele mākou i kahi kumuwaiwai, akā i kēia manawa ua kūkulu ʻia-web-application-image (ka hopena o kā mākou hana mua). A ma ke ʻano he hoʻopuka hoʻonohonoho hou mākou i ke kiʻi. No ka mea pono e hoʻokō ʻia kēia hana ma hope o ka mea ma mua, hoʻohui mākou i ke kahua runAfter:
ʻO nā hana ʻelua e hiki mai ana ke kuleana no ka hoʻohana ʻana i ka lawelawe, ke ala a me ka waiho ʻana i nā faila YAML e noho nei ma ka papa kuhikuhi k8s o kā mākou noi pūnaewele, a no ka hoʻonui ʻana i kēia hoʻolālā i ka wā e hana ana i nā kiʻi hou. Ua wehewehe mākou i kēia mau hana cluster ʻelua ma ka hoʻomaka o ka ʻatikala.
Hoʻomaka i ka conveyor
No laila, hana ʻia nā ʻāpana āpau o kā mākou pipeline, a e holo mākou me kēia kauoha:
$ tkn pipeline start build-and-deploy-react
I kēia manawa, hoʻohana ʻia ka laina kauoha a pono ʻoe e koho i nā kumuwaiwai kūpono i ka pane ʻana i kēlā me kēia o kāna mau noi: no ka punawai git, koho i ka web-application-repo, a laila no ka punawai kiʻi mua, built-web-application. -kiʻi, a me ka hope, no ke kiʻi kiʻi lua –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
I kēia manawa, e nānā kākou i ke kūlana o ka pipeline me ka hoʻohana ʻana i kēia kauoha:
$ tkn pipeline logs -f
I ka manawa i hoʻomaka ai ka pipeline a ua kau ʻia ka noi, hiki iā mākou ke noi i ke ala i paʻi ʻia me kēia kauoha:
$ oc get route react-pipeline-example --template='http://{{.spec.host}}'
No ka ʻike nui aku, hiki iā ʻoe ke nānā i kā mākou pipeline ma ke ʻano Developer mode o ka console pūnaewele ma ka ʻāpana ʻO Pipelines, e like me ka hoikeia ma ka Fig. 1.
Fig.1. Ka nānā ʻana i nā paipu holo.
Ke kaomi ʻana i kahi pipeline holo e hōʻike i nā kikoʻī hou aku, e like me ka hōʻike ʻana ma ke Kiʻi 2.
Laiki. 2. Nā ʻike hou aku e pili ana i ka pipeline.
Ma hope o ka ʻike hou aku, hiki iā ʻoe ke ʻike i ka holo ʻana o nā noi ma ka ʻike Hoʻoponopono, e like me ka hoikeia ma ka Fig.3.
Fig 3. Launched pod.
Ke kaomi ʻana i ka pōʻai ma ka ʻaoʻao ʻākau ʻākau o ka ikona e wehe i kā mākou noi, e like me ka hōʻike ʻana ma ke kiʻi 4.
Laiki. 4. Holoi React palapala noi.
hopena
No laila, ua hōʻike mākou pehea e holo ai i kahi kikowaena hoʻomohala no kāu noi ma OpenShift a hoʻonohonoho pū me ia me ka ʻōnaehana faila kūloko. Ua nānā pū mākou i ke ʻano o ka hoʻohālikelike ʻana i kahi hoʻohālike i kūkulu ʻia me ka hoʻohana ʻana i OpenShift Pipelines. Hiki ke loaʻa nā code laʻana a pau mai kēia ʻatikala maanei.
Ke hoʻomaka nei mākou i kahi ʻano o nā webinars Pōʻalima e pili ana i ka ʻike maoli me ka hoʻohana ʻana iā Red Hat OpenShift Container Platform a me Kubernetes: