Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

Pòs sa a te ekri paske anplwaye nou yo te gen anpil konvèsasyon ak kliyan sou devlopman aplikasyon sou Kubernetes ak spesifik devlopman sa yo sou OpenShift.

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

Anjeneral nou kòmanse ak tèz ke Kubernetes se jis Kubernetes, ak OpenShift se deja yon platfòm Kubernetes, tankou Microsoft AKS oswa Amazon EKS. Chak nan platfòm sa yo gen avantaj pwòp li yo, konsantre sou yon odyans sib patikilye. Apre sa, konvèsasyon an deja koule nan yon konparezon nan fòs yo ak feblès nan platfòm espesifik.

An jeneral, nou te panse ekri pòs sa a ak yon pwodiksyon tankou "Koute, li pa enpòtan kote ou kouri kòd la, sou OpenShift oswa sou AKS, sou EKS, sou kèk Kubernetes koutim, wi sou nenpòt Kubernetes. (Ann rele l KUK pou yon kout) "Li vrèman senp, tou de la ak la."

Lè sa a, nou te planifye pou pran "Bonjou mond lan" ki pi senp epi sèvi ak li pou montre sa ki komen ak ki diferans ki genyen ant CMC ak Red Hat OpenShift Container Platform (apwe sa, OCP oswa tou senpleman OpenShift).

Sepandan, pandan n ap ekri pòs sa a, nou te reyalize ke nou te tèlman abitye itilize OpenShift ke nou tou senpleman pa reyalize ki jan li te grandi ak tounen yon platfòm etonan ki te vin pi plis pase jis yon distribisyon Kubernetes. Nou gen tandans pran matirite ak senplisite OpenShift pou yo akòde, pandan y ap neglije mayifisans li yo.

An jeneral, lè a rive pou tounen vin jwenn Bondye aktif, epi kounye a nou pral etap pa etap konpare komisyon an nan "Hello World" nou an sou KUK ak sou OpenShift, epi nou pral fè li kòm objektivman ke posib (byen, petèt pafwa montre yon pèsonèl. atitid anvè sijè a). Si w enterese nan yon opinyon piman subjectif sou pwoblèm sa a, Lè sa a, ou ka li li isit la (EN). Ak nan pòs sa a nou pral bwa nan reyalite yo ak sèlman reyalite yo.

Grap

Kidonk, "Hello World" nou an bezwen grap. Ann jis di "non" nan nenpòt nwaj piblik, pou yo pa peye pou serveurs, rejis, rezo, transfè done, elatriye. An konsekans, nou chwazi yon grap senp yon sèl-nœud sou Minikube (pou KUK) ak Kòd Pare Resipyan (pou yon gwoup OpenShift). Tou de nan opsyon sa yo se reyèlman fasil enstale, men yo mande anpil resous sou laptop ou.

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

Asanble sou KUK-e

Se konsa, kite a ale.

Etap 1 - Bati imaj veso nou an

Ann kòmanse pa deplwaye "Hello World" nou an nan minikube. Sa a pral mande pou:

  1. 1. Enstale Docker.
  2. 2. Enstale Git.
  3. 3. Enstale Maven (aktyèlman, pwojè sa a sèvi ak mvnw binè, kidonk, ou ka fè san li).
  4. 4. Aktyèlman, sous la tèt li, i.e. klonaj depo github.com/gcolman/quarkus-hello-world.git

Premye etap la se kreye yon pwojè Quarkus. Ou pa bezwen pè si ou pa janm itilize Quarkus.io - li fasil. Ou jis chwazi eleman ou vle itilize nan pwojè a (RestEasy, Hibernate, Amazon SQS, Camel, elatriye), ak Lè sa a, Quarkus tèt li, san okenn nan patisipasyon ou, mete kanpe arketip nan maven epi mete tout bagay sou github. Sa vle di, literalman yon sèl klike sou sourit la - epi w ap fini. Se poutèt sa nou renmen Quarkus.

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

Fason ki pi fasil pou konstwi "Hello World" nou an nan yon imaj containerized se sèvi ak ekstansyon quarkus-maven pou Docker, ki pral fè tout travay ki nesesè yo. Avèk avenman Quarkus, sa a te vin vrèman fasil ak senp: ajoute ekstansyon veso-imaj-docker epi ou ka kreye imaj ak kòmandman maven.

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

Epi finalman, nou bati imaj nou an lè l sèvi avèk Maven. Kòm yon rezilta, kòd sous nou an vin tounen yon imaj veso ki pare, ki ka deja kouri nan ègzekutabl veso a.

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

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

