{"id":97254,"date":"2020-10-17T02:42:32","date_gmt":"2020-10-17T00:42:32","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe"},"modified":"2020-10-17T02:42:32","modified_gmt":"2020-10-17T00:42:32","slug":"prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe","title":{"rendered":"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Dette indl\u00e6g er skrevet, fordi vores medarbejdere har haft en del samtaler med kunder om app-udvikling p\u00e5 Kubernetes og de specifikke aspekter ved denne udvikling p\u00e5 OpenShift.<\/p>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/ad447aeb80d3ae56ea4598cd959456de.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVi starter ofte med tesen, at Kubernetes er bare Kubernetes, mens OpenShift er en Kubernetes-platform, ligesom Microsoft AKS eller Amazon EKS. Hver af disse platforme har sine fordele, rettet mod forskellige m\u00e5lgrupper. Og derefter flyder samtalen over i en sammenligning af styrker og svagheder ved de konkrete platforme.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nGenerelt t\u00e6nkte vi at skrive dette indl\u00e6g med konklusionen, \"H\u00f8r her, det er ligegyldigt, hvor du k\u00f8rer koden, p\u00e5 OpenShift, AKS, EKS eller p\u00e5 en hvilken som helst specialbygget Kubernetes, ja, p\u00e5 hvilken som helst Kubernetes. <i>(for kortheds skyld kalder vi det KUK)<\/i> \u2013 det er faktisk ret simpelt, begge steder.\"<\/p>\n<p>Derefter planlagde vi at tage en simpel \"Hello World\" og vise, hvad der er f\u00e6lles og hvor der er forskelle mellem KUK og Red Hat OpenShift Container Platform (herefter OCP eller blot OpenShift).<\/p>\n<p>Men mens vi skrev dette indl\u00e6g, inds\u00e5 vi, at vi p\u00e5 s\u00e5 mange m\u00e5der er blevet s\u00e5 vant til at bruge OpenShift, at vi simpelthen ikke er klar over, hvordan det er vokset og blevet en fantastisk platform, der er blevet meget mere end bare en Kubernetes-distribution. Vi har taget OpenShifts modenhed og enkelhed for givet og overset dets storhed.<\/p>\n<p>Generelt er det tid til forsoning, og nu vil vi trin-for-trin sammenligne implementeringen af vores \"Hello World\" p\u00e5 KUK og OpenShift og g\u00f8re det s\u00e5 objektivt som muligt (mediens vi nogle gange viser personlig holdning til emnet). Hvis du er interesseret i en rent subjektiv mening om dette emne, kan den l\u00e6ses <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/swlh\/im-so-sorry-openshift-i-ve-taken-you-for-granted-f36fb47ea4d9\">her (EN)<\/a><\/noindex>. I dette indl\u00e6g holder vi os til fakta og kun fakta.<\/p>\n<h3>Klynger<\/h3>\n<p>\nS\u00e5 til vores \"Hello World\" har vi brug for klynger. Lad os straks sige \"nej\" til offentlige skyer for ikke at betale for servere, registre, netv\u00e6rk, dataoverf\u00f8rsel osv. Derfor v\u00e6lger vi en simpel enkelt-nodeklynge p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/minikube.sigs.k8s.io\/docs\/start\/\">Minikube<\/a><\/noindex> (til KUK) og <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/products\/codeready-containers\/overview\">Code Ready Containers<\/a><\/noindex> (til OpenShift-klyngen). Begge disse muligheder er ret nemme at installere, men kr\u00e6ver en del ressourcer p\u00e5 din b\u00e6rbare computer.<\/p>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/01c748365253fc9e11e817876629ae7e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Bygning p\u00e5 KUK<\/h3>\n<p>\nS\u00e5 lad os komme i gang.<\/p>\n<h4>Trin 1 \u2013 vi opbygger vores containerbillede<\/h4>\n<p>\nJeg starter med at deployere vores \"Hello World\" p\u00e5 minikube. Til dette vil vi f\u00e5 brug for:<\/p>\n<ol>\n<li>1. Installeret Docker.<\/li>\n<li>2. Installeret Git.<\/li>\n<li>3. Installeret Maven (faktisk bruger dette projekt mvnw-bin\u00e6ren, s\u00e5 dette kan undlades).<\/li>\n<li>4. Selve kilden, alts\u00e5 klon af repository'et. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/gcolman\/quarkus-hello-world.git\">github.com\/gcolman\/quarkus-hello-world.git<\/a><\/noindex><\/li>\n<\/ol>\n<p>\nF\u00f8rst skal vi oprette et Quarkus-projekt. Bliv ikke skr\u00e6mt, hvis du aldrig har arbejdet med Quarkus.io \u2013 det er let. Du v\u00e6lger bare de komponenter, du \u00f8nsker at bruge i projektet (RestEasy, Hibernate, Amazon SQS, Camel osv.), og s\u00e5 konfigurerer Quarkus selv archetypen mvn og uploader alt til GitHub. S\u00e5 det er bogstaveligt talt et enkelt klik med musen \u2013 og det er klar. Det er netop derfor, vi elsker Quarkus.<\/p>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/39a62058d91f8443e77466d374d02d34.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Den nemmeste m\u00e5de at bygge vores \"Hello World\" i en containerbillede er at bruge quarkus-maven-udvidelserne til Docker, som klarer alt det n\u00f8dvendige arbejde. Med Quarkus er det virkelig blevet let og enkelt: tilf\u00f8j udvidelsen container-image-docker, og du kan oprette billeder med mvn-kommandoer.<\/p>\n<pre><code class=\"plaintext\">.\/mvnw quarkus:add-extension -Dextensions=\"container-image-docker\"\n<\/code><\/pre>\n<p>\nOg endelig bygger vi vores billede ved hj\u00e6lp af Maven. Resultatet er, at vores kildekode bliver til et klart containerbillede, som allerede kan k\u00f8res i containerudf\u00f8relsesmilj\u00f8et.<\/p>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/94b74cac6616896eb672a72302e70169.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<pre><code class=\"plaintext\">.\/mvnw -X clean package -Dquarkus.container-image.build=true\n<\/code><\/pre>\n<p>\nOg der har vi det, nu kan vi k\u00f8re containeren med kommandoen docker run, ved at kortl\u00e6gge vores service til port 8080, s\u00e5 den kan tilg\u00e5s.<\/p>\n<pre><code class=\"plaintext\">docker run -i --rm -p 8080:8080 gcolman\/quarkus-hello-world\n<\/code><\/pre>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/4f46e13423d5027d85ebae2c98c926b8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>N\u00e5r container-instansen er startet, er det kun at kontrollere med kommandoen curl, om vores service k\u00f8rer:<\/p>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/1c1462f52d6a487863c21f8f72a09d1f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>S\u00e5, det fungerer, og det var virkelig let og enkelt.<\/p>\n<h4>Trin 2 \u2013 sender vores container til containerbillede-repositoriet.<\/h4>\n<p>\nIndtil videre opbevares det billede, vi har oprettet, lokalt i vores lokale containerlager. Hvis vi vil bruge dette billede i vores K8s-milj\u00f8, skal det placeres i et andet repository. Kubernetes har ikke denne funktion, s\u00e5 vi vil bruge Docker Hub. Fordi for det f\u00f8rste er det gratis, og for det andet (n\u00e6sten) alle g\u00f8r det.<\/p>\n<p>Det er ogs\u00e5 meget enkelt, og her er der kun brug for en konto p\u00e5 Docker Hub.<\/p>\n<p>S\u00e5, lad os tilf\u00f8je Docker Hub og sende vores billede derop.<\/p>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/fb5d81ee15ca7594277c5a05da298fbd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>Trin 3 \u2013 starter Kubernetes.<\/h4>\n<p>\nDer er mange m\u00e5der at samle Kubernetes-konfigurationen til at k\u00f8re vores \"Hello World\", men vi vil bruge den letteste af dem, vi er s\u00e5dan nogle mennesker...<\/p>\n<p>Lad os starte med at k\u00f8re minikube-klister:<\/p>\n<pre><code class=\"plaintext\">minikube start\n<\/code><\/pre>\n<p><\/p>\n<h4>Trin 4 \u2013 udl\u00e6gger vores containerbillede<\/h4>\n<p>\nNu skal vi konvertere vores kode og containerbillede til Kubernetes-konfigurationer. Med andre ord, vi har brug for en pod- og deployment-definition, der henviser til vores containerbillede p\u00e5 Docker Hub. En af de nemmeste m\u00e5der at g\u00f8re dette p\u00e5 er at k\u00f8re kommandoen create deployment og angive vores billede:<\/p>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/0bd984a5b414310daca039289dd35cd2.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<pre><code class=\"plaintext\">kubectl create deployment hello-quarkus --image=gcolman\/quarkus-hello-world:1.0.0-SNAPSHOT\n<\/code><\/pre>\n<p>\nMed denne kommando har vi sagt til vores KUBE at skabe en deployment-konfiguration, der skal indeholde specifikationen af pod'en for vores containerbillede. Denne kommando anvender ogs\u00e5 denne konfiguration p\u00e5 vores Minikube-klynge og opretter en deployment, der downloader vores containerbillede og starter en pod i klyngen.<\/p>\n<h4>Trin 5 \u2013 \u00e5bner adgang til vores service<\/h4>\n<p>\nNu hvor vi har et udrullet containerbillede, er det tid til at overveje, hvordan vi konfigurerer ekstern adgang til denne RESTful-service, som faktisk er programmeret i vores kode.<\/p>\n<p>Der er mange m\u00e5der at g\u00f8re dette p\u00e5. For eksempel kan vi bruge kommandoen expose til automatisk at skabe de relevante Kubernetes-komponenter, s\u00e5som services og endpoints. Faktisk vil vi g\u00f8re netop dette ved at k\u00f8re expose-kommandoen for vores deployment-objekt:<\/p>\n<pre><code class=\"plaintext\">kubectl expose deployment hello-quarkus --type=NodePort --port=8080\n<\/code><\/pre>\n<p>\nLad os tage et \u00f8jeblik til at stoppe op ved optionen \"--type\" i expose-kommandoen.<\/p>\n<p>N\u00e5r vi laver expose og skaber de komponenter, der er n\u00f8dvendige for at k\u00f8re vores service, skal vi blandt andet s\u00f8rge for, at vi kan tilslutte til service hello-quarkus, som er inde i vores softwaredefinerede netv\u00e6rk. Og parameteren <b>type<\/b> giver os mulighed for at oprette og forbinde ting som belastningsafbalancere, s\u00e5 trafikken kan rutes til dette netv\u00e6rk.<\/p>\n<p>For eksempel, ved at angive <b>type=LoadBalancer<\/b>, initierer vi automatisk en belastningsafbalancer i det offentlige cloud for at tilslutte til vores Kubernetes-klynge. Dette er selvf\u00f8lgelig fantastisk, men det er vigtigt at forst\u00e5, at en s\u00e5dan konfiguration vil v\u00e6re stift knyttet til en bestemt offentlig cloud og vil v\u00e6re sv\u00e6rere at flytte mellem Kubernetes-instanser i forskellige milj\u00f8er.<\/p>\n<p>I vores eksempel <b>type=NodePort<\/b>, hvilket betyder, at anmodningen til vores service g\u00e5r via IP-adressen p\u00e5 noden og portnummeret. Denne l\u00f8sning kr\u00e6ver ikke brug af offentlige skyer, men kr\u00e6ver en r\u00e6kke ekstra skridt. For det f\u00f8rste har vi brug for en egen load balancer, s\u00e5 vi vil implementere en NGINX load balancer i vores klynge.<\/p>\n<h4>Trin 6 - Installerer load balancer<\/h4>\n<p>\nMinikube har en r\u00e6kke platformfunktioner, der g\u00f8r det lettere at oprette de n\u00f8dvendige komponenter til ekstern adgang, som f.eks. ingress- controllere. Minikube leveres med en Nginx ingress-controller, og vi skal bare aktivere og konfigurere den.<\/p>\n<pre><code class=\"plaintext\">minikube addons enable ingress\n<\/code><\/pre>\n<p>\nNu genererer vi med et enkelt kommando en Nginx ingress-controller, som vil k\u00f8re inden i vores minikube klynge:<\/p>\n<pre><code class=\"plaintext\">ingress-nginx-controller-69ccf5d9d8-j5gs9 1\/1 K\u00f8rer 1 33m\n<\/code><\/pre>\n<p><\/p>\n<h4>Trin 7 - Konfigurerer ingress<\/h4>\n<p>\nNu skal vi konfigurere Nginx ingress-controlleren, s\u00e5 den kan h\u00e5ndtere anmodninger til hello-quarkus.<\/p>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/18183cb985436447cf15c501e4c6c3a3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/577f1e6218094b5ee23052d49869e838.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Og til sidst skal vi anvende denne konfiguration.<\/p>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/c519d7763cd1c685063a6bbab6a813ea.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<pre><code class=\"plaintext\">kubectl apply -f ingress.yml\n<\/code><\/pre>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/68fba4ef3d2762a97dc5be5de9e6b864.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Da vi g\u00f8r alt dette p\u00e5 vores egen computer, tilf\u00f8jer vi blot IP-adressen til vores node i filen \/etc\/hosts for at dirigere http-anmodninger til vores minikube via NGINX load balancer.<\/p>\n<pre><code class=\"plaintext\">192.168.99.100 hello-quarkus.info\n<\/code><\/pre>\n<p>\nNu er vores minikube service tilg\u00e6ngelig udefra gennem Nginx ingress-controlleren.<\/p>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/a456f34d168d43e9236e4769722b7f5d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>N\u00e5, det var da nemt, ikke? Eller m\u00e5ske ikke s\u00e5 meget?<\/h3>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/237015dc06bb9d12eb4cd2944dc6df58.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>K\u00f8rsel p\u00e5 OpenShift (Code Ready Containers)<\/h3>\n<p>\nOg nu lad os se, hvordan det hele g\u00f8res p\u00e5 Red Hat OpenShift Container Platform (OCP).<\/p>\n<p>Som med minikube v\u00e6lger vi en en-nodesklynge OpenShift ops\u00e6tning i form af Code Ready Containers (CRC). Tidligere kaldte man det minishift, og det var baseret p\u00e5 OpenShift Origin-projektet, men nu er det CRC, bygget p\u00e5 Red Hats OpenShift Container Platform.<\/p>\n<p>Her kan vi, undskyld, ikke lade v\u00e6re med at sige: \"OpenShift er fantastisk!\"<\/p>\n<p>I starten t\u00e6nkte vi at skrive, at udvikling p\u00e5 OpenShift ikke adskiller sig fra udvikling p\u00e5 Kubernetes. Og det er i princippet korrekt. Men mens vi skrev dette indl\u00e6g kom vi i tanker om, hvor mange un\u00f8dvendige skridt man skal tage, n\u00e5r man ikke har OpenShift, og derfor er det, som vi gentager, fantastisk. Vi elsker, n\u00e5r tingene er enkle, og hvor let vores eksempel kan implementeres og startes p\u00e5 OpenShift i forhold til minikube, er faktisk det, der inspirerede os til at skrive dette indl\u00e6g.<\/p>\n<p>Lad os kaste et blik p\u00e5 processen og se, hvad vi skal g\u00f8re.<\/p>\n<p>S\u00e5 i eksemplet med minikube startede vi med Docker... Stop, vi har ikke brug for, at Docker er installeret p\u00e5 maskinen l\u00e6ngere.<\/p>\n<p><b>Og lokal git er ikke n\u00f8dvendigt.<br \/>\nOg Maven er heller ikke n\u00f8dvendigt.<br \/>\nOg det er ikke n\u00f8dvendigt at oprette containerbilleder manuelt.<br \/>\nOg det er ikke n\u00f8dvendigt at finde et containerbillede-repositorium.<br \/>\nOg det er ikke n\u00f8dvendigt at installere en ingress-controller.<br \/>\nOg konfiguration af ingress er heller ikke n\u00f8dvendigt.<\/b><\/p>\n<p>Forstod du det, ikke? For at implementere og k\u00f8re vores applikation p\u00e5 OpenShift, er intet af ovenst\u00e5ende n\u00f8dvendigt. Selve processen ser s\u00e5dan her ud.<\/p>\n<h4>Trin 1 \u2013 Start dit OpenShift-kluster<\/h4>\n<p>\nVi bruger Code Ready Containers fra Red Hat, som i bund og grund er det samme som Minikube, men med et fuldt funktionelt enkelt-node OpenShift-kluster.<\/p>\n<pre><code class=\"plaintext\">crc start\n<\/code><\/pre>\n<p><\/p>\n<h4>Trin 2 \u2013 Byg og implementer applikationen i OpenShift-klusteret<\/h4>\n<p>\nNetop p\u00e5 dette trin kommer enkelheden og bekvemmeligheden ved OpenShift virkelig til sin ret. Som med alle Kubernetes-distributioner har vi mange m\u00e5der at k\u00f8re applikationen i klusteret p\u00e5. Og som med KUK v\u00e6lger vi bevidst den absolut enkleste metode.<\/p>\n<p>OpenShift har altid v\u00e6ret bygget som en platform til at skabe og k\u00f8re containerapplikationer. Bygningen af containere har altid v\u00e6ret en uadskillelig del af denne platform, s\u00e5 der er en masse yderligere Kubernetes-ressourcer til relevante opgaver.<\/p>\n<p>Vi vil bruge OpenShift's Source 2 Image (S2I) proces, som har flere forskellige m\u00e5der at tage vores kilde (kode eller bin\u00e6re filer) og omdanne det til et containerbillede, der kan k\u00f8re i OpenShift-klusteret.<\/p>\n<p>For dette har vi brug for to ting:<\/p>\n<ul>\n<li>Vores kildekode i et git-repositorium<\/li>\n<li>Et builder-billede, som bygningen vil blive udf\u00f8rt p\u00e5.<\/li>\n<\/ul>\n<p>\nDer er mange s\u00e5danne billeder, der underst\u00f8ttes b\u00e5de af Red Hat og p\u00e5 f\u00e6llesskabsniveau, og vi vil bruge OpenJDK-billedet, da jeg jo bygger en Java-applikation.<\/p>\n<p>S2I-bygningen kan startes enten fra OpenShift Developer-grafikkonsollen eller fra kommandolinjen. Vi bruger kommandoen new-app og angiver, hvor vi skal tage builder-billedet og vores kildekode fra.<\/p>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/64b8091c6857999c94dd907ad12fa9ae.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<pre><code class=\"plaintext\">oc new-app registry.access.redhat.com\/ubi8\/openjdk-11:latest~https:\/\/github.com\/gcolman\/quarkus-hello-world.git\n<\/code><\/pre>\n<p>\nDet er det, vores applikation er oprettet. I denne proces udf\u00f8rte S2I f\u00f8lgende:<\/p>\n<ul>\n<li>Oprettede en service build-pod til forskellige opgaver relateret til applikationsbygning.<\/li>\n<li>Oprettede OpenShift Build-konfiguration.<\/li>\n<li>Downloadede builder-billedet til OpenShifts interne Docker-register.<\/li>\n<li>Klonede 'Hello World' til det lokale repository.<\/li>\n<li>Jeg s\u00e5, at der var en maven pom, og derfor kompilerede jeg applikationen ved hj\u00e6lp af maven.<\/li>\n<li>Oprettede et nyt containerbillede, der indeholder den kompilerede Java-applikation, og lagde dette billede i det interne containerregister.<\/li>\n<li>Oprettede en Kubernetes Deployment med specifikationer for pod, service osv.<\/li>\n<li>Udrullede containerbilledet.<\/li>\n<li>Slettede det midlertidige build-pod.<\/li>\n<\/ul>\n<p>\nDer er mange elementer p\u00e5 denne liste, men det vigtigste er, at hele bygningen udelukkende sker inden for OpenShift, det interne Docker-register findes inden for OpenShift, og byggeprocessen skaber alle Kubernetes-komponenter og k\u00f8rer dem i klyngen.<\/p>\n<p>Hvis man visuelt f\u00f8lger opstarten af S2I i konsollen, kan man se, hvordan build-pod'en startes under udf\u00f8relsen af bygningen.<\/p>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/bd69c6e27813b1211a11e522f28f45b7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Og nu lad os se p\u00e5 loggen fra builder pod'en: for det f\u00f8rste kan man se, hvordan maven udf\u00f8rer sit arbejde og henter afh\u00e6ngigheder til bygningen af vores java-applikation.<\/p>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/326192f9f9373e451d601b77052d67d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Efter at maven-bygningen er f\u00e6rdig, startes bygningen af containerbilledet, og derefter sendes det f\u00e6rdige billede til det interne repository.<\/p>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/c97da4c17a8e275d39104126d0f87048.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Det er det, processen er afsluttet. Lad os nu sikre os, at pod'erne og tjenesterne i vores applikation er startet op i klyngen.<\/p>\n<pre><code class=\"plaintext\">oc get service\n<\/code><\/pre>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/f16a098a096128073f305e0444061417.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>S\u00e5dan. Og kun \u00e9n kommando. Vi skal bare eksponere denne service for adgang udefra.<\/p>\n<h4>Trin 3 \u2013 eksponering af servicen for adgang udefra<\/h4>\n<p>\nSom i tilf\u00e6ldet med KUK, skal vores 'Hello World' ogs\u00e5 have en router p\u00e5 OpenShift-platformen for at dirigere den eksterne trafik til servicen inden for klyngen. I OpenShift er dette meget enkelt. For det f\u00f8rste er komponenten til routing HAProxy som standard installeret i klyngen (den kan \u00e6ndres til NGINX). For det andet er der specielle ressourcer, der tilbyder omfattende konfigurationsmuligheder, kaldet Routes, som minder om Ingress-objekterne i det gode gamle Kubernetes (faktisk har OpenShift's Routes st\u00e6rkt p\u00e5virket designet af Ingress-objekterne, som nu ogs\u00e5 kan bruges i OpenShift), men til vores 'Hello World' og n\u00e6sten i alle andre tilf\u00e6lde er den standard Route uden yderligere konfiguration tilstr\u00e6kkelig.<\/p>\n<p>For at oprette et routbart FQDN for 'Hello World' (ja, i OpenShift er der sin egen DNS for routing efter servicenavne), vil vi blot udf\u00f8re eksponeringen for vores service:<\/p>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/d6b76943594aa71195ca9af500db6c10.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<pre><code class=\"plaintext\">oc expose service quarkus-hello-world\n<\/code><\/pre>\n<p>\nHvis vi kigger p\u00e5 den nyoprettede Route, kan vi finde FQDN og andre oplysninger om routing:<\/p>\n<pre><code class=\"plaintext\">oc get route\n<\/code><\/pre>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/dc59c36166605ef0a5a24b2b7ffa65b6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Og endelig tilg\u00e5r vi vores service fra en browser:<\/p>\n<p><img decoding=\"async\" alt=\"Undskyld, OpenShift, vi har ikke v\u00e6rdsat dig nok og har taget dig for givet\" src=\"\/wp-content\/uploads\/2020\/10\/fccf6cae1746fa59df2ff8ffb6973666.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Og nu var det virkelig nemt!<\/h3>\n<p>\nVi elsker Kubernetes og alt, hvad denne teknologi g\u00f8r muligt, ligesom vi elsker enkelhed og lighed. Kubernetes blev skabt for at g\u00f8re drift af distribuerede, skalerbare containere utrolig nemt, men n\u00e5r det kommer til at implementere applikationer, er dens enkelhed i dag ikke l\u00e6ngere tilstr\u00e6kkelig. Og her tr\u00e6der OpenShift ind i billedet, som f\u00f8lger med tiden og tilbyder en Kubernetes, der prim\u00e6rt er rettet mod udviklere. Der er gjort en stor indsats for at skr\u00e6ddersy OpenShift-platformen til udviklere, herunder oprettelse af v\u00e6rkt\u00f8jer som S2I, ODI, Developer Portal, OpenShift Operator Framework, integration med IDE, Developer Catalogues, integration med Helm, overv\u00e5gning og mange andre.<\/p>\n<p>Vi h\u00e5ber, at denne artikel har v\u00e6ret interessant og nyttig for dig. Du kan finde yderligere ressourcer, materialer og andre nyttige ting til udvikling p\u00e5 OpenShift-platformen p\u00e5 portalen <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/\">Red Hat Developers<\/a><\/noindex>.<br \/>\n<br \/>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/523568\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0448\u0438\u0445 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0431\u044b\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0432 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 Kubernetes \u0438 \u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0435 \u0442\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 OpenShift. \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043c\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u0441 \u0442\u0435\u0437\u0438\u0441\u0430, \u0447\u0442\u043e Kubernetes \u2013 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e Kubernetes, \u0430 OpenShift \u2013 \u044d\u0442\u043e \u0443\u0436\u0435 Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430, \u043a\u0430\u043a Microsoft AKS \u0438\u043b\u0438 Amazon EKS. \u0423 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":97255,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-97254","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0448\u0438\u0445 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0431\u044b\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0432 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 Kubernetes \u0438 \u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0435 \u0442\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 OpenShift.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0440\u043e\u0441\u0442\u0438, OpenShift, \u043c\u044b \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0446\u0435\u043d\u0438\u043b\u0438 \u0442\u0435\u0431\u044f \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0438 \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u043d\u043e\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0448\u0438\u0445 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0431\u044b\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0432 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 Kubernetes \u0438 \u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0435 \u0442\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 OpenShift.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-10-17T00:42:32+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-17T00:42:32+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Undskyld, OpenShift, vi v\u00e6rdsatte dig ikke nok og tog dig for givet | ProHoster","description":"Dette indl\u00e6g er skrevet, fordi vores medarbejdere har haft en del samtaler med kunder om app-udvikling p\u00e5 Kubernetes og de specifikke aspekter ved denne udvikling p\u00e5 OpenShift.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0440\u043e\u0441\u0442\u0438, OpenShift, \u043c\u044b \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0446\u0435\u043d\u0438\u043b\u0438 \u0442\u0435\u0431\u044f \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0438 \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u043d\u043e\u0435 | ProHoster","og:description":"\u042d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0448\u0438\u0445 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0431\u044b\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0432 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 Kubernetes \u0438 \u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0435 \u0442\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 OpenShift.","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-10-17T00:42:32+00:00","article:modified_time":"2020-10-17T00:42:32+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"97254","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:24:26","updated":"2022-09-30 14:35:33","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/97254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=97254"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/97254\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/97255"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=97254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=97254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=97254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}