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.

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

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.

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

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. 1. Docker installatu.
  2. 2. Git installatu.
  3. 3. Installatu Maven (in verità, stu prughjettu usa mvnw binariu, perchè pudete fà senza ellu).
  4. 4. In realtà, a fonte stessu, i.e. clone di repository github.com/gcolman/quarkus-hello-world.git

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.

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

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.

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

È 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.

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

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

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

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

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:

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

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ì.

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

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:

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

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

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:

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

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:

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

Passu 7 - Stallà l'ingressu

Avà avemu bisognu di cunfigurà u controller di ingressu Nginx per accettà e dumande di hello-quarkus.

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

È infine, avemu bisognu di applicà sta cunfigurazione.

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

kubectl apply -f ingress.yml

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

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.

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

Ebbè, era faciule, nò? O micca veramente?

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

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.

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

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

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.

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

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.

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

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.

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

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

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

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:

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

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

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

È infine, accede à u nostru serviziu da u navigatore:

Mi dispiace, OpenShift, ùn ti avemu micca apprezzatu abbastanza è ti pigliamu per scontru

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.

Source: www.habr.com

Add a comment