{"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\/et\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe","title":{"rendered":"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>See post on Kubernetes and OpenShift application development is a common topic in our client discussions.<\/p>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" src=\"\/wp-content\/uploads\/2020\/10\/ad447aeb80d3ae56ea4598cd959456de.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWe usually start by stating that Kubernetes is just Kubernetes, whereas OpenShift is a Kubernetes platform, like Microsoft AKS or Amazon EKS. Each platform has its own advantages tailored for different target audiences, and the conversation then shifts to comparing the strengths and weaknesses of specific platforms.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nOverall, we considered writing this post with the conclusion that it doesn\u2019t really matter where you run the code, whether it's on OpenShift, AKS, EKS, or any custom Kubernetes\u2014let's call it KUK for brevity. <i>\u2014it's really just the same on both.<\/i> Then we planned to take a simple 'Hello World' and show what is common and what the differences are between KUK and the Red Hat OpenShift Container Platform (hereafter referred to as OCP or simply OpenShift).<\/p>\n<p>However, while writing this post, we realized that we've become so accustomed to using OpenShift that we don't even recognize how it has grown into an amazing platform, far beyond just being a Kubernetes distribution. We tend to take the maturity and simplicity of OpenShift for granted, overlooking its magnificence.<\/p>\n<p>In summary, it\u2019s time for some active reflection, and we will step by step compare deploying our 'Hello World' on KUK and OpenShift, doing so as objectively as possible (though we might occasionally express personal views). If you're interested in strictly subjective opinions on this matter, you can read it<\/p>\n<p>here (EN). In this post, we will stick to facts and only facts. <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/swlh\/im-so-sorry-openshift-i-ve-taken-you-for-granted-f36fb47ea4d9\">.<\/a><\/noindex>Clusters<\/p>\n<h3>So, for our 'Hello World', we need clusters. Let\u2019s say 'no' to any public clouds to avoid charges for servers, registries, networks, data transfers, etc. Therefore, we choose a simple single-node cluster on<\/h3>\n<p>\nKUK and <noindex><a rel=\"nofollow\" href=\"https:\/\/minikube.sigs.k8s.io\/docs\/start\/\">Minikube<\/a><\/noindex> Code Ready Containers <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/products\/codeready-containers\/overview\">for the OpenShift cluster. Both of these options are actually quite easy to install but will require quite a bit of resources on your laptop.<\/a><\/noindex> Building on KUK<\/p>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" src=\"\/wp-content\/uploads\/2020\/10\/01c748365253fc9e11e817876629ae7e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Step 1 \u2013 building our container image<\/h3>\n<p>\nNii et, l\u00e4hme!<\/p>\n<h4>Let's start by deploying our 'Hello World' on minikube. For this, we will need:<\/h4>\n<p>\n1. Docker installed.<\/p>\n<ol>\n<li>2. Git installed.<\/li>\n<li>2. Paigaldatud Git.<\/li>\n<li>3. Paigaldatud Maven (tegelikult kasutatakse selles projektis mvnw-binaari, seega saab ka ilma selleta hakkama).<\/li>\n<li>4. Tegelikult l\u00e4htekood, st reposti kloon <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>\nEsiteks tuleb luua Quarkus'i projekt. \u00c4rge muretsege, kui te pole kunagi Quarkus.io saidiga t\u00f6\u00f6tanud \u2013 see on lihtne. Lihtsalt valige komponendid, mida soovite projektis kasutada (RestEasy, Hibernate, Amazon SQS, Camel jne), ja Quarkus seadistab maven'i arhet\u00fc\u00fcbi ja laadib k\u00f5ik github'i ilma teie sekkumiseta. See t\u00e4hendab, et s\u00f5na otseses m\u00f5ttes piisab \u00fchest hiirekl\u00f5psust \u2013 ja k\u00f5ik on valmis. Selle \u00fcle me Quarkus't armastame.<\/p>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" src=\"\/wp-content\/uploads\/2020\/10\/39a62058d91f8443e77466d374d02d34.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Lihtsaim viis meie 'Hello World' konteineri pildi kokkupanemiseks on kasutada quarkus-maveni laiendusi Dockerile, mis teevad kogu vajaliku t\u00f6\u00f6 \u00e4ra. Quarkus'e tulekuga on see t\u00f5eliselt lihtne: lisage laiendus container-image-docker ja saate luua pilte maven'i k\u00e4skudega.<\/p>\n<pre><code class=\"plaintext\">.\/mvnw quarkus:add-extension -Dextensions=\"container-image-docker\"\n<\/code><\/pre>\n<p>\nJa l\u00f5puks, teeme meie pildi koostamise Maveniga. Tulemuseks on see, et meie l\u00e4htekood muudetakse valmis konteineripildiks, mida saab juba konteinerite k\u00e4itamisruumis k\u00e4ivitada.<\/p>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" 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>\nNii et see ongi, n\u00fc\u00fcd saab konteinerit k\u00e4ivitada k\u00e4suga docker run, suunates meie teenuse porti 8080, et sellele ligi p\u00e4\u00e4seda.<\/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=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" src=\"\/wp-content\/uploads\/2020\/10\/4f46e13423d5027d85ebae2c98c926b8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>P\u00e4rast konteineri instantsi k\u00e4ivitamist j\u00e4\u00e4b vaid kontrollida k\u00e4suga curl, et meie teenus t\u00f6\u00f6tab:<\/p>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" src=\"\/wp-content\/uploads\/2020\/10\/1c1462f52d6a487863c21f8f72a09d1f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Nii et k\u00f5ik t\u00f6\u00f6tab ja see oli t\u00f5eliselt lihtne.<\/p>\n<h4>Samm 2 \u2013 saadame meie konteineri konteineripiltide hoidlasse<\/h4>\n<p>\nPraegu hoitakse meie loodud pilti kohapeal, meie kohalikus konteinerite hoidlas. Kui tahame seda pilti kasutada oma KUBERA keskkonnas, tuleb see panna m\u00f5nda teise hoidlasse. Kubernetesis ei ole selliseid funktsioone, seega kasutame dockerhub'i. Esiteks, see on tasuta ja teiseks, (peaaegu) k\u00f5ik teevad nii.<\/p>\n<p>See on samuti v\u00e4ga lihtne, ja siin on vaja ainult dockerhub'i kontot.<\/p>\n<p>Nii et loome dockerhub'i ja saadame sinna meie pildi.<\/p>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" src=\"\/wp-content\/uploads\/2020\/10\/fb5d81ee15ca7594277c5a05da298fbd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>Samm 3 \u2013 k\u00e4ivitame Kubernetes'e<\/h4>\n<p>\nOn palju viise, kuidas koguda kubernetes'i konfiguratsiooni meie 'Hello World'i k\u00e4ivitamiseks, kuid kasutame k\u00f5ige lihtsamat, sellised me oleme...<\/p>\n<p>Alustuseks k\u00e4ivitame minikube'i klastrit:<\/p>\n<pre><code class=\"plaintext\">minikube start\n<\/code><\/pre>\n<p><\/p>\n<h4>Samm 4 \u2013 k\u00e4ivitame meie konteineripildi<\/h4>\n<p>\nN\u00fc\u00fcd peame meie koodi ja konteineripildi muutma kubernetes konfigureerimiseks. Teisis\u00f5nu, vajame pod'i ja deployment definitsiooni, mis viitavad meie konteineripildile dockerhub'is. \u00dcks lihtsamaid viise seda teha on k\u00e4ivitada k\u00e4sk create deployment, viidates meie pildile:<\/p>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" 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>\nSelle k\u00e4suga palusime meie KUBEl luua deployment konfiguratsioon, mis peab sisaldama pod'i spetsifikatsiooni meie konteineripildi jaoks. See k\u00e4sk rakendab samuti seda konfiguratsiooni meie minikube klastri jaoks ja loob deployment'i, mis allalaadib meie konteineripildi ja k\u00e4ivitab pod'i klastris.<\/p>\n<h4>Samm 5 \u2013 avame juurdep\u00e4\u00e4su meie teenusele<\/h4>\n<p>\nN\u00fc\u00fcd, kui meil on k\u00e4ivitatud konteineripilt, on aeg m\u00f5elda, kuidas konfigureerida v\u00e4lise juurdep\u00e4\u00e4su sellele Restful-teenusele, mis on tegelikult meie koodis programmeeritud.<\/p>\n<p>Siin on palju viise. N\u00e4iteks saame kasutada k\u00e4sku expose, et automaatselt luua vastavad Kubernetes komponendid, nagu teenused ja l\u00f5pp-punktid. Just nii me teeme, k\u00e4ivitades k\u00e4su expose meie deployment-objekti jaoks:<\/p>\n<pre><code class=\"plaintext\">kubectl expose deployment hello-quarkus --type=NodePort --port=8080\n<\/code><\/pre>\n<p>\nAsetame n\u00fc\u00fcd t\u00e4helepanu expose k\u00e4su valikule \u201e--type\u201d.<\/p>\n<p>Kui teeme expose ja loome komponendid, mis on vajalikud meie teenuse k\u00e4ivitamiseks, peame muu hulgas tagama, et v\u00e4ljastpoolt oleks v\u00f5imalik \u00fchendust saada teenusega hello-quarkus, mis asub meie tarkvara m\u00e4\u00e4ratud v\u00f5rgus. Ja parameeter <b>type<\/b> v\u00f5imaldab meil luua ja \u00fchendada selliseid asju nagu koormuse tasandajad, et suunata liiklust sellesse v\u00f5rku.<\/p>\n<p>N\u00e4iteks, m\u00e4\u00e4rates <b>type=LoadBalancer<\/b>, aktiveerime automaatselt koormuse tasandaja avalikus pilves, et \u00fchendada meie Kubernetes klastri. See, muidugi, on suurep\u00e4rane, kuid tuleb m\u00f5ista, et selline konfiguratsioon on tihedalt seotud konkreetse avaliku pilvega ja seda on keerulisem \u00fcle kanda erinevate keskkondade Kubernetes'i instance'ide vahel.<\/p>\n<p>Meie n\u00e4ites <b>type=NodePort<\/b>, see, the request to our service is made via the node's IP address and port number. This option allows not to use any public clouds, but requires a number of additional steps. Firstly, you need your own load balancer, so we will deploy an NGINX load balancer in our cluster.<\/p>\n<h4>Step 6 \u2013 set up the load balancer<\/h4>\n<p>\nMinikube has a range of platform features that simplify the creation of necessary components for external access, such as ingress controllers. Minikube comes with the Nginx ingress controller, and we just need to enable and configure it.<\/p>\n<pre><code class=\"plaintext\">minikube addons enable ingress\n<\/code><\/pre>\n<p>\nNow, with just one command, I will create an Nginx ingress controller that will operate inside our minikube cluster:<\/p>\n<pre><code class=\"plaintext\">ingress-nginx-controller-69ccf5d9d8-j5gs9 1\/1 Running 1 33m\n<\/code><\/pre>\n<p><\/p>\n<h4>Step 7 \u2013 Configure ingress<\/h4>\n<p>\nNow we need to configure the Nginx ingress controller so that it handles requests to hello-quarkus.<\/p>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" src=\"\/wp-content\/uploads\/2020\/10\/18183cb985436447cf15c501e4c6c3a3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" src=\"\/wp-content\/uploads\/2020\/10\/577f1e6218094b5ee23052d49869e838.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>And finally, we need to apply this configuration.<\/p>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" 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=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" src=\"\/wp-content\/uploads\/2020\/10\/68fba4ef3d2762a97dc5be5de9e6b864.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Since we are doing all this on our own computer, we simply add the IP address of our node to the file \/etc\/hosts to direct HTTP requests to our minikube at the NGINX load balancer.<\/p>\n<pre><code class=\"plaintext\">192.168.99.100 hello-quarkus.info\n<\/code><\/pre>\n<p>\nThat's it, now our minikube service is available externally through the Nginx ingress controller.<\/p>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" src=\"\/wp-content\/uploads\/2020\/10\/a456f34d168d43e9236e4769722b7f5d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Well, that was easy, right? Or not so much?<\/h3>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" src=\"\/wp-content\/uploads\/2020\/10\/237015dc06bb9d12eb4cd2944dc6df58.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Running on OpenShift (Code Ready Containers)<\/h3>\n<p>\nNow let's see how this is done on the Red Hat OpenShift Container Platform (OCP).<\/p>\n<p>As with minikube, we choose a single-node OpenShift cluster scheme in the form of Code Ready Containers (CRC). This used to be called minishift and was based on the OpenShift Origin project, but now it's CRC and built on the Red Hat OpenShift Container Platform.<\/p>\n<p>Here we cannot help but say, 'OpenShift is wonderful!'<\/p>\n<p>Initially, we thought to write that development on OpenShift is no different from development on Kubernetes. And in essence, that\u2019s true. But while writing this post, we remembered how many extra steps you have to take when you don\u2019t have OpenShift, and hence it is, we repeat, wonderful. We love when everything is easy, and the way our example is deployed and started on OpenShift compared to minikube is what actually prompted us to write this post.<\/p>\n<p>Let\u2019s go through the process and see what we will need to do.<\/p>\n<p>So, in the minikube example we started with Docker... Wait, we no longer need Docker installed on the machine.<\/p>\n<p><b>Ja kohalik git pole meile vajalik.<br \/>\nJa Maven ei ole vajalik.<br \/>\nJa ei pea k\u00e4sitsi konteineripilti looma.<br \/>\nJa ei pea otsima mingit konteineripiltide hoidlat.<br \/>\nJa ingress-kontrollerit ei pea installima.<br \/>\nJa ingress'i konfigureerimine ei ole vajalik.<\/b><\/p>\n<p>Te m\u00f5istate, jah? Et meie rakendust OpenShiftis k\u00e4ivitada, ei vaja te midagi \u00fclalkirjeldatut. Ja kogu protsess n\u00e4eb v\u00e4lja j\u00e4rgmine.<\/p>\n<h4>Samm 1 \u2013 K\u00e4ivita oma OpenShift klaster<\/h4>\n<p>\nKasutame Red Hati Code Ready Containers't, mis on tegelikult sama, mis Minikube, kuid t\u00e4isfunktsionaalne \u00fche s\u00f5lmeline OpenShifti klaster.<\/p>\n<pre><code class=\"plaintext\">crc start\n<\/code><\/pre>\n<p><\/p>\n<h4>Samm 2 \u2013 Teostame rakenduse koondamise ja k\u00e4ivitamise OpenShifti klastris<\/h4>\n<p>\nJust sellel sammul ilmneb OpenShifti lihtsus ja mugavus t\u00e4ielikult. Nagu k\u00f5igis Kubernetesi jaotustes, on meil palju viise, kuidas rakendust klastris k\u00e4ivitada. Ja nagu Kubernetesel, valime me spetsiaalselt k\u00f5ige lihtsama.<\/p>\n<p>OpenShift on alati olnud loodud konteinerirakenduste loomise ja k\u00e4itamise platvormiks. Konteinerite koondamine on alati olnud selle platvormi lahutamatu osa, seet\u00f5ttu on siin palju t\u00e4iendavaid Kubernetesi ressursse vastavate \u00fclesannete jaoks.<\/p>\n<p>Me kasutame OpenShifti Source 2 Image (S2I) protsessi, millel on mitu erinevat viisi, et v\u00f5tta meie l\u00e4htekood (kood v\u00f5i binaarfailid) ja muuta see konteineripildiks, mida saab k\u00e4itada OpenShiftis.<\/p>\n<p>Selleks vajame kahte asja:<\/p>\n<ul>\n<li>Meie l\u00e4htekood git-i hoidlas<\/li>\n<li>Builder-pilt, mille alusel koondamine toimub.<\/li>\n<\/ul>\n<p>\nOn palju selliseid pilte, mida toetavad nii Red Hat kui ka kogukond, ja me kasutame OpenJDK pilti, kuna ma koondan Java-rakendust.<\/p>\n<p>S2I koondamist saab k\u00e4ivitada nii OpenShift Developeri graafilise liidese kaudu kui ka k\u00e4surealt. Kasutame k\u00e4sku new-app, \u00f6eldes talle, kust v\u00f5tta builder-pilt ja meie l\u00e4htekood.<\/p>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" 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>\nK\u00f5ik, meie rakendus on loodud. Samal ajal teostas S2I j\u00e4rgmised toimingud:<\/p>\n<ul>\n<li>Loodi teenuse build-pod, et tegeleda rakenduse kokkupanemisega seotud asjadega.<\/li>\n<li>Loodi OpenShifti Build konfigureerimine.<\/li>\n<li>Laaditi builder-pilt OpenShifti sisemisse docker-registrisse.<\/li>\n<li>Klooniti \"Hello World\" kohalikku hoidlasse.<\/li>\n<li>N\u00e4gin, et seal on maven pom, ja seet\u00f5ttu kompileerisin rakenduse maven'i abil.<\/li>\n<li>Loomisin uue konteineripildi, mis sisaldas kompileeritud Java-rakendust, ja panin selle pildi sisemisse konteineriregistrisse.<\/li>\n<li>Loomisin Kubernetes'i Deployment'i pod'i, teenuse jne spetsifikatsioonidega.<\/li>\n<li>K\u00e4ivitasin konteineripildi juurutamise.<\/li>\n<li>Kustutasin teenuse build-podi.<\/li>\n<\/ul>\n<p>\nSelles nimekirjas on palju erinevaid elemente, kuid k\u00f5ige t\u00e4htsam on, et kogu kogumine toimub ainult OpenShiftis, sisemine Docker-registern on OpenShiftis ja kogumisprotsess loob k\u00f5ik Kubernetes'i komponendid ning k\u00e4ivitab need klastris.<\/p>\n<p>Kui visuaalselt j\u00e4lgida S2I k\u00e4ivitamist konsoolis, siis v\u00f5ib n\u00e4ha, kuidas build pod k\u00e4ivitatakse kogumise ajal.<\/p>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" src=\"\/wp-content\/uploads\/2020\/10\/bd69c6e27813b1211a11e522f28f45b7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ja n\u00fc\u00fcd vaatame builder pod'i logisid: k\u00f5igepealt on seal n\u00e4ha, kuidas maven oma t\u00f6\u00f6d teeb ja allalaadib s\u00f5ltuvusi meie java-rakenduse kogumiseks.<\/p>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" src=\"\/wp-content\/uploads\/2020\/10\/326192f9f9373e451d601b77052d67d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>P\u00e4rast maven'i kogumise l\u00f5ppu k\u00e4ivitatakse konteineripildi koostamine, ja seej\u00e4rel saadetakse see kogutud pilt sisemisse hoidlasse.<\/p>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" src=\"\/wp-content\/uploads\/2020\/10\/c97da4c17a8e275d39104126d0f87048.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>K\u00f5ik, kogumisprotsess on l\u00f5petatud. N\u00fc\u00fcd veendume, et klastri pod'id ja teenused meie rakenduse jaoks on k\u00e4ivitatud.<\/p>\n<pre><code class=\"plaintext\">oc get service\n<\/code><\/pre>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" src=\"\/wp-content\/uploads\/2020\/10\/f16a098a096128073f305e0444061417.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Nii, ja k\u00f5ik. Ainult \u00fche k\u00e4suga. Meil j\u00e4\u00e4b \u00fcle ainult see teenus avada, et sellele v\u00e4ljastpoolt juurde p\u00e4\u00e4seda.<\/p>\n<h4>Samm 3 - teeme teenuse avamise v\u00e4lispidisele juurdep\u00e4\u00e4sule<\/h4>\n<p>\nNagu KUK-i puhul, vajab meie \"Hello World\" OpenShiftis ka ruuterit, et suunata v\u00e4list liiklust teenusele klastri sees. OpenShiftis on see v\u00e4ga lihtne. Esiteks, klastri sees on vaikimisi paigaldatud HAProxy marsruutimise komponent (seda v\u00f5ib vahetada sama NGINX-i vastu). Teiseks, siin on spetsiaalsed ja laialdased konfigureerimisv\u00f5imalustega ressursid, mida nimetatakse Routes'iteks ja mis meenutavad Ingress-objekte vanas heades Kuberneteses ( tegelikult on OpenShift'i Routes tugevalt m\u00f5jutanud Ingress-objektide disaini, mida saab n\u00fc\u00fcd kasutada ka OpenShiftis), kuid meie \"Hello World'i\" jaoks, ja peaaegu k\u00f5igis teistes juhtumites, piisab meile tavalisest Route'ist ilma t\u00e4iendava seadistamiseta.<\/p>\n<p>Et luua \"Hello World\" jaoks marsruutitav FQDN (jah, OpenShiftis on nimega teenuste marsruutimiseks oma DNS), teeme lihtsalt meie teenuse avamise:<\/p>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" 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>\nKui vaadata just loodud Route'i, siis sealt v\u00f5ib leida FQDN-i ja muid marsruutimisse puutuvaid andmeid:<\/p>\n<pre><code class=\"plaintext\">oc get route\n<\/code><\/pre>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" src=\"\/wp-content\/uploads\/2020\/10\/dc59c36166605ef0a5a24b2b7ffa65b6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ja l\u00f5puks, p\u00f6\u00f6rdume oma teenuse poole brauserist:<\/p>\n<p><img decoding=\"async\" alt=\"Vabanda, OpenShift, me ei hinnanud sind piisavalt ja pidasime sind iseenesestm\u00f5istetavaks\" src=\"\/wp-content\/uploads\/2020\/10\/fccf6cae1746fa59df2ff8ffb6973666.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Aga n\u00fc\u00fcd oli see t\u00f5esti lihtne!<\/h3>\n<p>\nMe armastame Kubernetesit ja k\u00f5ike, mida see tehnoloogia v\u00f5imaldab, samuti armastame me lihtsust ja kergust. Kubernetes loodi selleks, et muuta hajutatud ja skaleeritavate konteinerite haldamine uskumatult lihtsaks, kuid n\u00fc\u00fcd on rakenduste k\u00e4ivitamiseks sellest lihtsusest juba puudu. Siin tulebki m\u00e4ngu OpenShift, mis on ajaga kaasas k\u00e4inud ja pakub Kubernetesit, mis on suunatud peamiselt arendajatele. OpenShift'i platvormi on arendajate jaoks kohandamiseks tehtud tohutult t\u00f6\u00f6d, sealhulgas selliste t\u00f6\u00f6riistade nagu S2I, ODI, Developer Portal, OpenShift Operator Framework, IDE-de integreerimine, arendaja kataloogid, Helm'i integreerimine, j\u00e4lgimine ja palju muud.<\/p>\n<p>Loodame, et see artikkel oli teile huvitav ja kasulik. Lisamaterjale, ressursse ja muid kasulikke arendusvahendeid OpenShift'i platvormil leiate portaalist <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/\">Red Hat Developers<\/a><\/noindex>.<br \/>\n<br \/>Allikas: <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.1.1 - 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\/et\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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\udd47Vabandust, OpenShift, me ei hinnanud sind piisavalt ja v\u00f5tsime sind iseenesestm\u00f5istetavana | ProHoster","description":"See post on Kubernetes and OpenShift application development is a common topic in our client discussions.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/97254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=97254"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/97254\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/97255"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=97254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=97254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=97254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}