{"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\/sk\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe","title":{"rendered":"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tento pr\u00edspevok vznikol, preto\u017ee na\u0161i zamestnanci mali mno\u017estvo rozhovorov s klientmi o v\u00fdvoji aplik\u00e1ci\u00ed na Kubernetes a o \u0161pecifik\u00e1ch tohto v\u00fdvoja na OpenShift.<\/p>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" src=\"\/wp-content\/uploads\/2020\/10\/ad447aeb80d3ae56ea4598cd959456de.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZvy\u010dajne za\u010d\u00edname s tvrden\u00edm, \u017ee Kubernetes je len Kubernetes, zatia\u013e \u010do OpenShift je u\u017e platforma na Kubernetes, ako Microsoft AKS alebo Amazon EKS. Ka\u017ed\u00e1 z t\u00fdchto platforiem m\u00e1 svoje v\u00fdhody, zameran\u00e9 na konkr\u00e9tnu cie\u013eov\u00fa skupinu. A potom sa u\u017e rozhovor presunie na porovnanie siln\u00fdch a slab\u00fdch str\u00e1n konkr\u00e9tnych platforiem.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nCelkom sme si mysleli, \u017ee nap\u00ed\u0161eme tento pr\u00edspevok so z\u00e1verom ako \u201ePo\u010dujte, je to jedno, kde sp\u00fa\u0161\u0165a\u0165 k\u00f3d, na OpenShift alebo na AKS, na EKS, na nejakom vlastnom Kubernetes, proste na hocijakom Kubernetes. <i>(pre skratku nazvime to KUK)<\/i> \u2013 je to naozaj jednoduch\u00e9 a tam, a tam.\u201c<\/p>\n<p>Potom sme pl\u00e1novali vzia\u0165 najjednoduch\u0161\u00ed \u201eHello World\u201c a na jeho pr\u00edklade uk\u00e1za\u0165, \u010do maj\u00fa spolo\u010dn\u00e9 a v \u010dom s\u00fa rozdiely medzi KUK a Red Hat OpenShift Container Platform (\u010falej OCP alebo jednoducho OpenShift).<\/p>\n<p>Av\u0161ak pri p\u00edsan\u00ed tohto pr\u00edspevku sme si uvedomili, \u017ee sme si na OpenShift tak zvykli, \u017ee si ani neuvedomujeme, ako ve\u013emi vyr\u00e1stol a stal sa ohromnou platformou, ktor\u00e1 je ove\u013ea viac ne\u017e len distrib\u00facia Kubernetes. Zvykli sme si pova\u017eova\u0165 zrelos\u0165 a jednoduchos\u0165 OpenShift za samozrejmos\u0165, pri\u010dom sme prehliadali jeho n\u00e1dheru.<\/p>\n<p>Celkovo nastal \u010das akt\u00edvneho pok\u00e1nia, a teraz krok za krokom porovn\u00e1me uvedenie n\u00e1\u0161ho \u201eHello World\u201c na KUK a na OpenShift a urob\u00edme to maxim\u00e1lne objekt\u00edvne (no ob\u010das nebude ch\u00fdba\u0165 osobn\u00fd n\u00e1zor na t\u00e9mu). Ak v\u00e1s zauj\u00edma \u010disto subjekt\u00edvny n\u00e1zor na t\u00fato t\u00e9mu, m\u00f4\u017eete si ho pre\u010d\u00edta\u0165 <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/swlh\/im-so-sorry-openshift-i-ve-taken-you-for-granted-f36fb47ea4d9\">tu (EN)<\/a><\/noindex>. A v tomto pr\u00edspevku sa budeme dr\u017ea\u0165 iba faktov a len faktov.<\/p>\n<h3>Klastrovanie<\/h3>\n<p>\nTak\u017ee, pre na\u0161e \u201eHello World\u201c potrebujeme klastry. Hne\u010f poviem \u201enie\u201c v\u0161etk\u00fdm verejn\u00fdm cloudom, aby sme nemuseli plati\u0165 za servery, registre, siete, prenos d\u00e1t at\u010f. Preto vol\u00edme jednoduch\u00fd jednodeskov\u00fd klastr na <noindex><a rel=\"nofollow\" href=\"https:\/\/minikube.sigs.k8s.io\/docs\/start\/\">Minikube<\/a><\/noindex> (pre KUK) a <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/products\/codeready-containers\/overview\">Code Ready Containers<\/a><\/noindex> (pre klastr OpenShift). Oba tieto varianty s\u00fa naozaj jednoduch\u00e9 na in\u0161tal\u00e1ciu, ale vy\u017eaduj\u00fa dos\u0165 ve\u013ea zdrojov na va\u0161om notebooku.<\/p>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" src=\"\/wp-content\/uploads\/2020\/10\/01c748365253fc9e11e817876629ae7e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Zostavenie na KUK<\/h3>\n<p>\nTak\u017ee, po\u010fme na to.<\/p>\n<h4>Krok 1 \u2013 zostavujeme na\u0161u kontajnerov\u00fa podobu.<\/h4>\n<p>\nZa\u010dnem t\u00fdm, \u017ee nasad\u00edm n\u00e1\u0161 \u201eHello World\u201c na minikube. Na to budeme potrebova\u0165:<\/p>\n<ol>\n<li>1. Nain\u0161talovan\u00fd Docker.<\/li>\n<li>2. Nain\u0161talovan\u00fd Git.<\/li>\n<li>3. Nain\u0161talovan\u00fd Maven (v tomto projekte sa v skuto\u010dnosti pou\u017e\u00edva mvnw bin\u00e1rny s\u00fabor, tak\u017ee to nie je potrebn\u00e9).<\/li>\n<li>4. Samozrejme, samotn\u00fd zdrojov\u00fd k\u00f3d, t.j. klon repozit\u00e1ra <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>\nNajprv je potrebn\u00e9 vytvori\u0165 projekt Quarkus. Nebojte sa, ak ste nikdy nepracovali so str\u00e1nkou Quarkus.io \u2013 je to jednoduch\u00e9. Sta\u010d\u00ed si vybra\u0165 komponenty, ktor\u00e9 chcete vo svojom projekte pou\u017ei\u0165 (RestEasy, Hibernate, Amazon SQS, Camel at\u010f.), a potom sa Quarkus postar\u00e1 o nastavenie archetypu maven a v\u0161etko nahr\u00e1 na github bez v\u00e1\u0161ho z\u00e1sahu. Teda doslova jedno kliknutie my\u0161ou \u2013 a je to. Preto m\u00e1me Quarkus radi.<\/p>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" src=\"\/wp-content\/uploads\/2020\/10\/39a62058d91f8443e77466d374d02d34.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Najjednoduch\u0161\u00ed sp\u00f4sob, ako zostavi\u0165 na\u0161u \u201eHello World\u201c do kontajnerov\u00e9ho obrazu \u2013 je pou\u017ei\u0165 roz\u0161\u00edrenia quarkus-maven pre Docker, ktor\u00e9 vykonaj\u00fa v\u0161etku potrebn\u00fa pr\u00e1cu. S pr\u00edchodom Quarkus sa to stalo naozaj \u013eahk\u00e9 a jednoduch\u00e9: prid\u00e1te roz\u0161\u00edrenie container-image-docker a m\u00f4\u017eete vytv\u00e1ra\u0165 obrazy pr\u00edkazmi maven.<\/p>\n<pre><code class=\"plaintext\">.\/mvnw quarkus:add-extension -Dextensions=\"container-image-docker\"\n<\/code><\/pre>\n<p>\nA nakoniec zostav\u00edme n\u00e1\u0161 obraz pomocou Maven. V\u00fdsledkom je, \u017ee n\u00e1\u0161 zdrojov\u00fd k\u00f3d sa premen\u00ed na hotov\u00fd kontajnerov\u00fd obraz, ktor\u00fd u\u017e m\u00f4\u017eeme spusti\u0165 v prostred\u00ed kontajnerov.<\/p>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" 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>\nA to je v\u0161etko, teraz m\u00f4\u017eeme spusti\u0165 kontajner pr\u00edkazom docker run, pri\u010dom podmapujeme na\u0161u slu\u017ebu na port 8080, aby sme k nej mohli pristupova\u0165.<\/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=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" src=\"\/wp-content\/uploads\/2020\/10\/4f46e13423d5027d85ebae2c98c926b8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Potom, \u010do je in\u0161tancia kontajnera spusten\u00e1, sta\u010d\u00ed skontrolova\u0165 pr\u00edkazom curl, \u010di na\u0161a slu\u017eba funguje:<\/p>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" src=\"\/wp-content\/uploads\/2020\/10\/1c1462f52d6a487863c21f8f72a09d1f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Tak\u017ee v\u0161etko funguje a bolo to naozaj jednoduch\u00e9 a \u013eahk\u00e9.<\/p>\n<h4>Krok 2 \u2013 odosielame n\u00e1\u0161 kontajner do repozit\u00e1ra kontajnerov\u00fdch obrazov<\/h4>\n<p>\nDoteraz vytvoren\u00fd obraz je ulo\u017een\u00fd lok\u00e1lne v na\u0161om lok\u00e1lnom kontajnerovom \u00falo\u017eisku. Ak chceme tento obraz pou\u017ei\u0165 v na\u0161om prostred\u00ed K\u00daK, mus\u00edme ho umiestni\u0165 do in\u00e9ho repozit\u00e1ra. V Kubernetes tak\u00e9 funkcie nie s\u00fa, preto budeme pou\u017e\u00edva\u0165 dockerhub. Jednak je to zadarmo a jednak (takmer) v\u0161etci to robia.<\/p>\n<p>Je to tie\u017e ve\u013emi jednoduch\u00e9 a potrebn\u00fd je len \u00fa\u010det na dockerhub.<\/p>\n<p>Tak\u017ee sa prihl\u00e1sime do dockerhub a odosielame tam n\u00e1\u0161 obraz.<\/p>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" src=\"\/wp-content\/uploads\/2020\/10\/fb5d81ee15ca7594277c5a05da298fbd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>Krok 3 \u2013 sp\u00fa\u0161\u0165ame Kubernetes<\/h4>\n<p>\nExistuje ve\u013ea sp\u00f4sobov, ako zostavi\u0165 konfigur\u00e1ciu kubernetes na spustenie n\u00e1\u0161ho \u201eHello World\u201c, ale pou\u017eijeme ten najjednoduch\u0161\u00ed, sme tak\u00ed \u013eudia...<\/p>\n<p>Na za\u010diatok spust\u00edme klaster minikube:<\/p>\n<pre><code class=\"plaintext\">minikube start\n<\/code><\/pre>\n<p><\/p>\n<h4>Krok 4 \u2013 nasadzujeme n\u00e1\u0161 kontajnerov\u00fd obraz<\/h4>\n<p>\nTeraz mus\u00edme pretransformova\u0165 n\u00e1\u0161 k\u00f3d a kontajnerov\u00fd obraz do konfigur\u00e1ci\u00ed Kubernetes. In\u00fdmi slovami, potrebujeme pod a defin\u00edciu nasadenia s odkazom na n\u00e1\u0161 kontajnerov\u00fd obraz na DockerHube. Jedn\u00fdm z najjednoduch\u0161\u00edch sp\u00f4sobov, ako to urobi\u0165, je spusti\u0165 pr\u00edkaz create deployment a uvies\u0165 n\u00e1\u0161 obraz:<\/p>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" 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>\nT\u00fdmto pr\u00edkazom sme povedali na\u0161emu KUBENETOVI, aby vytvoril konfigur\u00e1ciu nasadenia, ktor\u00e1 by mala obsahova\u0165 \u0161pecifik\u00e1ciu podu pre n\u00e1\u0161 kontajnerov\u00fd obraz. Tento pr\u00edkaz tie\u017e aplikuje t\u00fato konfigur\u00e1ciu na n\u00e1\u0161 cluster minikube a vytvor\u00ed nasadenie, ktor\u00e9 stiahne n\u00e1\u0161 kontajnerov\u00fd obraz a spust\u00ed pod v clustre.<\/p>\n<h4>Krok 5 \u2013 otv\u00e1rame pr\u00edstup k na\u0161ej slu\u017ebe<\/h4>\n<p>\nTeraz, ke\u010f m\u00e1me nasaden\u00fd kontajnerov\u00fd obraz, je \u010das zamyslie\u0165 sa nad t\u00fdm, ako konfigurova\u0165 extern\u00fd pr\u00edstup k tejto Restful slu\u017ebe, ktor\u00e1 je vlastne naprogramovan\u00e1 v na\u0161om k\u00f3de.<\/p>\n<p>Existuje mnoho sp\u00f4sobov. Napr\u00edklad m\u00f4\u017eeme pou\u017ei\u0165 pr\u00edkaz expose na automatick\u00e9 vytvorenie pr\u00edslu\u0161n\u00fdch komponentov Kubernetes, ako s\u00fa slu\u017eby a koncov\u00e9 body. Presne to aj urob\u00edme, vykonan\u00edm pr\u00edkazu expose pre n\u00e1\u0161 objekt nasadenia:<\/p>\n<pre><code class=\"plaintext\">kubectl expose deployment hello-quarkus --type=NodePort --port=8080\n<\/code><\/pre>\n<p>\nNa chv\u00ed\u013eu sa zastavme pri mo\u017enos\u0165i \"--type\" pr\u00edkazu expose.<\/p>\n<p>Ke\u010f rob\u00edme expose a vytv\u00e1rame komponenty potrebn\u00e9 na spustenie na\u0161ej slu\u017eby, potrebujeme, aby sa zvonku dalo pripoji\u0165 k slu\u017ebe hello-quarkus, ktor\u00e1 s\u00eddli vo vn\u00fatri na\u0161ej programovo definovanej siete. A parameter <b>type<\/b> n\u00e1m umo\u017e\u0148uje vytvori\u0165 a pripoji\u0165 tak\u00e9 veci, ako s\u00fa vyrovn\u00e1va\u010de z\u00e1\u0165a\u017ee, aby sa zrealizoval prenos d\u00e1t do tejto siete.<\/p>\n<p>Napr\u00edklad, zadan\u00edm <b>type=LoadBalancer<\/b>, automaticky aktivujeme vyrovn\u00e1va\u010d z\u00e1\u0165a\u017ee v verejnom cloude, aby sme sa mohli pripoji\u0165 k n\u00e1\u0161mu Kubernetes klastru. To je samozrejme skvel\u00e9, ale je potrebn\u00e9 pochopi\u0165, \u017ee tak\u00e1to konfigur\u00e1cia bude pevne viazan\u00e1 na konkr\u00e9tny verejn\u00fd cloud a bude \u0165a\u017e\u0161ie pren\u00e1\u0161ate\u013en\u00e1 medzi Kubernetes in\u0161tancami v r\u00f4znych prostrediach.<\/p>\n<p>V na\u0161om pr\u00edklade <b>type=NodePort<\/b>, to znamen\u00e1, \u017ee pr\u00edstup k n\u00e1\u0161mu serveru prebieha prostredn\u00edctvom IP adresy uzla a \u010d\u00edsla portu. T\u00e1to mo\u017enos\u0165 umo\u017e\u0148uje nepou\u017e\u00edva\u0165 \u017eiadne verejn\u00e9 cloudov\u00e9 slu\u017eby, av\u0161ak vy\u017eaduje si nieko\u013eko \u010fal\u0161\u00edch krokov. Po prv\u00e9, potrebujeme vlastn\u00fd vyrovn\u00e1va\u010d z\u00e1\u0165a\u017ee, tak\u017ee rozbehneme vyrovn\u00e1va\u010d z\u00e1\u0165a\u017ee NGINX v na\u0161om klastere.<\/p>\n<h4>Krok 6 \u2013 nastavujeme vyrovn\u00e1va\u010d z\u00e1\u0165a\u017ee<\/h4>\n<p>\nMinikube m\u00e1 mno\u017estvo nat\u00edvnych funkci\u00ed, ktor\u00e9 u\u013eah\u010duj\u00fa vytv\u00e1ranie potrebn\u00fdch komponentov na extern\u00fd pr\u00edstup, ako s\u00fa ingress kontrol\u00e9ry. Minikube prich\u00e1dza spolu s ingress kontrol\u00e9rom Nginx, a my ho len aktivujeme a nastav\u00edme.<\/p>\n<pre><code class=\"plaintext\">minikube addons enable ingress\n<\/code><\/pre>\n<p>\nTeraz pomocou jedn\u00e9ho pr\u00edkazu vytvor\u00edme ingress kontrol\u00e9r Nginx, ktor\u00fd bude fungova\u0165 v na\u0161om klastere minikube:<\/p>\n<pre><code class=\"plaintext\">ingress-nginx-controller-69ccf5d9d8-j5gs9 1\/1 Running 1 33m\n<\/code><\/pre>\n<p><\/p>\n<h4>Krok 7 \u2013 Konfigurujeme ingress<\/h4>\n<p>\nTeraz mus\u00edme nastavi\u0165 ingress kontrol\u00e9r Nginx, aby prij\u00edmal po\u017eiadavky na hello-quarkus.<\/p>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" src=\"\/wp-content\/uploads\/2020\/10\/18183cb985436447cf15c501e4c6c3a3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" src=\"\/wp-content\/uploads\/2020\/10\/577f1e6218094b5ee23052d49869e838.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>A nakoniec, mus\u00edme pou\u017ei\u0165 t\u00fato konfigur\u00e1ciu.<\/p>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" 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=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" src=\"\/wp-content\/uploads\/2020\/10\/68fba4ef3d2762a97dc5be5de9e6b864.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ke\u010f\u017ee v\u0161etko rob\u00edme na svojom po\u010d\u00edta\u010di, jednoducho prid\u00e1me IP adresu svojho uzla do s\u00faboru \/etc\/hosts, aby sme nasmerovali http po\u017eiadavky na n\u00e1\u0161 minikube na vyrovn\u00e1va\u010d z\u00e1\u0165a\u017ee NGINX.<\/p>\n<pre><code class=\"plaintext\">192.168.99.100 hello-quarkus.info\n<\/code><\/pre>\n<p>\nHotovo, teraz je n\u00e1\u0161 servis minikube pr\u00edstupn\u00fd zvonka cez ingress kontrol\u00e9r Nginx.<\/p>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" src=\"\/wp-content\/uploads\/2020\/10\/a456f34d168d43e9236e4769722b7f5d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>No, bolo to \u013eahk\u00e9, \u017ee? Alebo nie ve\u013emi?<\/h3>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" src=\"\/wp-content\/uploads\/2020\/10\/237015dc06bb9d12eb4cd2944dc6df58.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Spustenie na OpenShift (Code Ready Containers)<\/h3>\n<p>\nA teraz sa pozrieme, ako sa to v\u0161etko rob\u00ed na Red Hat OpenShift Container Platform (OCP).<\/p>\n<p>Rovnako ako v pr\u00edpade minikube, vyber\u00e1me sch\u00e9mu s jednodeskov\u00fdm klastrom OpenShift vo forme Code Ready Containers (CRC). Predt\u00fdm sa to naz\u00fdvalo minishift a vych\u00e1dzalo to z projektu OpenShift Origin, a teraz je to CRC a postaven\u00e9 na OpenShift Container Platform od Red Hat.<\/p>\n<p>Tu sa, prep\u00e1\u010dte, nem\u00f4\u017eeme udr\u017ea\u0165 a nehovor\u00edme: \u201eOpenShift je n\u00e1dhern\u00fd!\u201c<\/p>\n<p>P\u00f4vodne sme chceli nap\u00edsa\u0165, \u017ee v\u00fdvoj na OpenShift sa nijako nel\u00ed\u0161i od v\u00fdvoja na Kubernetes. A v podstate je to pravda. Ale po\u010das p\u00edsania tohto pr\u00edspevku sme si spomenuli, ko\u013eko zbyto\u010dn\u00fdch pohybov mus\u00edme vykona\u0165, ke\u010f nem\u00e1me OpenShift, a preto je, opakujeme, n\u00e1dhern\u00fd. M\u00e1me radi, ke\u010f sa veci robia jednoducho, a to, ako je \u013eahko v porovnan\u00ed s minikube na\u0161\u00edm pr\u00edkladom vyvinut\u00e9 a spusten\u00e9 na OpenShift, n\u00e1s vlastne motivovalo nap\u00edsa\u0165 tento pr\u00edspevok.<\/p>\n<p>Po\u010fme prejs\u0165 procesom a pozrime sa, \u010do budeme musie\u0165 urobi\u0165.<\/p>\n<p>Tak\u017ee v pr\u00edklade s minikube sme za\u010d\u00ednali s Docker\u2026 Po\u010dkajte, u\u017e nemus\u00edme, aby bol Docker nain\u0161talovan\u00fd na stroji.<\/p>\n<p><b>A lok\u00e1lny git nie je potrebn\u00fd.<br \/>\nA Maven nie je potrebn\u00fd.<br \/>\nA nie je potrebn\u00e9 vytv\u00e1ra\u0165 kontajnerov\u00fd obraz manu\u00e1lne.<br \/>\nA nie je potrebn\u00e9 h\u013eada\u0165 \u017eiadny repozit\u00e1r kontajnerov\u00fdch obrazov.<br \/>\nA nie je potrebn\u00e9 in\u0161talova\u0165 ingress-kontrol\u00e9r.<br \/>\nA konfigurova\u0165 ingress tie\u017e nie je potrebn\u00e9.<\/b><\/p>\n<p>Rozumiete, \u00e1no? Na to, aby sme nasadili a spustili na\u0161u aplik\u00e1ciu na OpenShift, nie je potrebn\u00e9 ni\u010d z vy\u0161\u0161ie uveden\u00e9ho. A samotn\u00fd proces vyzer\u00e1 nasledovne.<\/p>\n<h4>Krok 1 \u2013 Sp\u00fa\u0161\u0165ame svoj klaster OpenShift<\/h4>\n<p>\nPou\u017e\u00edvame Code Ready Containers od Red Hat, ktor\u00fd v podstate je to ist\u00e9 ako Minikube, ale len s plnohodnotn\u00fdm jednouzlov\u00fdm klastrom OpenShift.<\/p>\n<pre><code class=\"plaintext\">crc start\n<\/code><\/pre>\n<p><\/p>\n<h4>Krok 2 \u2013 Vykon\u00e1vame zostavenie a nasadenie aplik\u00e1cie v klastru OpenShift<\/h4>\n<p>\nPr\u00e1ve v tomto kroku sa jednoduchos\u0165 a pohodlie OpenShift prejavuj\u00fa v plnej kr\u00e1se. Rovnako ako vo v\u0161etk\u00fdch distrib\u00faci\u00e1ch Kubernetes, m\u00e1me mno\u017estvo sp\u00f4sobov, ako spusti\u0165 aplik\u00e1ciu v klastru. A ako v pr\u00edpade K\u00daK, vyber\u00e1me si najjednoduch\u0161iu mo\u017enos\u0165.<\/p>\n<p>OpenShift bol v\u017edy navrhnut\u00fd ako platforma na vytv\u00e1ranie a sp\u00fa\u0161\u0165anie kontajnerov\u00fdch aplik\u00e1ci\u00ed. Zostavenie kontajnerov bolo v\u017edy neoddelite\u013enou s\u00fa\u010das\u0165ou tejto platformy, a preto tu existuje mno\u017estvo \u010fal\u0161\u00edch Kubernetes-zdrojov pre pr\u00edslu\u0161n\u00e9 \u00falohy.<\/p>\n<p>Budeme pou\u017e\u00edva\u0165 proces Source 2 Image (S2I) od OpenShiftu, ktor\u00fd m\u00e1 nieko\u013eko r\u00f4znych sp\u00f4sobov, ako z\u00edska\u0165 n\u00e1\u0161 zdroj (k\u00f3d alebo bin\u00e1rne s\u00fabory) a premeni\u0165 ho na kontajnerov\u00fd obraz, ktor\u00fd je mo\u017en\u00e9 spusti\u0165 v klastri OpenShift.<\/p>\n<p>Na to budeme potrebova\u0165 dve veci:<\/p>\n<ul>\n<li>N\u00e1\u0161 zdrojov\u00fd k\u00f3d v repozit\u00e1ri git<\/li>\n<li>Builder-obraz, na z\u00e1klade ktor\u00e9ho sa bude vykon\u00e1va\u0165 zostavenie.<\/li>\n<\/ul>\n<p>\nExistuje mno\u017estvo tak\u00fdchto obrazov, pri\u010dom niektor\u00e9 poskytuje Red Hat a in\u00e9 s\u00fa na \u00farovni komunity, a my vyu\u017eijeme obraz OpenJDK, ke\u010f\u017ee vytv\u00e1ram aplik\u00e1ciu v Jave.<\/p>\n<p>S2I-zostavenie m\u00f4\u017eeme spusti\u0165 ako z grafickej konzoly OpenShift Developer, tak z pr\u00edkazov\u00e9ho riadku. My vyu\u017eijeme pr\u00edkaz new-app, ktor\u00e9mu ur\u010d\u00edme, odkia\u013e bra\u0165 builder-obraz a n\u00e1\u0161 zdrojov\u00fd k\u00f3d.<\/p>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" 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>\nHotovo, na\u0161a aplik\u00e1cia bola vytvoren\u00e1. Pri tom proces S2I vykonal nasleduj\u00face \u00fakony:<\/p>\n<ul>\n<li>Vytvoril pomocn\u00fd build-pod pre r\u00f4zne \u00falohy s\u00favisiace so zostaven\u00edm aplik\u00e1cie.<\/li>\n<li>Vytvoril konfigura\u010dn\u00fd OpenShift Build.<\/li>\n<li>Stiahol builder-obraz do vn\u00fatorn\u00e9ho docker-registra OpenShift.<\/li>\n<li>Naklonoval 'Hello World' do lok\u00e1lneho repozit\u00e1ra.<\/li>\n<li>V\u0161imol som si, \u017ee tam je maven pom, a preto som aplik\u00e1ciu zkompiloval pomocou maven.<\/li>\n<li>Vytvoril som nov\u00fd kontajnerov\u00fd obraz, ktor\u00fd obsahuje skompilovan\u00fa Java aplik\u00e1ciu, a ulo\u017eil tento obraz do intern\u00e9ho kontajnerov\u00e9ho registra.<\/li>\n<li>Vytvoril som Kubernetes Deployment so \u0161pecifik\u00e1ciami podu, slu\u017eby a podobne.<\/li>\n<li>Spustil som nasadenie kontajnerov\u00e9ho obrazu.<\/li>\n<li>Odstr\u00e1nil som do\u010dasn\u00fd build-pod.<\/li>\n<\/ul>\n<p>\nV tomto zozname je ve\u013ea vec\u00ed, ale hlavn\u00e9 je, \u017ee cel\u00fd proces zostavenia prebieha v\u00fdhradne v r\u00e1mci OpenShift, intern\u00fd Docker registry sa nach\u00e1dza v OpenShift a proces zostavenia vytv\u00e1ra v\u0161etky komponenty Kubernetes a sp\u00fa\u0161\u0165a ich v klastri.<\/p>\n<p>Ak vizu\u00e1lne sledujete spustenie S2I v konzole, m\u00f4\u017eete vidie\u0165, ako pri vykonan\u00ed zostavenia be\u017e\u00ed build pod.<\/p>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" src=\"\/wp-content\/uploads\/2020\/10\/bd69c6e27813b1211a11e522f28f45b7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>A teraz sa pozrime na logy builder podu: po prv\u00e9, m\u00f4\u017eete vidie\u0165, ako maven vykon\u00e1va svoju pr\u00e1cu a s\u0165ahuje z\u00e1vislosti na zostavenie na\u0161ej java aplik\u00e1cie.<\/p>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" src=\"\/wp-content\/uploads\/2020\/10\/326192f9f9373e451d601b77052d67d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Po skon\u010den\u00ed maven zostavenia sa sp\u00fa\u0161\u0165a zostavenie kontajnerov\u00e9ho obrazu a potom sa tento zostaven\u00fd obraz odosiela do intern\u00e9ho repozit\u00e1ra.<\/p>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" src=\"\/wp-content\/uploads\/2020\/10\/c97da4c17a8e275d39104126d0f87048.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>V\u0161etko, proces zostavenia je dokon\u010den\u00fd. Teraz sa uist\u00edme, \u017ee v klastri s\u00fa spusten\u00e9 pody a slu\u017eby na\u0161ej aplik\u00e1cie.<\/p>\n<pre><code class=\"plaintext\">oc get service\n<\/code><\/pre>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" src=\"\/wp-content\/uploads\/2020\/10\/f16a098a096128073f305e0444061417.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>A je to. A v\u0161etko to bolo s jedn\u00fdm pr\u00edkazom. Ost\u00e1va n\u00e1m len spr\u00edstupni\u0165 t\u00fato slu\u017ebu pre pr\u00edstup zvonka.<\/p>\n<h4>Krok 3 \u2013 spr\u00edstupnenie slu\u017eby pre pr\u00edstup zvonka<\/h4>\n<p>\nRovnako ako v pr\u00edpade KUB, aj pre n\u00e1\u0161 \u201eHello World\u201c potrebujeme na platforme OpenShift router, ktor\u00fd smeruje extern\u00fd traffic na slu\u017ebu vo vn\u00fatri klastra. V OpenShift je to ve\u013emi jednoduch\u00e9. Po prv\u00e9, v klastri je predvolene nain\u0161talovan\u00fd komponent routovania HAProxy (m\u00f4\u017eete ho vymeni\u0165 za NGINX). Po druh\u00e9, s\u00fa tu \u0161peci\u00e1lne zdroje s \u0161irok\u00fdmi mo\u017enos\u0165ami konfigur\u00e1cie, ktor\u00e9 sa naz\u00fdvaj\u00fa Routes a pripom\u00ednaj\u00fa Ingress objekty v starom dobrom Kubernetes (v skuto\u010dnosti mali openShiftsk\u00e9 Routes ve\u013ek\u00fd vplyv na dizajn Ingress objektov, ktor\u00e9 sa teraz m\u00f4\u017eu pou\u017e\u00edva\u0165 aj v OpenShift), ale pre n\u00e1\u0161 \u201eHello World\u201c, a aj v takmer v\u0161etk\u00fdch ostatn\u00fdch pr\u00edpadoch, n\u00e1m sta\u010d\u00ed \u0161tandardn\u00e1 Route bez \u010fal\u0161ej konfigur\u00e1cie.<\/p>\n<p>Aby sme vytvorili routovate\u013en\u00fd FQDN pre \u201eHello World\u201c (\u00e1no, v OpenShift je svoj DNS pre routovanie pod\u013ea n\u00e1zvov slu\u017eieb), jednoducho vykon\u00e1me expose pre na\u0161u slu\u017ebu:<\/p>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" 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>\nAk sa pozrieme na pr\u00e1ve vytvoren\u00fd Route, m\u00f4\u017eeme tam n\u00e1js\u0165 FQDN a \u010fal\u0161ie inform\u00e1cie o routovan\u00ed:<\/p>\n<pre><code class=\"plaintext\">oc get route\n<\/code><\/pre>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" src=\"\/wp-content\/uploads\/2020\/10\/dc59c36166605ef0a5a24b2b7ffa65b6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>A nakoniec sa prihl\u00e1sime k na\u0161ej slu\u017ebe z prehliada\u010da:<\/p>\n<p><img decoding=\"async\" alt=\"Prep\u00e1\u010d, OpenShift, dostato\u010dne sme \u0165a neocenili a brali ako samozrejmos\u0165.\" src=\"\/wp-content\/uploads\/2020\/10\/fccf6cae1746fa59df2ff8ffb6973666.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>A teraz to naozaj bolo jednoduch\u00e9!<\/h3>\n<p>\nMilujeme Kubernetes a v\u0161etko, \u010do t\u00e1to technol\u00f3gia umo\u017e\u0148uje, rovnako ako milujeme jednoduchos\u0165 a \u013eahkos\u0165. Kubernetes bol vytvoren\u00fd na to, aby mimoriadne zjednodu\u0161il prev\u00e1dzku distribuovan\u00fdch \u0161k\u00e1lovate\u013en\u00fdch kontajnerov, ale na zavedenie aplik\u00e1ci\u00ed u\u017e jeho jednoduchos\u0165 nesta\u010d\u00ed. A tu prich\u00e1dza do hry OpenShift, ktor\u00fd ide s dobou a pon\u00faka Kubernetes zameran\u00fd predov\u0161etk\u00fdm na v\u00fdvoj\u00e1rov. Bolo vynalo\u017een\u00e9 ve\u013ea \u00fasilia na prisp\u00f4sobenie platformy OpenShift pr\u00e1ve pre v\u00fdvoj\u00e1rov, vr\u00e1tane vytvorenia tak\u00fdch n\u00e1strojov ako S2I, ODI, Developer Portal, OpenShift Operator Framework, integr\u00e1cia s IDE, Developer Catalogues, integr\u00e1cia s Helm, monitoring a mnoh\u00e9 \u010fal\u0161ie.<\/p>\n<p>D\u00fafame, \u017ee tento \u010dl\u00e1nok bol pre v\u00e1s zauj\u00edmav\u00fd a u\u017eito\u010dn\u00fd. \u010eal\u0161ie zdroje, materi\u00e1ly a \u010fal\u0161ie u\u017eito\u010dn\u00e9 inform\u00e1cie o v\u00fdvoji na platforme OpenShift m\u00f4\u017eete n\u00e1js\u0165 na port\u00e1li <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/\">Red Hat Developers<\/a><\/noindex>.<br \/>\n<br \/>Zdroj: <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\/sk\/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=\"sk_SK\" \/>\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\/sk\/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\udd47Prep\u00e1\u010d, OpenShift, nedostato\u010dne sme \u0165a ocenili a brali sme \u0165a ako samozrejmos\u0165 | ProHoster","description":"Tento pr\u00edspevok vznikol, preto\u017ee na\u0161i zamestnanci mali mno\u017estvo rozhovorov s klientmi o v\u00fdvoji aplik\u00e1ci\u00ed na Kubernetes a o \u0161pecifik\u00e1ch tohto v\u00fdvoja na OpenShift.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\/sk\/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\/sk\/wp-json\/wp\/v2\/posts\/97254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=97254"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/97254\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/97255"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=97254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=97254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=97254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}