ProHoster > Blog > Amministrazione > Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru
Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru
Questu post hè statu scrittu perchè u nostru staffu hà avutu parechje conversazioni cù i clienti nantu à u sviluppu di l'applicazioni in Kubernetes è e specificità di tali sviluppu in OpenShift.
Di solitu cuminciamu cù a tesi chì Kubernetes hè solu Kubernetes, è OpenShift hè digià una piattaforma Kubernetes, cum'è Microsoft AKS o Amazon EKS. Ciascuna di queste piattaforme hà i so vantaghji, focalizati in un publicu di destinazione particulari. E dopu, a cunversazione hè digià in un paragone di i punti di forza è di debule di e plataforme specifiche.
In generale, avemu pensatu à scrive stu post cun un output cum'è "Ascolta, ùn importa micca induve eseguite u codice, in OpenShift o in AKS, in EKS, in qualchi Kubernetes persunalizati, sì in qualsiasi Kubernetes. (chiamemu KUK in breve) "Hè veramente simplice, sia quì è quì."
Allora avemu pensatu à piglià u più simplice "Hello World" è l'utilizanu per mustrà ciò chì hè cumunu è quale sò e sferenze trà a CMC è a piattaforma di contenitori Red Hat OpenShift (in seguitu, OCP o simpliciamente OpenShift).
Tuttavia, durante a scrittura di stu post, avemu capitu chì avemu diventatu cusì abituatu à aduprà OpenShift chì simpricimenti ùn avemu micca capitu cumu hè cresciutu è diventatu in una piattaforma stupenda chì hè diventata assai più cà una distribuzione Kubernetes. Tendemu à piglià a maturità è a simplicità di OpenShift per cuncessu, mentre trascurate a so magnificenza.
In generale, hè ghjuntu u tempu per u pentimentu attivu, è avà compariremu passu à passu a cummissione di u nostru "Hello World" in KUK è in OpenShift, è l'avemu da fà u più obiettivu pussibule (bene, salvu qualchì volta mustrà un persunale persunale). attitudine à u sughjettu). Sè vo site interessatu in una opinione puramente subjectiva nantu à questu tema, pudete leghje ici (FR). È in questu post ci fermamu à i fatti è solu i fatti.
Clusters
Allora, u nostru "Hello World" hà bisognu di clusters. Dicemu solu "nè" à ogni nuvola publica, per ùn pagà per i servitori, registri, rete, trasferimentu di dati, etc. Per quessa, scegliemu un cluster simplice di un nodu Minikube (per KUK) è Cuntenitori Pronti à Codice (per un cluster OpenShift). E duie opzioni sò veramente facili da installà, ma necessitanu assai risorse in u vostru laptop.
Assemblea nantu à KUK-e
Allora andemu
Passu 1 - Custruì u Nostru Container Image
Cuminciamu da implementà u nostru "Hello World" à minikube. Questu averebbe bisognu:
1. Docker installatu.
2. Git installatu.
3. Installatu Maven (in verità, stu prughjettu usa mvnw binariu, perchè pudete fà senza ellu).
U primu passu hè di creà un prughjettu Quarkus. Ùn àbbia paura si ùn avete mai usatu Quarkus.io - hè faciule. Basta selezziunate i cumpunenti chì vulete usà in u prugettu (RestEasy, Hibernate, Amazon SQS, Camel, etc.), è poi Quarkus stessu, senza alcuna di a vostra participazione, stabilisce l'archetipu maven è mette tuttu in github. Questu hè, literalmente un clic di u mouse - è avete finitu. Hè per quessa chì amemu Quarkus.
A manera più faciule di custruisce u nostru "Hello World" in una maghjina cuntainerizzata hè di utilizà l'estensioni quarkus-maven per Docker, chì farà tuttu u travagliu necessariu. Cù l'avventu di Quarkus, questu hè diventatu veramente faciule è simplice: aghjunghje l'estensione container-image-docker è pudete creà imagine cù cumandamenti maven.
È infine, custruemu a nostra maghjina cù Maven. In u risultatu, u nostru codice fonte si trasforma in una maghjina di cuntainer pronta, chì pò digià esse eseguita in u tempu di u cuntinuu.
Questu, in fattu, hè tuttu, avà pudete eseguisce u cuntinuu cù u cumandamentu di u docker run, dopu avè mappatu u nostru serviziu à u portu 8080 per pudè accede.
docker run -i — rm -p 8080:8080 gcolman/quarkus-hello-world
Dopu chì l'istanza di u containeru hà iniziatu, tuttu ciò chì resta hè di verificà cù u cumandamentu curl chì u nostru serviziu hè in esecuzione:
Allora, tuttu funziona, è era veramente faciule è simplice.
Passu 2 - Inviate u nostru containeru à u repositoriu di l'imagine di u containeru
Per avà, l'imaghjini chì avemu creatu hè guardatu in u locu in u nostru almacenamentu di cuntainer locale. Se vulemu aduprà sta maghjina in u nostru ambiente KUK, allora avemu bisognu di mette in un altru repository. Kubernetes ùn hà micca queste caratteristiche, cusì useremu dockerhub. Perchè, prima, hè liberu, è secondu, (quasi) tutti facenu.
Questu hè ancu assai simplice, è solu un contu dockerhub hè necessariu quì.
Allora, installemu dockerhub è mandemu a nostra maghjina quì.
Passu 3 - Start Kubernetes
Ci hè parechje manere di mette inseme una cunfigurazione kubernetes per eseguisce u nostru "Hello World", ma useremu u più simplice di elli, perchè simu tali persone ...
Prima, lanciamu u cluster minikube:
minikube start
Passu 4 - Implantazione di a nostra Image Container
Avà avemu bisognu di cunvertisce u nostru codice è l'imagine di u containeru in a cunfigurazione di kubernetes. In altri palori, avemu bisognu di un pod è una definizione di implementazione chì punta à a nostra maghjina di cuntainer in dockerhub. Unu di i modi più faciuli di fà questu hè di eseguisce u cumandamentu di creazione di implementazione chì punta à a nostra maghjina:
Cù questu cumandamentu, avemu dettu à u nostru COOK per creà una cunfigurazione di implementazione, chì deve cuntene a specificazione di pod per a nostra maghjina di cuntainer. Questu cumanda ancu applicà sta cunfigurazione à u nostru cluster minikube, è crea una implementazione chì scaricarà a nostra maghjina di cuntainer è eseguisce un pod in u cluster.
Passu 5 - accessu apertu à u nostru serviziu
Avà chì avemu una maghjina di cuntainer implementata, hè ora di pensà à cumu cunfigurà l'accessu esternu à stu serviziu Restful, chì, in fattu, hè programatu in u nostru codice.
Ci sò parechje manere quì. Per esempiu, pudete aduprà u cumandamentu di esposizione per creà automaticamente cumpunenti Kubernetes adattati cum'è servizii è endpoints. In realtà, questu hè ciò chì faremu eseguendu u cumandamentu di esposizione per u nostru ughjettu di implementazione:
Fighjemu nantu à l'opzione "-type" di u cumandamentu di l'esposizione per un mumentu.
Quandu avemu espunutu è creanu i cumpunenti necessarii per eseguisce u nostru serviziu, avemu bisognu, frà altre cose, per pudè cunnette da l'esternu à u serviziu hello-quarkus chì si trova in a nostra rete definita da u software. È paràmetru activité ci permette di creà è cunnetta cose cum'è balancers di carica per indirizzà u trafficu à quella reta.
Per esempiu, scrive type=LoadBalancer, avemu inizializatu automaticamente u bilanciu di carica di nuvola publica per cunnette à u nostru cluster Kubernetes. Questu, sicuru, hè grande, ma avete bisognu di capiscenu chì una tale cunfigurazione serà strettamente ligata à un nuvulu publicu specificu è serà più difficiuli di trasfiriri trà l'istanze di Kubernetes in diverse ambienti.
In u nostru esempiu tipu = NodePort, vale à dì, a chjama à u nostru serviziu passa per l'indirizzu IP di u node è u numeru di portu. Questa opzione permette di ùn utilizà micca nuvole publicu, ma richiede una quantità di passi supplementari. Prima, avete bisognu di u vostru propiu equilibratore di carica, cusì implementeremu u equilibratore di carica NGINX in u nostru cluster.
Passu 6 - Stallà un balancer di carica
minikube hà una quantità di funzioni di piattaforma chì facenu fàciule per creà i cumpunenti chì avete bisognu per l'accessu esternu, cum'è i cuntrolli di ingressu. Minikube vene in bundle cù u controller di ingressu Nginx, è tuttu ciò chì avemu da fà hè attivà è cunfigurà.
minikube addons enable ingress
Avà, cù un solu cumandamentu, creeremu un controller di ingressu Nginx chì funzionerà in u nostru cluster minikube:
Avà avemu bisognu di cunfigurà u controller di ingressu Nginx per accettà e dumande di hello-quarkus.
È infine, avemu bisognu di applicà sta cunfigurazione.
kubectl apply -f ingress.yml
Siccomu facemu tuttu questu nantu à a nostra propria macchina, aghjustemu simpricimenti l'indirizzu IP di u nostru node à u schedariu /etc/hosts per dirighjenu e richieste http à u nostru minikube à u bilanciu di carica NGINX.
192.168.99.100 hello-quarkus.info
Hè questu, avà u nostru serviziu minikube hè dispunibule da l'esternu attraversu u controller di ingressu Nginx.
Ebbè, era faciule, nò? O micca veramente?
Eseguite nantu à OpenShift (Code Ready Containers)
È avà vedemu cumu si faci tuttu nantu à a Red Hat OpenShift Container Platform (OCP).
Cum'è in u casu di minikube, scegliemu un schema cù un cluster OpenShift unicu node in forma di Code Ready Containers (CRC). Era chjamatu minishift è era basatu annantu à u prughjettu OpenShift Origin, ma avà hè CRC è custruitu nantu à a piattaforma OpenShift Container Red Hat.
Eccu, scusate, ùn pudemu micca impedisce di dì : "OpenShift hè grande!"
Inizialmente, avemu pensatu à scrive chì u sviluppu nantu à OpenShift ùn hè micca sfarente di u sviluppu in Kubernetes. È in fatti, hè cusì. Ma in u prucessu di scrive stu post, avemu ricurdatu quantu muvimenti innecessarii duvete fà quandu ùn avete micca OpenShift, è per quessa, di novu, hè bella. Amamu e cose per esse faciuli, è quantu hè faciule di implementà è eseguisce u nostru esempiu nantu à OpenShift cumparatu cù minikube hè ciò chì ci hà inspiratu à scrive stu post.
Andemu à traversu u prucessu è vede ciò chì avemu bisognu di fà.
Allora in l'esempiu di minikube, avemu principiatu cù Docker ... Aspetta, ùn avemu micca bisognu di Docker installatu nantu à a macchina.
È ùn avemu micca bisognu di git locale.
È Maven ùn hè micca necessariu.
È ùn avete micca bisognu di creà una maghjina di cuntainer cù a manu.
È ùn avete micca bisognu di circà un repository di l'imaghjini di u containeru.
È ùn avete micca bisognu di installà un controller di ingressu.
È ùn avete micca bisognu di cunfigurà l'ingressu.
Capisci? Per implementà è eseguisce a nostra applicazione in OpenShift, nimu di ciò chì sopra hè necessariu. È u prucessu stessu hè u seguitu.
Passu 1 - Cumincià u vostru OpenShift Cluster
Utilizemu Code Ready Containers da Red Hat, chì hè essenzialmente u stessu Minikube, ma solu cù un cluster Openshift à un node cumpletu.
crc start
Passu 2 - Custruite è implementate l'Applicazione à u Cluster OpenShift
Hè in questu passu chì a simplicità è a cunvenzione di OpenShift si manifesta in tutta a so gloria. Cum'è cù tutte e distribuzioni Kubernetes, avemu parechje manere di eseguisce una applicazione nantu à un cluster. E, cum'è in u casu di KUK, sceglimu specificamente u più simplice.
OpenShift hè sempre statu custruitu cum'è una piattaforma per custruisce è eseguisce applicazioni containerizzate. Custruì cuntenituri hè sempre stata una parte integrante di sta piattaforma, cusì ci sò una mansa di risorse Kubernetes supplementari per i travaglii currispondenti.
Useremu u prucessu di l'Image Source 2 (S2I) di OpenShift, chì hà parechje manere di piglià a nostra fonte (codice o binari) è trasfurmà in una maghjina cuntainerizzata chì corre nantu à un cluster OpenShift.
Per questu avemu bisognu di duie cose:
U nostru codice fonte in u repository git
Builder-image, basatu nantu à quale l'assemblea serà realizatu.
Ci hè parechje tali imagine, mantinutu da Red Hat è da a cumunità, è avemu aduprà l'imagine OpenJDK, bè, postu chì custruì una applicazione Java.
Pudete eseguisce un S2I build sia da a cunsola grafica OpenShift Developer sia da a linea di cummanda. Avemu aduprà u cumandimu novu-app, dicendu induve pè ottene l 'imagine custruttore è u nostru codice fonte.
Hè cusì, a nostra applicazione hè creata. Fendu cusì, u prucessu S2I hà fattu e cose seguenti:
Creatu un serviziu build-pod per ogni tipu di cose ligati à custruisce l'applicazione.
Criatu una cunfigurazione OpenShift Build.
Aghju scaricatu l'imaghjini di u custruttore à u registru docker internu OpenShift.
Clonatu "Hello World" à u repositoriu lucale.
Vittu chì ci era un maven pom in quì è cusì cumpilatu l'app cù Maven.
Criatu una nova maghjina di cuntainer chì cuntene l'applicazione Java compilata è mette sta maghjina in u registru internu di u containeru.
Criatu una implementazione Kubernetes cù specificazioni per un pod, serviziu, etc.
Lanciata l'imagine di u containeru di distribuzione.
Sguassatu u serviziu build-pod.
Ci hè assai nantu à sta lista, ma a cosa principale hè chì tutta a custruzione si svolge solu in OpenShift, u registru internu di Docker hè in OpenShift, è u prucessu di creazione crea tutti i cumpunenti Kubernetes è li eseguisce nantu à u cluster.
Se monitorate visualmente u lanciu di S2I in a cunsola, pudete vede cumu u pod di custruzzione hè lanciatu durante a custruzione.
E ora fighjemu un ochju à i logs di u pod di custruttore: prima, quì pudete vede cumu Maven faci u so travagliu è scaricate dipendenze per custruisce a nostra applicazione java.
Dopu chì a custruzzione di maven hè finita, a custruzzione di l'imaghjini di u containeru hè iniziata, è dopu sta immagine custruita hè mandata à u repositoriu internu.
Tuttu, u prucessu di assemblea hè cumpletu. Avà assicuremu chì i pods è i servizii di a nostra applicazione sò cuminciati in u cluster.
oc get service
Eccu tuttu. È ci hè solu una squadra. Tuttu ciò chì avemu da fà hè espose stu serviziu per accessu fora.
Step 3 - fà u serviziu espose per accessu da l'esternu
Cum'è in u casu di KUK, nantu à a piattaforma OpenShift, u nostru "Hello World" hà ancu bisognu di un router per dirige u trafficu esternu à un serviziu in u cluster. In OpenShift questu rende assai faciule. Prima, u cumpunente di routing HAProxy hè stallatu in u cluster per difettu (pò esse cambiatu à u stessu NGINX). In siconda, ci sò risorse spiciali è altamente configurabili chjamati Routes, chì ricordanu l'uggetti Ingress in boni vechji Kubernetes (in fatti, Routes d'OpenShift hà influinzatu assai in u disignu di l'uggetti Ingress, chì ponu avà esse usatu in OpenShift), ma per u nostru "Hello". World", è in quasi tutti l'altri casi, a Ruta standard hè abbastanza per noi senza cunfigurazione supplementu.
Per creà un FQDN routable per "Hello World" (sì, OpenShiift hà u so propiu DNS per u routing per i nomi di serviziu), avemu da esse solu espose u nostru serviziu:
oc expose service quarkus-hello-world
S'è vo circate à a nova Route criata, allura vi ponu truvà u FQDN è altre infurmazione routing quì:
oc get route
È infine, accede à u nostru serviziu da u navigatore:
Ma avà era veramente faciule!
Amamu Kubernetes è tuttu ciò chì sta tecnulugia vi permette di fà, è amemu ancu a simplicità è a ligerezza. Kubernetes hè statu cuncepitu per fà i cuntenituri distribuiti è scalabili incredibbilmente faciuli à uperà, ma a so simplicità ùn hè più abbastanza per portà applicazioni in produzzione oghje. Hè quì chì OpenShift entra in ghjocu, mantenendu cù i tempi è offre Kubernetes centrati in u sviluppatore. Hè statu investitu assai sforzu per adattà a piattaforma OpenShift specificamente per u sviluppatore, cumprese a creazione di strumenti cum'è S2I, ODI, Portale di Sviluppatore, OpenShift Operator Framework, integrazione IDE, Catalogu di Sviluppatore, Integrazione Helm, monitoraghju è assai altri.
Speremu chì questu articulu hè stata interessante è utile per voi. È pudete truvà risorse supplementari, materiali è altre cose utili per sviluppà nantu à a piattaforma OpenShift in u portale Sviluppatori Red Hat.