Sa, an reyalite, se tout, kounye a ou ka kouri veso a ak lòd la kouri Docker, li te gen kat sèvis nou an nan pò 8080 pou li ka jwenn aksè.

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

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

Apre egzanp veso a te kòmanse, tout sa ki rete se tcheke avèk kòmand boukl ke sèvis nou an ap kouri:

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

Se konsa, tout bagay ap travay, epi li te reyèlman fasil ak senp.

Etap 2 - Soumèt veso nou an nan depo imaj veso a

Pou kounye a, imaj nou kreye a estoke lokalman nan depo veso lokal nou an. Si nou vle sèvi ak imaj sa a nan anviwònman KUK nou an, Lè sa a, nou bezwen mete l 'nan kèk lòt depo. Kubernetes pa gen karakteristik sa yo, kidonk nou pral sèvi ak dockerhub. Paske, premye, li gratis, epi dezyèmman, (prèske) tout moun fè li.

Sa a se tou trè senp, epi sèlman yon kont dockerhub ki nesesè isit la.

Se konsa, nou enstale dockerhub epi voye imaj nou an la.

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

Etap 3 - Kòmanse Kubernetes

Gen plizyè fason yo mete ansanm yon konfigirasyon kubernetes pou kouri "Bonjou mond nou an", men nou pral sèvi ak pi senp nan yo, paske nou se moun sa yo ...

Premyèman, nou kòmanse gwoup minikube a:

minikube start

Etap 4 - Deplwaye Imaj veso nou an

Koulye a, nou bezwen konvèti kòd nou an ak imaj veso a nan konfigirasyon kubernetes. Nan lòt mo, nou bezwen yon gous ak yon definisyon deplwaman ki montre imaj veso nou an sou dockerhub. Youn nan fason ki pi fasil pou fè sa se kouri kòmandman an kreye deplwaman ki montre imaj nou an:

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

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

Avèk lòd sa a, nou te di COOK nou an pou kreye yon konfigirasyon deplwaman, ki ta dwe gen ladan spesifikasyon gous pou imaj veso nou an. Kòmand sa a pral aplike tou konfigirasyon sa a nan gwoup minikube nou an, epi kreye yon deplwaman ki pral telechaje imaj veso nou an epi kouri yon gous sou gwoup la.

Etap 5 - louvri aksè nan sèvis nou an

Kounye a ke nou gen yon imaj veso deplwaye, li lè yo reflechi sou ki jan yo konfigirasyon aksè ekstèn nan sèvis sa a Restful, ki, an reyalite, se pwograme nan kòd nou an.

Gen plizyè fason isit la. Pou egzanp, ou ka itilize lòd la ekspoze otomatikman kreye konpozan Kubernetes apwopriye tankou sèvis ak pwen final. Aktyèlman, sa a se sa nou pral fè lè nou egzekite lòd la ekspoze pou objè deplwaman nou an:

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

Ann rete sou opsyon "-type" nan lòd la ekspoze pou yon ti moman.

Lè nou ekspoze ak kreye eleman ki nesesè pou kouri sèvis nou an, nou bezwen, pami lòt bagay, pou kapab konekte soti nan deyò a nan sèvis la hello-quarkus ki chita andedan rezo lojisyèl nou an defini. Ak paramèt kalite pèmèt nou kreye ak konekte bagay tankou balanse chaj pou wout trafik nan rezo sa a.

Pou egzanp, ekri tip=LoadBalancer, nou otomatikman inisyalize balans piblik chaj nwaj la pou konekte avèk gwoup Kubernetes nou an. Sa a, nan kou, se gwo, men ou bezwen konprann ke tankou yon konfigirasyon pral byen mare nan yon nwaj piblik espesifik epi li pral pi difisil transfere li ant ka Kubernetes nan diferan anviwònman.

Nan egzanp nou an tip=NodePort, se sa ki, apèl la nan sèvis nou an ale pa adrès la IP nan ne a ak nimewo pò a. Opsyon sa a pèmèt ou pa sèvi ak okenn nwaj piblik, men li mande pou yon kantite etap adisyonèl. Premyèman, ou bezwen pwòp balans chaj ou, kidonk nou pral deplwaye balans chaj NGINX nan gwoup nou an.

Etap 6 - Mete kanpe yon balanse chaj

minikube gen yon kantite karakteristik platfòm ki fè li fasil pou kreye eleman ou bezwen pou aksè ekstèn, tankou kontwolè antre. Minikube vini fourni ak kontwolè Nginx antre, ak tout sa nou dwe fè se pèmèt li ak konfigirasyon li.

minikube addons enable ingress

