{"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\/nl\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe","title":{"rendered":"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Deze post is geschreven omdat we veel gesprekken met klanten hadden over het ontwikkelen van applicaties op Kubernetes en de specifieke aspecten van deze ontwikkeling op OpenShift.<\/p>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" src=\"\/wp-content\/uploads\/2020\/10\/ad447aeb80d3ae56ea4598cd959456de.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWe beginnen meestal met de stelling dat Kubernetes gewoon Kubernetes is, terwijl OpenShift een Kubernetes-platform is, net als Microsoft AKS of Amazon EKS. Elke van deze platforms heeft zijn eigen voordelen, gericht op een specifieke doelgroep. En na dit gesprek vloeit het al snel over in een vergelijking van de sterke en zwakke punten van specifieke platforms.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nIn feite dachten we deze post te schrijven met de conclusie: 'Luister, het maakt niet uit waar je de code draait, op OpenShift of op AKS, op EKS, op een aangepaste Kubernetes, zelfs op elk soort Kubernetes.' <i>(Om het kort te houden noemen we het KUK)<\/i> \u2013 het is immers echt eenvoudig, zowel daar als daar.<\/p>\n<p>Daarna was het plan om een eenvoudige 'Hello World' te nemen en aan de hand daarvan te laten zien wat gemeenschappelijk is en wat de verschillen zijn tussen KUK en Red Hat OpenShift Container Platform (hierna OCP of gewoon OpenShift).<\/p>\n<p>Maar tijdens het schrijven van deze post beseften we dat we zo lang en zo sterk gewend zijn geraakt aan het gebruik van OpenShift, dat we gewoon niet doorhadden hoe het is gegroeid en veranderd in een geweldige platform dat veel meer is geworden dan alleen een Kubernetes-distributie. We beschouwen de volwassenheid en eenvoud van OpenShift als vanzelfsprekend, waardoor we zijn pracht uit het oog verliezen.<\/p>\n<p>Over het algemeen is het tijd voor constructieve berusting, en nu zullen we stap voor stap de implementatie van onze 'Hello World' op KUK en OpenShift vergelijken, en we zullen dit maximaal objectief doen (zij het af en toe met een persoonlijke voorkeur voor het onderwerp). Als je een puur subjectieve mening over dit onderwerp wilt, kun je die lezen <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/swlh\/im-so-sorry-openshift-i-ve-taken-you-for-granted-f36fb47ea4d9\">hier (EN)<\/a><\/noindex>. Maar in deze post zullen we ons uitsluitend aan de feiten houden.<\/p>\n<h3>Clusters<\/h3>\n<p>\nDus, voor onze 'Hello World' hebben we clusters nodig. Laten we meteen 'nee' zeggen tegen publieke clouds, om geen kosten te maken voor servers, registries, netwerken, datatransmissie, enz. Daarom kiezen we voor een eenvoudige single-node cluster op <noindex><a rel=\"nofollow\" href=\"https:\/\/minikube.sigs.k8s.io\/docs\/start\/\">Minikube<\/a><\/noindex> (voor KUK) en <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/products\/codeready-containers\/overview\">Code Ready Containers<\/a><\/noindex> (voor de OpenShift-cluster). Beide opties zijn echt eenvoudig te installeren, maar vereisen behoorlijk wat middelen op je laptop.<\/p>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" src=\"\/wp-content\/uploads\/2020\/10\/01c748365253fc9e11e817876629ae7e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Bouwen op KUK<\/h3>\n<p>\nLaten we beginnen.<\/p>\n<h4>Stap 1 \u2013 we bouwen ons containerbeeld<\/h4>\n<p>\nIk begin met het uitrollen van onze 'Hello World' op minikube. Hiervoor heb je nodig:<\/p>\n<ol>\n<li>1. Ge\u00efnstalleerde Docker.<\/li>\n<li>2. Ge\u00efnstalleerde Git.<\/li>\n<li>3. Ge\u00efnstalleerde Maven (in dit project wordt eigenlijk de mvnw-binaire gebruikt, dus dit is niet noodzakelijk).<\/li>\n<li>4. Eigenlijk de broncode, dat wil zeggen, een kloon van de repository <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>\nAls eerste moeten we een Quarkus-project cre\u00ebren. Maak je geen zorgen als je nog nooit met de site Quarkus.io gewerkt hebt \u2013 het is eenvoudig. Je kiest gewoon de componenten die je in je project wilt gebruiken (RestEasy, Hibernate, Amazon SQS, Camel, enzovoort), en verder configureert Quarkus zelf, zonder jouw tussenkomst, het Maven-archetype en plaatst alles op GitHub. E\u00e9n muisklik \u2013 en klaar. Dat is waarom we van Quarkus houden.<\/p>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" src=\"\/wp-content\/uploads\/2020\/10\/39a62058d91f8443e77466d374d02d34.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>De eenvoudigste manier om onze \"Hello World\" in een containerafbeelding te bouwen, is door gebruik te maken van de quarkus-maven extensies voor Docker, die al het nodige werk doen. Met de komst van Quarkus is dit echt gemakkelijk geworden: je voegt de extensie container-image-docker toe en je kunt afbeeldingen maken met Maven-commando's.<\/p>\n<pre><code class=\"plaintext\">.\/mvnw quarkus:add-extension -Dextensions=\"container-image-docker\"\n<\/code><\/pre>\n<p>\nEn tenslotte bouwen we onze afbeelding met Maven. Het resultaat is dat onze broncode verandert in een kant-en-klare containerafbeelding die al kan worden uitgevoerd in een container-omgeving.<\/p>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" 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>\nDat is het eigenlijk, nu kun je de container starten met het commando docker run, door onze service op poort 8080 te mappen zodat deze benaderbaar is.<\/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=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" src=\"\/wp-content\/uploads\/2020\/10\/4f46e13423d5027d85ebae2c98c926b8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Nadat de containerinstantie is gestart, hoef je alleen nog maar met het commando curl te controleren of onze service werkt:<\/p>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" src=\"\/wp-content\/uploads\/2020\/10\/1c1462f52d6a487863c21f8f72a09d1f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Dus, alles werkt, en het was echt gemakkelijk en simpel.<\/p>\n<h4>Stap 2 \u2013 we sturen onze container naar de containerafbeeldingsrepository<\/h4>\n<p>\nTot nu toe wordt de afbeelding die we hebben aangemaakt lokaal opgeslagen in onze lokale containeropslag. Als we deze afbeelding willen gebruiken in onze K8s-omgeving, moet deze in een andere repository worden geplaatst. Kubernetes heeft geen dergelijke functies, dus we zullen dockerhub gebruiken. Omdat het ten eerste gratis is, en ten tweede, (bijna) iedereen dat doet.<\/p>\n<p>Dit is ook heel eenvoudig, je hebt hier alleen een account op dockerhub nodig.<\/p>\n<p>Dus, we loggen in op dockerhub en sturen onze afbeelding daarheen.<\/p>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" src=\"\/wp-content\/uploads\/2020\/10\/fb5d81ee15ca7594277c5a05da298fbd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>Stap 3 \u2013 we starten Kubernetes<\/h4>\n<p>\nEr zijn veel manieren om de Kubernetes-configuratie voor het draaien van onze \"Hello World\" samen te stellen, maar we zullen de eenvoudigste gebruiken, want zo zijn we...<\/p>\n<p>We starten met het opzetten van de minikube-cluster:<\/p>\n<pre><code class=\"plaintext\">minikube start\n<\/code><\/pre>\n<p><\/p>\n<h4>Stap 4 \u2013 we zetten ons containerbeeld uit<\/h4>\n<p>\nNu moeten we onze code en het containerbeeld omzetten naar Kubernetes-configuraties. Met andere woorden, we hebben een pod en deployment-definitie nodig die verwijst naar ons containerbeeld op Docker Hub. Een van de eenvoudigste manieren om dit te doen, is door het commando create deployment uit te voeren en ons beeld op te geven:<\/p>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" 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>\nMet dit commando hebben we onze K8s gezegd dat het een deployment-configuratie moet maken, die een pod-specificatie voor ons containerbeeld moet bevatten. Dit commando past ook deze configuratie toe op onze minikube-cluster en cre\u00ebert een deployment die ons containerbeeld downloadt en een pod in de cluster opstart.<\/p>\n<h4>Stap 5 \u2013 we openen toegang tot onze service<\/h4>\n<p>\nNu we een uitgerold containerbeeld hebben, is het tijd om te denken aan hoe we externe toegang kunnen configureren tot deze RESTful-service, die in feite in onze code is geprogrammeerd.<\/p>\n<p>Er zijn veel manieren om dit te doen. We kunnen bijvoorbeeld het commando expose gebruiken om automatisch de benodigde Kubernetes-componenten zoals services en endpoints te cre\u00ebren. Dat is precies wat we gaan doen door het expose-commando voor ons deployment object uit te voeren:<\/p>\n<pre><code class=\"plaintext\">kubectl expose deployment hello-quarkus --type=NodePort --port=8080\n<\/code><\/pre>\n<p>\nLaten we even stilstaan bij de optie \"--type\" van het expose-commando.<\/p>\n<p>Wanneer we expose maken en de noodzakelijke componenten cre\u00ebren om onze service uit te voeren, moeten we, onder andere, ervoor zorgen dat we van buitenaf verbinding kunnen maken met de hello-quarkus service, die zich binnen ons softwaregedefinieerde netwerk bevindt. En de parameter <b>type<\/b> maakt het mogelijk om dingen zoals load balancers aan te maken en verbinding te maken met dat netwerk.<\/p>\n<p>Bijvoorbeeld, door te specificeren <b>type=LoadBalancer<\/b>, initialiseren we automatisch een load balancer in de openbare cloud om verbinding te maken met onze Kubernetes-cluster. Dit is natuurlijk geweldig, maar we moeten begrijpen dat deze configuratie stevig is verbonden aan een specifieke openbare cloud en moeilijker te migreren zal zijn tussen Kubernetes-instanties in verschillende omgevingen.<\/p>\n<p>In ons voorbeeld <b>type=NodePort<\/b>, dat wil zeggen dat de toegang tot onze service verloopt via het IP-adres van de node en het poortnummer. Deze optie maakt het mogelijk om geen gebruik te maken van publieke clouds, maar vereist een aantal extra stappen. Ten eerste is er een eigen load balancer nodig, dus we zullen een load balancer NGINX in onze cluster opzetten.<\/p>\n<h4>Stap 6 - Laten we de load balancer opzetten<\/h4>\n<p>\nMinikube heeft verschillende platformfuncties die het cre\u00ebren van de benodigde componenten voor externe toegang vergemakkelijken, zoals ingress-controllers. Minikube wordt geleverd met de Nginx ingress-controller, en we hoeven deze alleen maar in te schakelen en te configureren.<\/p>\n<pre><code class=\"plaintext\">minikube addons enable ingress\n<\/code><\/pre>\n<p>\nNu cre\u00ebren we met \u00e9\u00e9n commando de Nginx ingress-controller, die binnen onze minikube-cluster zal draaien:<\/p>\n<pre><code class=\"plaintext\">ingress-nginx-controller-69ccf5d9d8-j5gs9 1\/1 Running 1 33m\n<\/code><\/pre>\n<p><\/p>\n<h4>Stap 7 - We configureren de ingress<\/h4>\n<p>\nNu moeten we de Nginx ingress-controller configureren, zodat deze de verzoeken naar hello-quarkus kan verwerken.<\/p>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" src=\"\/wp-content\/uploads\/2020\/10\/18183cb985436447cf15c501e4c6c3a3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" src=\"\/wp-content\/uploads\/2020\/10\/577f1e6218094b5ee23052d49869e838.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>En tot slot moeten we deze configuratie toepassen.<\/p>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" 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=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" src=\"\/wp-content\/uploads\/2020\/10\/68fba4ef3d2762a97dc5be5de9e6b864.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Omdat we dit allemaal op onze computer doen, voegen we eenvoudigweg het IP-adres van onze node toe aan het bestand \/etc\/hosts, zodat http-verzoeken naar onze minikube naar de load balancer NGINX worden geleid.<\/p>\n<pre><code class=\"plaintext\">192.168.99.100 hello-quarkus.info\n<\/code><\/pre>\n<p>\nDat is het, nu is onze minikube-service extern toegankelijk via de Nginx ingress-controller.<\/p>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" src=\"\/wp-content\/uploads\/2020\/10\/a456f34d168d43e9236e4769722b7f5d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Nou, dat was toch eenvoudig, nietwaar? Of niet echt?<\/h3>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" src=\"\/wp-content\/uploads\/2020\/10\/237015dc06bb9d12eb4cd2944dc6df58.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Laten we het uitrollen op OpenShift (Code Ready Containers)<\/h3>\n<p>\nLaten we eens bekijken hoe dit allemaal werkt op het Red Hat OpenShift Container Platform (OCP).<\/p>\n<p>Net als bij minikube kiezen we voor de enkel-node clusterconfiguratie van OpenShift in de vorm van Code Ready Containers (CRC). Dit heette eerder minishift en was gebaseerd op het OpenShift Origin-project, en nu is het CRC, gebouwd op het Red Hat OpenShift Container Platform.<\/p>\n<p>Hier kunnen we het niet laten om te zeggen: \"OpenShift is prachtig!\"<\/p>\n<p>Oorspronkelijk dachten we te schrijven dat de ontwikkeling op OpenShift niet verschilt van de ontwikkeling op Kubernetes. En in wezen is dat ook zo. Maar tijdens het schrijven van deze post herinnerden we ons hoeveel extra stappen er nodig zijn als je geen OpenShift hebt, en daarom is het, herhaal ik, prachtig. We houden ervan als alles eenvoudig is, en de manier waarop ons voorbeeld op OpenShift veel eenvoudiger wordt uitgerold en gestart in vergelijking met minikube, motiveerde ons om deze post te schrijven.<\/p>\n<p>Laten we het proces doorlopen en kijken wat we nodig hebben.<\/p>\n<p>Dus, in het minikube-voorbeeld zijn we begonnen met Docker... Stop, we hebben niet meer nodig dat Docker op de machine is ge\u00efnstalleerd.<\/p>\n<p><b>En lokale git hebben we niet nodig.<br \/>\nMaven is ook niet nodig.<br \/>\nEn we hoeven geen containerimage handmatig te maken.<br \/>\nEn we hoeven geen enkele containerimage repository te zoeken.<br \/>\nEn we hoeven geen ingress-controller te installeren.<br \/>\nEn we hoeven ook geen ingress te configureren.<\/b><\/p>\n<p>Begrijp je het? Om onze applicatie op OpenShift te implementeren en uit te voeren, is niets van het bovenstaande nodig. En het proces ziet er als volgt uit.<\/p>\n<h4>Stap 1 \u2013 Start je OpenShift-cluster<\/h4>\n<p>\nWe gebruiken Code Ready Containers van Red Hat, dat in wezen dezelfde is als Minikube, maar met een volledige enkele-node OpenShift-cluster.<\/p>\n<pre><code class=\"plaintext\">crc start\n<\/code><\/pre>\n<p><\/p>\n<h4>Stap 2 \u2013 Bouw en implementeer de applicatie in het OpenShift-cluster<\/h4>\n<p>\nOp deze stap komen de eenvoud en het gemak van OpenShift helemaal tot uiting. Zoals in alle Kubernetes-distributies hebben we veel manieren om een applicatie in het cluster te starten. En, net als in het geval van K8s, kiezen we opzettelijk de aller eenvoudigste.<\/p>\n<p>OpenShift is altijd gebouwd als een platform voor het cre\u00ebren en uitvoeren van containerapplicaties. Het bouwen van containers is altijd een integraal onderdeel van dit platform geweest, dus er zijn hier tal van extra Kubernetes-resources voor de relevante taken.<\/p>\n<p>We zullen het OpenShift-proces Source 2 Image (S2I) gebruiken, dat verschillende manieren heeft om onze bron (code of binaire bestanden) om te zetten in een containerafbeelding die in de OpenShift-cluster draait.<\/p>\n<p>Hiervoor hebben we twee dingen nodig:<\/p>\n<ul>\n<li>Onze broncode in een git-repository<\/li>\n<li>Een builder-image waarvan het bouwen zal plaatsvinden.<\/li>\n<\/ul>\n<p>\nEr zijn veel van dergelijke images, ondersteund zowel door Red Hat als door de gemeenschap, en we zullen de OpenJDK-image gebruiken, omdat ik namelijk een Java-applicatie bouw.<\/p>\n<p>We kunnen de S2I-build zowel vanuit de grafische interface van OpenShift Developer als vanuit de commandoregel starten. We gaan de new-app opdracht gebruiken en deze vertellen waar de builder-image en onze broncode vandaan moeten komen.<\/p>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" 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>\nDat is het, onze applicatie is gemaakt. Tijdens het proces heeft S2I de volgende dingen uitgevoerd:<\/p>\n<ul>\n<li>Een build-pod gemaakt voor allerlei zaken die met de applicatiebouw te maken hebben.<\/li>\n<li>Een OpenShift Build-config geraadpleegd.<\/li>\n<li>De builder-image gedownload naar de interne docker-register van OpenShift.<\/li>\n<li>\u2018Hello World\u2019 naar de lokale repository gekloond.<\/li>\n<li>Ik zag dat er een maven pom is, dus ik heb de applicatie gecompileerd met maven.<\/li>\n<li>Ik heb een nieuw containerafbeelding gemaakt die de gecompileerde Java-applicatie bevat en deze afbeelding in de interne containerregistry geplaatst.<\/li>\n<li>Ik heb een Kubernetes Deployment gemaakt met specificaties voor pod, service, enz.<\/li>\n<li>Ik heb de implementatie van de containerafbeelding gestart.<\/li>\n<li>Ik heb de tijdelijke build-pod verwijderd.<\/li>\n<\/ul>\n<p>\nEr staat veel op deze lijst, maar het belangrijkste is dat de hele build puur binnen OpenShift gebeurt, de interne Docker-registry zich ook binnen OpenShift bevindt en het buildproces alle Kubernetes-componenten cre\u00ebert en ze in de cluster start.<\/p>\n<p>Als je visueel de S2I-implementatie in de console volgt, kun je zien hoe de build pod gestart wordt tijdens het bouwen.<\/p>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" src=\"\/wp-content\/uploads\/2020\/10\/bd69c6e27813b1211a11e522f28f45b7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Laten we nu de logs van de builder pod bekijken: daar kun je zien hoe maven zijn werk doet en afhankelijkheden voor onze java-applicatie downloadt.<\/p>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" src=\"\/wp-content\/uploads\/2020\/10\/326192f9f9373e451d601b77052d67d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Nadat de maven-build is voltooid, start de bouw van de containerafbeelding en vervolgens wordt deze gebouwde afbeelding naar de interne repository gestuurd.<\/p>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" src=\"\/wp-content\/uploads\/2020\/10\/c97da4c17a8e275d39104126d0f87048.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Dat is het, het buildproces is voltooid. Laten we controleren of de pods en services van onze applicatie in de cluster zijn gestart.<\/p>\n<pre><code class=\"plaintext\">oc get service\n<\/code><\/pre>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" src=\"\/wp-content\/uploads\/2020\/10\/f16a098a096128073f305e0444061417.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Dat is het. Slechts \u00e9\u00e9n commando. We hoeven alleen maar deze service te exposen voor externe toegang.<\/p>\n<h4>Stap 3 - we exposen de service voor externe toegang<\/h4>\n<p>\nNet zoals bij KUK heeft onze 'Hello World' op het OpenShift-platform ook een router nodig om extern verkeer naar de service binnen de cluster te sturen. In OpenShift is dit heel eenvoudig. Ten eerste is de HAProxy-router component standaard in de cluster ge\u00efnstalleerd (dit kan worden vervangen door dezelfde NGINX). Ten tweede zijn er speciale resources met uitgebreide configuratiemogelijkheden die Routes worden genoemd en lijken op Ingress-objecten in het oude vertrouwde Kubernetes (in feite hebben de OpenShift Routes een grote invloed gehad op het ontwerp van Ingress-objecten, die nu ook in OpenShift kunnen worden gebruikt), maar voor onze 'Hello World', en eigenlijk bijna in alle andere gevallen, hebben we genoeg aan de standaard Route zonder aanvullende configuratie.<\/p>\n<p>Om een routbare FQDN voor 'Hello World' te cre\u00ebren (ja, in OpenShift is er eigen DNS voor naamroutering naar services), voeren we eenvoudigweg expose uit voor onze service:<\/p>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" 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>\nAls je naar de net gecre\u00eberde Route kijkt, kun je de FQDN en andere routeringsinformatie vinden:<\/p>\n<pre><code class=\"plaintext\">oc get route\n<\/code><\/pre>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" src=\"\/wp-content\/uploads\/2020\/10\/dc59c36166605ef0a5a24b2b7ffa65b6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>En tot slot, we benaderen onze service vanuit de browser:<\/p>\n<p><img decoding=\"async\" alt=\"Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je als vanzelfsprekend beschouwd\" src=\"\/wp-content\/uploads\/2020\/10\/fccf6cae1746fa59df2ff8ffb6973666.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>En dat was echt gemakkelijk!<\/h3>\n<p>\nWe houden van Kubernetes en alles wat deze technologie mogelijk maakt, en we houden van eenvoud en gebruiksgemak. Kubernetes is ontwikkeld om het beheer van gedistribueerde, schaalbare containers enorm te vereenvoudigen, maar om toepassingen in gebruik te nemen, is die eenvoud vandaag de dag niet genoeg. Hier komt OpenShift in beeld, dat met zijn tijd meegaat en Kubernetes biedt dat vooral op de ontwikkelaar is gericht. Er is veel moeite gestoken in het afstemmen van het OpenShift-platform op de ontwikkelaar, inclusief de creatie van tools zoals S2I, ODI, Developer Portal, OpenShift Operator Framework, integratie met IDE's, Developer Catalogues, integratie met Helm, monitoring en nog veel meer.<\/p>\n<p>We hopen dat dit artikel interessant en nuttig was voor u. U kunt aanvullende bronnen, materiaal en andere nuttige dingen voor de ontwikkeling op het OpenShift-platform vinden op de portal <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/\">Red Hat Developers<\/a><\/noindex>.<br \/>\n<br \/>Bron: <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\/nl\/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=\"nl_NL\" \/>\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\/nl\/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\udd47Sorry, OpenShift, we hebben je niet genoeg gewaardeerd en hebben je voor lief genomen | ProHoster","description":"Deze post is geschreven omdat we veel gesprekken met klanten hadden over het ontwikkelen van applicaties op Kubernetes en de specifieke aspecten van deze ontwikkeling op OpenShift.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/97254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=97254"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/97254\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/97255"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=97254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=97254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=97254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}