{"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\/cs\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe","title":{"rendered":"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tento p\u0159\u00edsp\u011bvek byl naps\u00e1n, proto\u017ee jsme m\u011bli s na\u0161imi klienty \u0159adu rozhovor\u016f o v\u00fdvoji aplikac\u00ed na Kubernetes a specifik\u00e1ch tohoto v\u00fdvoje na OpenShift.<\/p>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" src=\"\/wp-content\/uploads\/2020\/10\/ad447aeb80d3ae56ea4598cd959456de.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nObvykle za\u010d\u00edn\u00e1me tvrzen\u00edm, \u017ee Kubernetes je prost\u011b Kubernetes, zat\u00edmco OpenShift je ji\u017e platforma Kubernetes, jako Microsoft AKS nebo Amazon EKS. Ka\u017ed\u00e1 z t\u011bchto platforem m\u00e1 sv\u00e9 v\u00fdhody zam\u011b\u0159en\u00e9 na ur\u010dit\u00e9 c\u00edlov\u00e9 publikum. A po tomto \u00favodu p\u0159ech\u00e1z\u00edme k porovn\u00e1n\u00ed siln\u00fdch a slab\u00fdch str\u00e1nek konkr\u00e9tn\u00edch platforem.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nObecn\u011b jsme cht\u011bli napsat tento p\u0159\u00edsp\u011bvek s z\u00e1v\u011brem typu \u201ePosly\u0161te, na tom opravdu nez\u00e1le\u017e\u00ed, kde spou\u0161t\u011bt k\u00f3d, na OpenShift nebo na AKS, na EKS, na n\u011bjak\u00e9m custom Kubernetes, prost\u011b na jak\u00e9mkoliv Kubernetes <i>(zkr\u00e1cen\u011b ho nazveme KUK)<\/i> \u2013 je to skute\u010dn\u011b jednoduch\u00e9, jak tam, tak i tady.\u201c<\/p>\n<p>Pak jsme pl\u00e1novali vz\u00edt nejjednodu\u0161\u0161\u00ed \"Hello World\" a na jeho p\u0159\u00edkladu uk\u00e1zat, co je spole\u010dn\u00e9 a jak\u00e9 jsou rozd\u00edly mezi KUK a Red Hat OpenShift Container Platform (d\u00e1le OCP nebo jednodu\u0161e OpenShift).<\/p>\n<p>B\u011bhem psan\u00ed tohoto p\u0159\u00edsp\u011bvku jsme si v\u0161ak uv\u011bdomili, \u017ee jsme si tak dlouho a siln\u011b zvykli pou\u017e\u00edvat OpenShift, \u017ee si ani neuv\u011bdomujeme, jak vyrostl a stal se ohromnou platformou, kter\u00e1 je mnohem v\u00edc ne\u017e jen distribuc\u00ed Kubernetes. Na zralost a jednoduchost OpenShift jsme si zvykli br\u00e1t jako samoz\u0159ejmost, zapom\u00ednaj\u00edce na jeho skvost.<\/p>\n<p>Obecn\u011b p\u0159i\u0161el \u010das na aktivn\u00ed l\u00edtost a te\u010f krok za krokem porovn\u00e1me nasazen\u00ed na\u0161eho \"Hello World\" na KUK a na OpenShift a ud\u011bl\u00e1me to co nejobjektivn\u011bji (alespo\u0148 ob\u010das vyj\u00e1d\u0159\u00edme sv\u016fj osobn\u00ed n\u00e1zor na v\u011bc). Pokud v\u00e1s zaj\u00edmaj\u00ed pouze subjektivn\u00ed n\u00e1zory na toto t\u00e9ma, m\u016f\u017eete si je p\u0159e\u010d\u00edst <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/swlh\/im-so-sorry-openshift-i-ve-taken-you-for-granted-f36fb47ea4d9\">zde (EN)<\/a><\/noindex>. V tomto p\u0159\u00edsp\u011bvku se v\u0161ak budeme dr\u017eet fakt\u016f a pouze fakt\u016f.<\/p>\n<h3>Klastery<\/h3>\n<p>\nPro na\u0161e \"Hello World\" jsou pot\u0159ebn\u00e9 klastery. Hned \u0159\u00edk\u00e1me \u201ene\u201c v\u0161em ve\u0159ejn\u00fdm cloud\u016fm, abychom nemuseli platit za servery, registry, s\u00edt\u011b, p\u0159enosy dat atd. T\u00edm p\u00e1dem vyb\u00edr\u00e1me jednoduch\u00fd jednodeskov\u00fd klastr na <noindex><a rel=\"nofollow\" href=\"https:\/\/minikube.sigs.k8s.io\/docs\/start\/\">Minikube<\/a><\/noindex> (pro KUK) a <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/products\/codeready-containers\/overview\">Code Ready Containers<\/a><\/noindex> (pro klastr OpenShift). Ob\u011b tyto varianty jsou opravdu jednoduch\u00e9 na instalaci, ale vy\u017eaduj\u00ed docela dost zdroj\u016f na va\u0161em notebooku.<\/p>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" src=\"\/wp-content\/uploads\/2020\/10\/01c748365253fc9e11e817876629ae7e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Sestaven\u00ed na KUK-u<\/h3>\n<p>\nTak poj\u010fme na to.<\/p>\n<h4>Krok 1 \u2013 shrom\u00e1\u017ed\u00edme n\u00e1\u0161 kontejnerov\u00fd obraz<\/h4>\n<p>\nZa\u010dneme t\u00edm, \u017ee na minikube nasad\u00edme na\u0161e \"Hello World\". K tomu pot\u0159ebujeme:<\/p>\n<ol>\n<li>1. Nainstalovan\u00fd Docker.<\/li>\n<li>2. Nainstalovan\u00fd Git.<\/li>\n<li>3. Nainstalovan\u00fd Maven (ve skute\u010dnosti se v tomto projektu pou\u017e\u00edv\u00e1 mvnw-bin\u00e1rka, tak\u017ee se bez n\u011bj d\u00e1 obej\u00edt).<\/li>\n<li>4. P\u0159\u00edmo zdrojov\u00fd k\u00f3d, tedy klon repozit\u00e1\u0159e <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>\nNejprve je t\u0159eba vytvo\u0159it projekt Quarkus. Nebojte se, pokud jste nikdy nepracovali se str\u00e1nkami Quarkus.io \u2013 je to snadn\u00e9. Jednodu\u0161e vyberete komponenty, kter\u00e9 chcete v projektu pou\u017e\u00edt (RestEasy, Hibernate, Amazon SQS, Camel atd.), a pot\u00e9 Quarkus s\u00e1m, bez va\u0161eho jak\u00e9hokoliv zapojen\u00ed, nastav\u00ed archetyp maven a nahod\u00ed v\u0161e na github. To znamen\u00e1 doslova jedno kliknut\u00ed my\u0161\u00ed \u2013 a je hotovo. Za to m\u00e1me Quarkus r\u00e1di.<\/p>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" src=\"\/wp-content\/uploads\/2020\/10\/39a62058d91f8443e77466d374d02d34.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Nejjednodu\u0161\u0161\u00ed zp\u016fsob, jak sestavit n\u00e1\u0161 \u201eHello World\u201c do kontejnerov\u00e9ho obrazu, je pou\u017e\u00edt roz\u0161\u00ed\u0159en\u00ed quarkus-maven pro Docker, kter\u00e9 ud\u011bl\u00e1 ve\u0161kerou pot\u0159ebnou pr\u00e1ci. S p\u0159\u00edchodem Quarkus to bylo opravdu snadn\u00e9 a jednoduch\u00e9: p\u0159id\u00e1te roz\u0161\u00ed\u0159en\u00ed container-image-docker a m\u016f\u017eete vytv\u00e1\u0159et obrazy pomoc\u00ed p\u0159\u00edkaz\u016f maven.<\/p>\n<pre><code class=\"plaintext\">.\/mvnw quarkus:add-extension -Dextensions=\"container-image-docker\"\n<\/code><\/pre>\n<p>\nA nakonec provedeme sestaven\u00ed na\u0161eho obrazu pomoc\u00ed Maven. V\u00fdsledkem je, \u017ee n\u00e1\u0161 zdrojov\u00fd k\u00f3d se p\u0159etvo\u0159\u00ed v hotov\u00fd kontejnerov\u00fd obraz, kter\u00fd lze ji\u017e spustit v prost\u0159ed\u00ed kontejner\u016f.<\/p>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" 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 vlastn\u011b v\u0161echno, nyn\u00ed m\u016f\u017eeme spustit kontejner pomoc\u00ed p\u0159\u00edkazu docker run, mapov\u00e1n\u00edm na\u0161eho servisu na port 8080, abychom k n\u011bmu mohli p\u0159istupovat.<\/p>\n<pre><code class=\"plaintext\">docker run -i \u2014 rm -p 8080:8080 gcolman\/quarkus-hello-world\n<\/code><\/pre>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" src=\"\/wp-content\/uploads\/2020\/10\/4f46e13423d5027d85ebae2c98c926b8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Jakmile se kontejnerov\u00fd instance spust\u00ed, zb\u00fdv\u00e1 pouze ov\u011b\u0159it p\u0159\u00edkazem curl, \u017ee n\u00e1\u0161 servis funguje:<\/p>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" src=\"\/wp-content\/uploads\/2020\/10\/1c1462f52d6a487863c21f8f72a09d1f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Tak\u017ee, v\u0161e funguje, a bylo to opravdu snadn\u00e9 a jednoduch\u00e9.<\/p>\n<h4>Krok 2 \u2013 pos\u00edl\u00e1me n\u00e1\u0161 kontejner do repozit\u00e1\u0159e kontejnerov\u00fdch obraz\u016f<\/h4>\n<p>\nZat\u00edmco n\u00e1\u0161 obraz je ulo\u017een m\u00edstn\u011b v na\u0161em m\u00edstn\u00edm kontejnerov\u00e9m \u00falo\u017ei\u0161ti. Pokud chceme tento obraz pou\u017e\u00edt ve sv\u00e9m KUK prost\u0159ed\u00ed, mus\u00edme ho um\u00edstit do n\u011bjak\u00e9ho jin\u00e9ho repozit\u00e1\u0159e. V Kubernetes takov\u00e9 funkce neexistuj\u00ed, proto budeme pou\u017e\u00edvat dockerhub. Proto\u017ee, za prv\u00e9, je to zdarma, a za druh\u00e9, (skoro) v\u0161ichni to tak d\u011blaj\u00ed.<\/p>\n<p>To je tak\u00e9 velmi jednoduch\u00e9 a pot\u0159ebujete zde pouze \u00fa\u010det na dockerhub.<\/p>\n<p>Tak\u017ee, p\u0159ihla\u0161ujeme se na dockerhub a pos\u00edl\u00e1me tam n\u00e1\u0161 obraz.<\/p>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" src=\"\/wp-content\/uploads\/2020\/10\/fb5d81ee15ca7594277c5a05da298fbd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>Krok 3 \u2013 spou\u0161t\u00edme Kubernetes<\/h4>\n<p>\nExistuje mnoho zp\u016fsob\u016f, jak sestavit konfiguraci kubernetes pro spu\u0161t\u011bn\u00ed na\u0161eho \u201eHello World\u201c, ale pou\u017eijeme ten nejjednodu\u0161\u0161\u00ed, jak\u00fd jen existuje...<\/p>\n<p>Nejprve spou\u0161t\u00edme klastr minikube:<\/p>\n<pre><code class=\"plaintext\">minikube start\n<\/code><\/pre>\n<p><\/p>\n<h4>Krok 4 \u2013 nasazujeme n\u00e1\u0161 kontejnerov\u00fd obraz<\/h4>\n<p>\nNyn\u00ed mus\u00edme p\u0159ev\u00e9st n\u00e1\u0161 k\u00f3d a kontejnerov\u00fd obraz do konfigurac\u00ed kubernetes. Jin\u00fdmi slovy, pot\u0159ebujeme pod a definici nasazen\u00ed s odkazem na n\u00e1\u0161 kontejnerov\u00fd obraz na dockerhub. Jedn\u00edm z nejjednodu\u0161\u0161\u00edch zp\u016fsob\u016f, jak to ud\u011blat, je spustit p\u0159\u00edkaz create deployment, s odkazem na n\u00e1\u0161 obraz:<\/p>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" 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\u00edmto p\u0159\u00edkazem jsme \u0159ekli na\u0161emu KUBERNETES, aby vytvo\u0159il konfigura\u010dn\u00ed nasazen\u00ed, kter\u00e9 bude obsahovat specifikaci podu pro n\u00e1\u0161 kontejnerov\u00fd obraz. Tento p\u0159\u00edkaz tak\u00e9 aplikujte tuto konfiguraci na n\u00e1\u0161 cluster minikube a vytvo\u0159\u00ed nasazen\u00ed, kter\u00e9 st\u00e1hne n\u00e1\u0161 kontejnerov\u00fd obraz a spust\u00ed pod v clusteru.<\/p>\n<h4>Krok 5 \u2013 otev\u00edr\u00e1me p\u0159\u00edstup k na\u0161emu slu\u017eb\u011b<\/h4>\n<p>\nNyn\u00ed, kdy\u017e m\u00e1me nasazen\u00fd kontejnerov\u00fd obraz, je \u010das p\u0159em\u00fd\u0161let o tom, jak nakonfigurovat extern\u00ed p\u0159\u00edstup k t\u00e9to Restful slu\u017eb\u011b, kter\u00e1 je vlastn\u011b naprogramov\u00e1na v na\u0161em k\u00f3du.<\/p>\n<p>Existuje mnoho zp\u016fsob\u016f. Nap\u0159\u00edklad m\u016f\u017eeme pou\u017e\u00edt p\u0159\u00edkaz expose, abychom automaticky vytvo\u0159ili odpov\u00eddaj\u00edc\u00ed komponenty Kubernetes, jako jsou slu\u017eby a koncov\u00e9 body. Vlastn\u011b to tak ud\u011bl\u00e1me, kdy\u017e vykon\u00e1me p\u0159\u00edkaz expose pro n\u00e1\u0161 objekt nasazen\u00ed:<\/p>\n<pre><code class=\"plaintext\">kubectl expose deployment hello-quarkus --type=NodePort --port=8080\n<\/code><\/pre>\n<p>\nNa chv\u00edli se zastavme u volby \"--type\" p\u0159\u00edkazu expose.<\/p>\n<p>Kdy\u017e prov\u00e1d\u00edme expose a vytv\u00e1\u0159\u00edme komponenty pot\u0159ebn\u00e9 pro spu\u0161t\u011bn\u00ed na\u0161\u00ed slu\u017eby, pot\u0159ebujeme, abychom se zven\u010d\u00ed mohli p\u0159ipojit k slu\u017eb\u011b hello-quarkus, kter\u00e1 je uvnit\u0159 na\u0161\u00ed softwarov\u011b definovan\u00e9 s\u00edt\u011b. A parametr <b>type<\/b> n\u00e1m umo\u017e\u0148uje vytvo\u0159it a p\u0159ipojit takov\u00e9 v\u011bci, jako jsou vyva\u017eova\u010de z\u00e1t\u011b\u017ee, aby sm\u011brovaly provoz do t\u00e9to s\u00edt\u011b.<\/p>\n<p>Nap\u0159\u00edklad, pokud nap\u00ed\u0161eme <b>type=LoadBalancer<\/b>, automaticky inicializujeme vyva\u017eova\u010d z\u00e1t\u011b\u017ee v ve\u0159ejn\u00e9m cloudu, abychom se p\u0159ipojili k na\u0161emu clusteru Kubernetes. To je samoz\u0159ejm\u011b skv\u011bl\u00e9, ale je t\u0159eba m\u00edt na pam\u011bti, \u017ee takov\u00e1 konfigurace bude pevn\u011b sv\u00e1zan\u00e1 s konkr\u00e9tn\u00edm ve\u0159ejn\u00fdm cloudem a bude obt\u00ed\u017en\u011bj\u0161\u00ed ji p\u0159en\u00e1\u0161et mezi Kubernetes instancemi v r\u016fzn\u00fdch prost\u0159ed\u00edch.<\/p>\n<p>V na\u0161em p\u0159\u00edkladu <b>type=NodePort<\/b>, tedy p\u0159\u00edstup k na\u0161\u00ed slu\u017eb\u011b se prov\u00e1d\u00ed pomoc\u00ed IP adresy uzlu a \u010d\u00edsla portu. Tato varianta nevy\u017eaduje vyu\u017eit\u00ed \u017e\u00e1dn\u00fdch ve\u0159ejn\u00fdch cloud\u016f, ale vy\u017eaduje n\u011bkolik dal\u0161\u00edch krok\u016f. Za prv\u00e9, pot\u0159ebujeme vlastn\u00ed vyrovn\u00e1va\u010d z\u00e1t\u011b\u017ee, proto nasad\u00edme ve sv\u00e9m clusteru vyrovn\u00e1va\u010d z\u00e1t\u011b\u017ee NGINX.<\/p>\n<h4>Krok 6 \u2013 instalujeme vyrovn\u00e1va\u010d z\u00e1t\u011b\u017ee<\/h4>\n<p>\nMinikube m\u00e1 \u0159adu platformov\u00fdch funkc\u00ed, kter\u00e9 usnad\u0148uj\u00ed vytv\u00e1\u0159en\u00ed pot\u0159ebn\u00fdch komponent\u016f pro p\u0159\u00edstup z venku, jako jsou ingress kontrol\u00e9ry. Minikube p\u0159ich\u00e1z\u00ed s ingress kontrol\u00e9rem Nginx a my ho te\u010f jen mus\u00edme zapnout a nakonfigurovat.<\/p>\n<pre><code class=\"plaintext\">minikube addons enable ingress\n<\/code><\/pre>\n<p>\nNyn\u00ed jedn\u00edm p\u0159\u00edkazem vytvo\u0159\u00edme ingress kontrol\u00e9r Nginx, kter\u00fd bude fungovat uvnit\u0159 na\u0161eho clusteru 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>\nNyn\u00ed mus\u00edme nakonfigurovat ingress kontrol\u00e9r Nginx, aby zpracov\u00e1val po\u017eadavky na hello-quarkus.<\/p>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" src=\"\/wp-content\/uploads\/2020\/10\/18183cb985436447cf15c501e4c6c3a3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" src=\"\/wp-content\/uploads\/2020\/10\/577f1e6218094b5ee23052d49869e838.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>A nakonec mus\u00edme aplikovat tuto konfiguraci.<\/p>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" 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=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" src=\"\/wp-content\/uploads\/2020\/10\/68fba4ef3d2762a97dc5be5de9e6b864.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Proto\u017ee to v\u0161echno d\u011bl\u00e1me na sv\u00e9m po\u010d\u00edta\u010di, jednodu\u0161e p\u0159id\u00e1me IP adresu sv\u00e9ho uzlu do souboru \/etc\/hosts, abychom sm\u011brovali http po\u017eadavky na n\u00e1\u0161 minikube na vyrovn\u00e1va\u010d z\u00e1t\u011b\u017ee NGINX.<\/p>\n<pre><code class=\"plaintext\">192.168.99.100 hello-quarkus.info\n<\/code><\/pre>\n<p>\nHotovo, nyn\u00ed je na\u0161e slu\u017eba minikube dostupn\u00e1 zvenku p\u0159es ingress kontrol\u00e9r Nginx.<\/p>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" src=\"\/wp-content\/uploads\/2020\/10\/a456f34d168d43e9236e4769722b7f5d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>No co, bylo to snadn\u00e9, \u017ee? Nebo ne tak \u00fapln\u011b?<\/h3>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" src=\"\/wp-content\/uploads\/2020\/10\/237015dc06bb9d12eb4cd2944dc6df58.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Nasazen\u00ed na OpenShift (Code Ready Containers)<\/h3>\n<p>\nA te\u010f se pod\u00edv\u00e1me, jak to v\u0161echno funguje na Red Hat OpenShift Container Platform (OCP).<\/p>\n<p>Jak v p\u0159\u00edpad\u011b minikube, vyb\u00edr\u00e1me sch\u00e9ma s jednouzlov\u00fdm clusterem OpenShift ve form\u011b Code Ready Containers (CRC). D\u0159\u00edve se to naz\u00fdvalo minishift a vych\u00e1zelo z projektu OpenShift Origin, nyn\u00ed je to CRC a postaveno na OpenShift Container Platform od Red Hat.<\/p>\n<p>Tady se, promi\u0148te, nem\u016f\u017eeme zdr\u017eet a ne\u0159\u00edct: \"OpenShift je skv\u011bl\u00fd!\"<\/p>\n<p>P\u016fvodn\u011b jsme cht\u011bli napsat, \u017ee v\u00fdvoj na OpenShift se ni\u010d\u00edm neli\u0161\u00ed od v\u00fdvoje na Kubernetes. A v podstat\u011b to tak je. Ale b\u011bhem psan\u00ed tohoto p\u0159\u00edsp\u011bvku jsme si vzpomn\u011bli, kolik zbyte\u010dn\u00fdch krok\u016f je t\u0159eba ud\u011blat, kdy\u017e nem\u00e1te OpenShift, a proto jsme, opakujeme, jeho fanou\u0161ci. Milujeme, kdy\u017e se v\u0161echno d\u011bl\u00e1 snadno, a to, jak snadno se n\u00e1\u0161 p\u0159\u00edklad nasazuje a spou\u0161t\u00ed na OpenShift ve srovn\u00e1n\u00ed s minikube, n\u00e1s vlastn\u011b k naps\u00e1n\u00ed tohoto p\u0159\u00edsp\u011bvku podn\u00edtilo.<\/p>\n<p>Poj\u010fme proj\u00edt procesem a pod\u00edvat se, co v\u0161echno budeme muset ud\u011blat.<\/p>\n<p>Tak\u017ee v p\u0159\u00edkladu s minikube jsme za\u010d\u00ednali s Dockerem\u2026 Po\u010dkejte, u\u017e nepot\u0159ebujeme, aby byl na stroji nainstalov\u00e1n Docker.<\/p>\n<p><b>A lok\u00e1ln\u00ed git u\u017e nepot\u0159ebujeme.<br \/>\nA Maven nen\u00ed pot\u0159eba.<br \/>\nA nen\u00ed pot\u0159eba ru\u010dn\u011b vytv\u00e1\u0159et kontejnerov\u00fd obraz.<br \/>\nA nen\u00ed pot\u0159eba hledat \u017e\u00e1dn\u00fd repozit\u00e1\u0159 kontejnerov\u00fdch obraz\u016f.<br \/>\nA nen\u00ed pot\u0159eba instalovat ingress kontroler.<br \/>\nA konfigurace ingressu tak\u00e9 nen\u00ed nutn\u00e1.<\/b><\/p>\n<p>Rozum\u00edte, \u017ee? Abychom nasadili a spustili na\u0161i aplikaci na OpenShift, nepot\u0159ebujeme nic z v\u00fd\u0161e uveden\u00e9ho. A samotn\u00fd proces vypad\u00e1 takto.<\/p>\n<h4>Krok 1 \u2013 Spust\u00edme sv\u016fj OpenShift klastr<\/h4>\n<p>\nPou\u017e\u00edv\u00e1me Code Ready Containers od Red Hat, co\u017e je v podstat\u011b stejn\u00e9 jako Minikube, ale pouze s plnohodnotn\u00fdm jednom uzlov\u00fdm klastry Openshift.<\/p>\n<pre><code class=\"plaintext\">crc start\n<\/code><\/pre>\n<p><\/p>\n<h4>Krok 2 \u2013 Prov\u00e1d\u00edme sestaven\u00ed a nasazen\u00ed aplikace do klastru OpenShift<\/h4>\n<p>\nPr\u00e1v\u011b v tomto kroku se projevuje jednoduchost a pohodl\u00ed OpenShift v pln\u00e9 kr\u00e1se. Stejn\u011b jako u v\u0161ech distribuc\u00ed Kubernetes m\u00e1me mnoho zp\u016fsob\u016f, jak spustit aplikaci v klastru. A stejn\u011b jako u K8S si vol\u00edme ten nejjednodu\u0161\u0161\u00ed.<\/p>\n<p>OpenShift byl v\u017edy vybudov\u00e1n jako platforma pro vytv\u00e1\u0159en\u00ed a spu\u0161t\u011bn\u00ed kontejnerov\u00fdch aplikac\u00ed. Sestaven\u00ed kontejner\u016f bylo v\u017edy ned\u00edlnou sou\u010d\u00e1st\u00ed t\u00e9to platformy, a proto zde m\u00e1me spoustu dal\u0161\u00edch Kubernetes zdroj\u016f pro odpov\u00eddaj\u00edc\u00ed \u00fakoly.<\/p>\n<p>Budeme pou\u017e\u00edvat proces Source-to-Image (S2I) od OpenShift, kter\u00fd m\u00e1 n\u011bkolik r\u016fzn\u00fdch zp\u016fsob\u016f, jak vz\u00edt n\u00e1\u0161 zdroj (k\u00f3d nebo bin\u00e1rn\u00ed soubory) a p\u0159ev\u00e9st ho na kontejnerov\u00fd obraz spustiteln\u00fd v klastru OpenShift.<\/p>\n<p>K tomu budeme pot\u0159ebovat dv\u011b v\u011bci:<\/p>\n<ul>\n<li>N\u00e1\u0161 zdrojov\u00fd k\u00f3d v git repozit\u00e1\u0159i<\/li>\n<li>Builder obraz, na jeho\u017e z\u00e1klad\u011b prob\u011bhne sestaven\u00ed.<\/li>\n<\/ul>\n<p>\nExistuje mnoho takov\u00fdch obraz\u016f, spravovan\u00fdch jak silami Red Hat, tak na \u00farovni komunity, a vyu\u017eijeme obraz OpenJDK, proto\u017ee v\u0161ak sestavuji Java aplikaci.<\/p>\n<p>Spustit S2I sestaven\u00ed m\u016f\u017eeme jak z grafick\u00e9 konzole OpenShift Developer, tak z p\u0159\u00edkazov\u00e9ho \u0159\u00e1dku. Pou\u017eijeme p\u0159\u00edkaz new-app, kter\u00e9mu uvedeme, odkud br\u00e1t builder obraz a n\u00e1\u0161 zdrojov\u00fd k\u00f3d.<\/p>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" 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\u0161e aplikace je vytvo\u0159ena. P\u0159itom proces S2I vykonal n\u00e1sleduj\u00edc\u00ed v\u011bci:<\/p>\n<ul>\n<li>Vytvo\u0159il slu\u017eebn\u00ed build-pod pro v\u0161e, co souvis\u00ed se sestaven\u00edm aplikace.<\/li>\n<li>Vytvo\u0159il konfiguraci OpenShift Build.<\/li>\n<li>St\u00e1hl builder obraz do vnit\u0159n\u00edho docker registru OpenShift.<\/li>\n<li>Odkop\u00edroval \u201eHello World\u201c do m\u00edstn\u00edho repozit\u00e1\u0159e.<\/li>\n<li>Vid\u011bl jsem, \u017ee tam je maven pom, a proto jsem aplikaci zkompiloval pomoc\u00ed maven.<\/li>\n<li>Vytvo\u0159il jsem nov\u00fd kontejnerov\u00fd obraz obsahuj\u00edc\u00ed zkompilovanou Java aplikaci a dal tento obraz do intern\u00edho registru kontejner\u016f.<\/li>\n<li>Vytvo\u0159il jsem Kubernetes Deployment se specifikacemi podu, slu\u017eby atd.<\/li>\n<li>Spustil jsem nasazen\u00ed kontejnerov\u00e9ho obrazu.<\/li>\n<li>Smazal jsem pomocn\u00fd build-pod.<\/li>\n<\/ul>\n<p>\nNa tomto seznamu je mnoho polo\u017eek, ale hlavn\u00ed je, \u017ee cel\u00e1 sestava prob\u00edh\u00e1 v\u00fdhradn\u011b uvnit\u0159 OpenShiftu, intern\u00ed Docker registr se nach\u00e1z\u00ed uvnit\u0159 OpenShiftu, a proces sestaven\u00ed vytv\u00e1\u0159\u00ed v\u0161echny komponenty Kubernetes a spou\u0161t\u00ed je v clusteru.<\/p>\n<p>Pokud vizu\u00e1ln\u011b sledujete spu\u0161t\u011bn\u00ed S2I v konzoli, m\u016f\u017eete vid\u011bt, jak se p\u0159i sestaven\u00ed spou\u0161t\u00ed build pod.<\/p>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" src=\"\/wp-content\/uploads\/2020\/10\/bd69c6e27813b1211a11e522f28f45b7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>A te\u010f se pod\u00edvejme na logy builder podu: za prv\u00e9, je tam vid\u011bt, jak maven d\u011bl\u00e1 svou pr\u00e1ci a stahuje z\u00e1vislosti pro sestaven\u00ed na\u0161\u00ed java aplikace.<\/p>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" src=\"\/wp-content\/uploads\/2020\/10\/326192f9f9373e451d601b77052d67d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Po dokon\u010den\u00ed maven sestaven\u00ed se spust\u00ed sestaven\u00ed kontejnerov\u00e9ho obrazu a pot\u00e9 se tento zkompilovan\u00fd obraz ode\u0161le do intern\u00edho repozit\u00e1\u0159e.<\/p>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" src=\"\/wp-content\/uploads\/2020\/10\/c97da4c17a8e275d39104126d0f87048.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Hotovo, proces sestaven\u00ed je dokon\u010den. Te\u010f se ujist\u00edme, \u017ee v clusteru byly spu\u0161t\u011bny pody a slu\u017eby na\u0161\u00ed aplikace.<\/p>\n<pre><code class=\"plaintext\">oc get service\n<\/code><\/pre>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" src=\"\/wp-content\/uploads\/2020\/10\/f16a098a096128073f305e0444061417.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>A to je v\u0161e. A pouze jeden p\u0159\u00edkaz. Zb\u00fdv\u00e1 n\u00e1m jen vystavit tuto slu\u017ebu pro p\u0159\u00edstup zven\u010d\u00ed.<\/p>\n<h4>Krok 3 \u2013 vystavujeme slu\u017ebu pro p\u0159\u00edstup zven\u010d\u00ed<\/h4>\n<p>\nStejn\u011b jako v p\u0159\u00edpad\u011b KUB, na platform\u011b OpenShift pot\u0159ebuje n\u00e1\u0161 \"Hello World\" tak\u00e9 router, aby sm\u011broval extern\u00ed provoz na slu\u017ebu uvnit\u0159 clustru. V OpenShift to funguje velmi jednodu\u0161e. Za prv\u00e9, v clusteru je ve v\u00fdchoz\u00edm nastaven\u00ed nainstalov\u00e1na sou\u010d\u00e1st pro sm\u011brov\u00e1n\u00ed HAProxy (tu m\u016f\u017eete vym\u011bnit za NGINX). Za druh\u00e9, existuj\u00ed zde speci\u00e1ln\u00ed a variabiln\u00ed zdroje, kter\u00fdm se \u0159\u00edk\u00e1 Routes a p\u0159ipom\u00ednaj\u00ed Ingress objekty ve star\u00e9m dobr\u00e9m Kubernetes (ve skute\u010dnosti OpenShiftov\u00e9 Routes siln\u011b ovlivnily design Ingress objekt\u016f, kter\u00e9 nyn\u00ed lze pou\u017e\u00edvat i v OpenShiftu), ale pro n\u00e1\u0161 \"Hello World\", a vlastn\u011b v t\u00e9m\u011b\u0159 v\u0161ech ostatn\u00edch p\u0159\u00edpadech, sta\u010d\u00ed standardn\u00ed Route bez dal\u0161\u00edho nastaven\u00ed.<\/p>\n<p>Abychom vytvo\u0159ili pro \"Hello World\" sm\u011brovateln\u00fd FQDN (ano, v OpenShiftu je sv\u016fj DNS pro sm\u011brov\u00e1n\u00ed podle n\u00e1zv\u016f slu\u017eeb), jednodu\u0161e provedeme expose pro na\u0161i slu\u017ebu:<\/p>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" 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>\nPokud se pod\u00edv\u00e1te na pr\u00e1v\u011b vytvo\u0159enou Route, najdete tam FQDN a dal\u0161\u00ed informace o sm\u011brov\u00e1n\u00ed:<\/p>\n<pre><code class=\"plaintext\">oc get route\n<\/code><\/pre>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" src=\"\/wp-content\/uploads\/2020\/10\/dc59c36166605ef0a5a24b2b7ffa65b6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>A nakonec se obrac\u00edme na na\u0161i slu\u017ebu z prohl\u00ed\u017ee\u010de:<\/p>\n<p><img decoding=\"async\" alt=\"Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme si t\u011b v\u00e1\u017eili a brali jsme t\u011b jako samoz\u0159ejmost.\" src=\"\/wp-content\/uploads\/2020\/10\/fccf6cae1746fa59df2ff8ffb6973666.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>A te\u010f to bylo opravdu snadn\u00e9!<\/h3>\n<p>\nMilujeme Kubernetes a v\u0161e, co tato technologie umo\u017e\u0148uje, a tak\u00e9 m\u00e1me r\u00e1di jednoduchost a snadnost. Kubernetes byl navr\u017een tak, aby neuv\u011b\u0159iteln\u011b zjednodu\u0161il provoz distribuovan\u00fdch \u0161k\u00e1lovateln\u00fdch kontejner\u016f, ale pro uveden\u00ed aplikac\u00ed do provozu u\u017e dnes jeho jednoduchosti nen\u00ed dost. A zde p\u0159ich\u00e1z\u00ed na sc\u00e9nu OpenShift, kter\u00fd jde s dobou a nab\u00edz\u00ed Kubernetes zam\u011b\u0159en\u00fd p\u0159edev\u0161\u00edm na v\u00fdvoj\u00e1\u0159e. Bylo vlo\u017eeno mnoho \u00fasil\u00ed do p\u0159izp\u016fsoben\u00ed platformy OpenShift pr\u00e1v\u011b pro v\u00fdvoj\u00e1\u0159e, v\u010detn\u011b vytvo\u0159en\u00ed takov\u00fdch n\u00e1stroj\u016f jako S2I, ODI, Developer Portal, OpenShift Operator Framework, integrace s IDE, Developer Catalogues, integrace s Helm, monitorov\u00e1n\u00ed a mnoh\u00e9 dal\u0161\u00ed.<\/p>\n<p>Douf\u00e1me, \u017ee tento \u010dl\u00e1nek byl pro v\u00e1s zaj\u00edmav\u00fd a u\u017eite\u010dn\u00fd. Dal\u0161\u00ed zdroje, materi\u00e1ly a dal\u0161\u00ed u\u017eite\u010dn\u00e9 v\u011bci pro v\u00fdvoj na platform\u011b OpenShift naleznete na port\u00e1lu <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\/cs\/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=\"cs_CZ\" \/>\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\/cs\/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\udd47Omlouv\u00e1me se, OpenShift, nedostate\u010dn\u011b jsme t\u011b ocenili a brali jsme t\u011b jako samoz\u0159ejmost | ProHoster","description":"Tento p\u0159\u00edsp\u011bvek byl naps\u00e1n, proto\u017ee jsme m\u011bli s na\u0161imi klienty \u0159adu rozhovor\u016f o v\u00fdvoji aplikac\u00ed na Kubernetes a specifik\u00e1ch tohoto v\u00fdvoje na OpenShift.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\/cs\/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\/cs\/wp-json\/wp\/v2\/posts\/97254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=97254"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/97254\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/97255"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=97254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=97254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=97254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}