Koulye a, ak yon sèl kòmandman, nou pral kreye yon kontwolè antre Nginx ki pral travay andedan gwoup minikube nou an:

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

Etap 7 - Mete kanpe antre a

Koulye a, nou bezwen konfigirasyon kontwolè Nginx pou aksepte demann hello-quarkus.

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

Epi finalman, nou bezwen aplike konfigirasyon sa a.

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

kubectl apply -f ingress.yml

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

Depi nou ap fè tout bagay sa yo sou pwòp machin nou an, nou tou senpleman ajoute adrès IP ne nou an nan fichye /etc/hosts yo nan lòd yo dirije demann http nan minikube nou an nan balans chaj NGINX la.

192.168.99.100 hello-quarkus.info

Sa a se li, kounye a sèvis minikube nou an disponib soti deyò nan kontwolè Nginx antre.

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

Oke, sa te fasil, pa vre? Oswa pa tèlman?

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

Kouri sou OpenShift (Kontenè ki pare kòd)

Epi kounye a, ann wè ki jan tout bagay fèt sou Red Hat OpenShift Container Platform (OCP).

Kòm nan ka a nan minikube, nou chwazi yon konplo ak yon gwoup OpenShift yon sèl-ne nan fòm lan nan Code Ready Containers (CRC). Li te konn rele minishift e li te baze sou pwojè OpenShift Orijin, men kounye a li se CRC e li te bati sou OpenShift Container Platform Red Hat.

Isit la, padon, nou pa ka ede men di: "OpenShift se gwo!"

Okòmansman, nou te panse yo ekri ke devlopman sou OpenShift pa diferan de devlopman sou Kubernetes. E an reyalite, se konsa li ye. Men, nan pwosesis la nan ekri pòs sa a, nou sonje konbyen mouvman nesesè ou dwe fè lè ou pa gen OpenShift, ak Se poutèt sa, ankò, li se bèl. Nou renmen bagay yo fasil, e jan li fasil pou deplwaye ak kouri egzanp nou an sou OpenShift konpare ak minikube se sa ki enspire nou ekri pòs sa a.

Ann kouri atravè pwosesis la epi wè sa nou bezwen fè.

Se konsa, nan egzanp minikube a, nou te kòmanse ak Docker... Tann, nou pa bezwen Docker enstale sou machin nan ankò.

Epi nou pa bezwen yon git lokal.
Epi Maven pa bezwen.
Epi ou pa bezwen kreye yon imaj veso alamen.
Epi ou pa bezwen chèche nenpòt ki depo imaj veso yo.
Epi ou pa bezwen enstale yon kontwolè antre.
Epi ou pa bezwen configured antre tou.

Eske ou konprann? Pou deplwaye ak kouri aplikasyon nou an sou OpenShift, okenn nan sa ki anwo yo pa nesesè. Ak pwosesis la tèt li se jan sa a.

Etap 1 - Kòmanse OpenShift Cluster ou a

Nou itilize Code Ready Containers ki soti nan Red Hat, ki se esansyèlman menm Minikube a, men se sèlman ak yon gwoup Openshift plen yon sèl-node.

crc start

Etap 2 - Konstwi ak Deplwaye Aplikasyon an nan OpenShift Cluster la

Se nan etap sa a ke senplisite la ak konvenyans nan OpenShift manifeste tèt li nan tout bèl pouvwa li yo. Menm jan ak tout distribisyon Kubernetes, nou gen plizyè fason pou kouri yon aplikasyon sou yon gwoup. Epi, tankou nan ka a nan KUK, nou espesyalman chwazi youn ki pi senp.

OpenShift te toujou bati kòm yon platfòm pou bati ak kouri aplikasyon kontenè. Bati kontenè te toujou yon pati entegral nan platfòm sa a, kidonk gen yon pakèt resous Kubernetes adisyonèl pou travay ki koresponn yo.

Nou pral sèvi ak pwosesis OpenShift Sous 2 Imaj (S2I), ki gen plizyè fason diferan pou pran sous nou an (kòd oswa binè) epi tounen li nan yon imaj veso ki kouri sou yon grap OpenShift.

Pou sa nou bezwen de bagay:

  • Kòd sous nou an nan depo git la
  • Builder-imaj, ki baze sou ki asanble a pral fèt.

Gen anpil imaj sa yo, ki kenbe tou de pa Red Hat ak pa kominote a, epi nou pral sèvi ak imaj OpenJDK la, byen, depi m ap bati yon aplikasyon Java.

Ou ka kouri yon S2I bati tou de soti nan OpenShift Developer konsole grafik la ak nan liy lan lòd. Nou pral sèvi ak kòmandman nan nouvo-app, di li ki kote yo ka resevwa imaj la mason ak kòd sous nou an.

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

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

Sa a se li, se aplikasyon nou an kreye. Nan fè sa, pwosesis S2I te fè bagay sa yo:

  • Kreye yon sèvis bati-gous pou tout kalite bagay ki gen rapò ak bati aplikasyon an.
  • Kreye yon konfigirasyon OpenShift Build.
  • Mwen telechaje imaj mason an nan rejis Docker OpenShift entèn la.
  • Klone "Hello World" nan depo lokal yo.
  • Saw te gen yon maven pom nan la e konsa konpile app a ak maven.
  • Kreye yon nouvo imaj veso ki gen aplikasyon Java konpile epi mete imaj sa a nan rejis veso entèn la.
  • Kreye yon deplwaman Kubernetes ak espesifikasyon pou yon gous, sèvis, elatriye.
  • Te lanse imaj veso deplwaye.
  • Retire sèvis bati-gous.

Gen anpil bagay sou lis sa a, men bagay prensipal la se ke tout konstriksyon an fèt sèlman andedan OpenShift, rejis Docker entèn la se andedan OpenShift, ak pwosesis konstriksyon kreye tout konpozan Kubernetes epi kouri yo sou gwoup la.

Si ou vizyèlman kontwole lansman S2I nan konsole a, ou ka wè ki jan gous la bati yo te lanse pandan konstriksyon an.

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

Epi kounye a, ann gade nan mòso bwa gous mason yo: premyèman, la ou ka wè ki jan Maven fè travay li ak telechaje depandans yo bati aplikasyon java nou an.

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

Apre yo fin bati Maven a fini, yo kòmanse bati imaj veso a, epi li voye imaj sa a nan depo entèn la.

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

Tout bagay, pwosesis asanble a fini. Koulye a, ann asire w ke gous ak sèvis aplikasyon nou an te kòmanse nan gwoup la.

oc get service

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

Se tout. Epi gen yon sèl ekip. Tout sa nou dwe fè se ekspoze sèvis sa a pou aksè deyò.

Etap 3 - fè sèvis la ekspoze pou aksè soti deyò

Kòm nan ka KUK, sou platfòm OpenShift la, "Hello World" nou an bezwen tou yon routeur pou dirije trafik ekstèn nan yon sèvis andedan gwoup la. Nan OpenShift sa fè li trè fasil. Premyèman, eleman routage HAProxy enstale nan gwoup la pa default (li ka chanje nan menm NGINX la). Dezyèmman, gen resous espesyal ak trè configurable ki rele Routes, ki okoumansman de objè Ingress nan bon ansyen Kubernetes (an reyalite, Wout OpenShift yo te enfliyanse anpil konsepsyon objè Ingress, ki kounye a ka itilize nan OpenShift), men pou nou "Alo. World", ak nan prèske tout lòt ka, wout estanda a ase pou nou san konfigirasyon adisyonèl.

Pou kreye yon FQDN routable pou "Hello World" (wi, OpenShiift gen pwòp DNS li pou routage pa non sèvis), nou tou senpleman ekspoze sèvis nou an:

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

oc expose service quarkus-hello-world

Si w gade wout ki fèk kreye a, lè sa a ou ka jwenn FQDN a ak lòt enfòmasyon sou routage la:

oc get route

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

Epi finalman, nou jwenn aksè nan sèvis nou an nan navigatè a:

Mwen regrèt, OpenShift, nou pa t 'apresye ou ase epi nou te pran ou pou akòde

Men kounye a li te vrèman fasil!

Nou renmen Kubernetes ak tout sa teknoloji sa a pèmèt ou fè, epi nou renmen tou senplisite ak légèreté. Kubernetes te fèt pou fè distribye, resipyan évolutive ekstrèmman fasil pou opere, men senplisite li yo pa ase ankò pou pote aplikasyon yo nan pwodiksyon jodi a. Sa a se kote OpenShift antre nan jwèt, kenbe ak tan yo ak ofri devlopè-santre Kubernetes. Yo te envesti anpil efò pou adapte platfòm OpenShift a espesyalman pou pwomotè a, ki gen ladan kreyasyon zouti tankou S2I, ODI, Developer Portal, OpenShift Operator Framework, entegrasyon IDE, Katalòg Developer, Helm entegrasyon, siveyans, ak anpil lòt.

Nou espere ke atik sa a te enteresan ak itil pou ou. Epi ou ka jwenn resous adisyonèl, materyèl ak lòt bagay ki itil pou devlope sou platfòm OpenShift sou pòtal la Devlopè Red Hat.

Sous: www.habr.com

Add nouvo kòmantè