{"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\/sv\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe","title":{"rendered":"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Detta inl\u00e4gg \u00e4r skrivet eftersom v\u00e5ra medarbetare har haft m\u00e5nga samtal med kunder om applikationsutveckling p\u00e5 Kubernetes och om specifika aspekter av s\u00e5dan utveckling p\u00e5 OpenShift.<\/p>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" src=\"\/wp-content\/uploads\/2020\/10\/ad447aeb80d3ae56ea4598cd959456de.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVi b\u00f6rjar vanligtvis med tesen att Kubernetes \u00e4r bara Kubernetes, medan OpenShift \u00e4r en Kubernetes-plattform, likt Microsoft AKS eller Amazon EKS. Varje plattform har sina egna f\u00f6rdelar som \u00e4r riktade mot olika m\u00e5lgrupper. Efter det \u00f6verg\u00e5r samtalet ofta till att j\u00e4mf\u00f6ra styrkor och svagheter hos specifika plattformar.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nVi t\u00e4nkte faktiskt skriva detta inl\u00e4gg med slutsatsen \"Lyssna, det spelar ingen roll var du k\u00f6r din kod, p\u00e5 OpenShift eller AKS, EKS, p\u00e5 n\u00e5gon anpassad Kubernetes, ja vilket som helst-Kubernetes <i>(f\u00f6r kort kallar vi det KUK)<\/i> \u2013 det \u00e4r verkligen bara enkelt, b\u00e5de h\u00e4r och d\u00e4r.\"<\/p>\n<p>Sedan planerade vi att ta ett enkelt \"Hello World\" och visa, med hj\u00e4lp av det exemplet, vad som \u00e4r gemensamt och vad som skiljer KUK fr\u00e5n Red Hat OpenShift Container Platform (nedan kallad OCP eller bara OpenShift).<\/p>\n<p>Men medan vi skrev detta inl\u00e4gg ins\u00e5g vi att vi har blivit s\u00e5 vana vid att anv\u00e4nda OpenShift att vi inte ens inser hur mycket det har vuxit och f\u00f6rvandlats till en fantastisk plattform som \u00e4r mycket mer \u00e4n bara en Kubernetes-distribution. Vi har kommit att ta OpenShifts mognad och enkelhet f\u00f6r givet, och missat dess storhet.<\/p>\n<p>I allm\u00e4nhet \u00e4r det dags f\u00f6r aktiv \u00e5nger, och nu kommer vi steg f\u00f6r steg att j\u00e4mf\u00f6ra implementeringen av v\u00e5rt \"Hello World\" p\u00e5 KUK och OpenShift, och g\u00f6ra det s\u00e5 objektivt som m\u00f6jligt (\u00e4ven om vi ibland uttrycker v\u00e5r personliga \u00e5sikt om \u00e4mnet). Om du \u00e4r intresserad av en rent subjektiv \u00e5sikt om detta \u00e4mne, kan du l\u00e4sa den <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/swlh\/im-so-sorry-openshift-i-ve-taken-you-for-granted-f36fb47ea4d9\">h\u00e4r (EN)<\/a><\/noindex>. I detta inl\u00e4gg kommer vi att h\u00e5lla oss till fakta och endast fakta.<\/p>\n<h3>Kluster<\/h3>\n<p>\nS\u00e5, f\u00f6r v\u00e5rt \"Hello World\" beh\u00f6ver vi kluster. L\u00e5t oss genast s\u00e4ga \"nej\" till alla offentliga moln f\u00f6r att slippa betala f\u00f6r servrar, register, n\u00e4tverk, data\u00f6verf\u00f6ring osv. D\u00e4rf\u00f6r v\u00e4ljer vi ett enkelt enkelnods-kluster p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/minikube.sigs.k8s.io\/docs\/start\/\">Minikube<\/a><\/noindex> (f\u00f6r KUK) och <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/products\/codeready-containers\/overview\">Code Ready Containers<\/a><\/noindex> (f\u00f6r OpenShift-klustret). B\u00e5da dessa alternativ \u00e4r verkligen enkla att installera, men de kommer att kr\u00e4va ganska mycket resurser p\u00e5 din laptop.<\/p>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" src=\"\/wp-content\/uploads\/2020\/10\/01c748365253fc9e11e817876629ae7e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Byggning p\u00e5 KUK<\/h3>\n<p>\nS\u00e5, l\u00e5t oss k\u00f6ra ig\u00e5ng.<\/p>\n<h4>Steg 1 \u2013 vi bygger v\u00e5r containerbild<\/h4>\n<p>\nJag b\u00f6rjar med att deploya v\u00e5rt \"Hello World\" p\u00e5 minikube. F\u00f6r detta beh\u00f6ver vi:<\/p>\n<ol>\n<li>1. Installerad Docker.<\/li>\n<li>2. Installerad Git.<\/li>\n<li>3. Installerad Maven (faktiskt anv\u00e4nds mvnw-bin\u00e4rfilen i detta projekt, s\u00e5 det g\u00e5r bra utan det).<\/li>\n<li>4. Sj\u00e4lva k\u00e4llan, det vill s\u00e4ga klonen av f\u00f6rr\u00e5det <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/gcolman\/quarkus-hello-world.git\">github.com\/gcolman\/quarkus-hello-world.git<\/a><\/noindex><\/li>\n<\/ol>\n<p>\nF\u00f6rst m\u00e5ste vi skapa ett Quarkus-projekt. Oroa dig inte om du aldrig har arbetat med sidan Quarkus.io \u2013 det \u00e4r enkelt. V\u00e4lj bara de komponenter du vill anv\u00e4nda i projektet (RestEasy, Hibernate, Amazon SQS, Camel etc.), och Quarkus konfigurerar automatiskt Maven-archetypen och l\u00e4gger allt p\u00e5 GitHub. Det vill s\u00e4ga, bokstavligen ett musklick \u2013 och klart. Det \u00e4r d\u00e4rf\u00f6r vi \u00e4lskar Quarkus.<\/p>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" src=\"\/wp-content\/uploads\/2020\/10\/39a62058d91f8443e77466d374d02d34.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Det enklaste s\u00e4ttet att bygga v\u00e5r \"Hello World\" i en containerbild \u00e4r att anv\u00e4nda quarkus-maven-till\u00e4gget f\u00f6r Docker, som utf\u00f6r allt n\u00f6dv\u00e4ndigt arbete. Med Quarkus har det blivit riktigt enkelt: l\u00e4gg till till\u00e4gget container-image-docker och du kan skapa bilder med Maven-kommandon.<\/p>\n<pre><code class=\"plaintext\">.\/mvnw quarkus:add-extension -Dextensions=\"container-image-docker\"\n<\/code><\/pre>\n<p>\nOch slutligen, k\u00f6r vi bygget av v\u00e5r bild med hj\u00e4lp av Maven. Resultatet blir att v\u00e5r k\u00e4llkod omvandlas till en f\u00e4rdig containerbild, som vi redan kan k\u00f6ra i en container exekveringsmilj\u00f6.<\/p>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" 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>\nOch s\u00e5 \u00e4r det klart, nu kan vi k\u00f6ra containern med kommandot docker run, och mappa v\u00e5r tj\u00e4nst till port 8080 s\u00e5 att vi kan n\u00e5 den.<\/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=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" src=\"\/wp-content\/uploads\/2020\/10\/4f46e13423d5027d85ebae2c98c926b8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>N\u00e4r containerinstansen har startat, beh\u00f6ver vi bara kontrollera med kommandot curl att v\u00e5r tj\u00e4nst fungerar:<\/p>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" src=\"\/wp-content\/uploads\/2020\/10\/1c1462f52d6a487863c21f8f72a09d1f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>S\u00e5, allt fungerar, och det var faktiskt riktigt enkelt.<\/p>\n<h4>Steg 2 \u2013 skicka v\u00e5r container till en containerbildrepo<\/h4>\n<p>\nHit tills lagras den bild vi skapade lokalt i v\u00e5rt lokala containerlager. Om vi vill anv\u00e4nda denna bild i v\u00e5r K8s-milj\u00f6, beh\u00f6ver vi l\u00e4gga den i ett annat f\u00f6rr\u00e5d. Kubernetes har inte s\u00e5dana funktioner, s\u00e5 vi kommer att anv\u00e4nda dockerhub. F\u00f6r det f\u00f6rsta \u00e4r det gratis, och f\u00f6r det andra g\u00f6r (n\u00e4stan) alla s\u00e5.<\/p>\n<p>Det \u00e4r ocks\u00e5 mycket enkelt, och det kr\u00e4vs bara ett konto p\u00e5 dockerhub.<\/p>\n<p>S\u00e5, vi skapar ett konto p\u00e5 dockerhub och skickar dit v\u00e5r bild.<\/p>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" src=\"\/wp-content\/uploads\/2020\/10\/fb5d81ee15ca7594277c5a05da298fbd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>Steg 3 \u2013 starta Kubernetes<\/h4>\n<p>\nDet finns m\u00e5nga s\u00e4tt att s\u00e4tta ihop en Kubernetes-konfiguration f\u00f6r att k\u00f6ra v\u00e5r \"Hello World\", men vi kommer att anv\u00e4nda det enklaste s\u00e4ttet, s\u00e5 vi \u00e4r.<\/p>\n<p>F\u00f6rst k\u00f6r vi minikube-klustret:<\/p>\n<pre><code class=\"plaintext\">minikube start\n<\/code><\/pre>\n<p><\/p>\n<h4>Steg 4 \u2013 vi distribuerar v\u00e5r containeravbildning<\/h4>\n<p>\nNu m\u00e5ste vi omvandla v\u00e5r kod och containeravbildning till Kubernetes-konfigurationer. Med andra ord, vi beh\u00f6ver en pod- och deploymentsdefinition som pekar p\u00e5 v\u00e5r containeravbildning p\u00e5 Docker Hub. Ett av de enklaste s\u00e4tten att g\u00f6ra detta \u00e4r att k\u00f6ra kommandot create deployment och ange v\u00e5r avbildning:<\/p>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" 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>\nGenom detta kommando bad vi v\u00e5r KUB att skapa en deploymentskonfiguration, som ska inneh\u00e5lla specifikationen f\u00f6r en pod f\u00f6r v\u00e5r containeravbildning. Detta kommando kommer ocks\u00e5 att till\u00e4mpa denna konfiguration p\u00e5 v\u00e5r minikube-kluster och skapa en deployment som laddar ner v\u00e5r containeravbildning och startar en pod i klustret.<\/p>\n<h4>Steg 5 \u2013 vi \u00f6ppnar tillg\u00e5ng till v\u00e5r tj\u00e4nst<\/h4>\n<p>\nNu n\u00e4r vi har distribuerat v\u00e5r containeravbildning \u00e4r det dags att t\u00e4nka p\u00e5 hur vi konfigurerar extern \u00e5tkomst till denna Restful-tj\u00e4nst, som faktiskt programmerades i v\u00e5r kod.<\/p>\n<p>Det finns m\u00e5nga s\u00e4tt att g\u00f6ra detta. Till exempel kan vi anv\u00e4nda kommandot expose f\u00f6r att automatiskt skapa motsvarande Kubernetes-komponenter, s\u00e5som services och endpoints. Det \u00e4r precis vad vi kommer att g\u00f6ra genom att k\u00f6ra expose-kommandot f\u00f6r v\u00e5r deploymentsobjekt:<\/p>\n<pre><code class=\"plaintext\">kubectl expose deployment hello-quarkus --type=NodePort --port=8080\n<\/code><\/pre>\n<p>\nL\u00e5t oss stanna upp en minut vid alternativet \"--type\" i expose-kommandot.<\/p>\n<p>N\u00e4r vi g\u00f6r expose och skapar komponenterna som beh\u00f6vs f\u00f6r att k\u00f6ra v\u00e5r tj\u00e4nst, beh\u00f6ver vi bland annat att kunna ansluta till tj\u00e4nsten hello-quarkus, som sitter inuti v\u00e5rt programvarudefinierade n\u00e4tverk. Och parametern <b>typ<\/b> l\u00e5ter oss skapa och koppla s\u00e5dana saker som belastningsbalanserare f\u00f6r att dirigera trafik till detta n\u00e4tverk.<\/p>\n<p>Till exempel, genom att skriva <b>--type=LoadBalancer<\/b>, initierar vi automatiskt en belastningsbalanserare i den offentliga molnmilj\u00f6n f\u00f6r att kunna ansluta till v\u00e5rt Kubernetes-kluster. Detta \u00e4r naturligtvis fantastiskt, men man m\u00e5ste f\u00f6rst\u00e5 att en s\u00e5dan konfiguration kommer att vara strikt kopplad till ett specifikt offentligt moln och det blir sv\u00e5rare att flytta mellan Kubernetes-instanser i olika milj\u00f6er.<\/p>\n<p>I v\u00e5rt exempel <b>--type=NodePort<\/b>, det vill s\u00e4ga att \u00e5tkomsten till v\u00e5r tj\u00e4nst sker via nodens IP-adress och portnummer. Denna l\u00f6sning kr\u00e4ver inga offentliga moln, men inneb\u00e4r ett antal ytterligare steg. F\u00f6r det f\u00f6rsta beh\u00f6vs en egen lastbalanserare, s\u00e5 vi kommer att s\u00e4tta upp en lastbalanserare NGINX i v\u00e5rt kluster.<\/p>\n<h4>Steg 6 \u2013 installera lastbalanseraren<\/h4>\n<p>\nMinikube har ett antal plattformsfunktioner som underl\u00e4ttar skapandet av n\u00f6dv\u00e4ndiga komponenter f\u00f6r extern \u00e5tkomst, s\u00e5som ingress-kontroller. Minikube levereras med ingress-kontrollern Nginx, och vi beh\u00f6ver bara aktivera och konfigurera den.<\/p>\n<pre><code class=\"plaintext\">minikube addons enable ingress\n<\/code><\/pre>\n<p>\nNu skapar vi med ett enda kommando ingress-kontrollern Nginx, som kommer att arbeta inuti v\u00e5rt minikube-kluster:<\/p>\n<pre><code class=\"plaintext\">ingress-nginx-controller-69ccf5d9d8-j5gs9 1\/1 Running 1 33m\n<\/code><\/pre>\n<p><\/p>\n<h4>Steg 7 \u2013 Konfigurera ingress<\/h4>\n<p>\nNu m\u00e5ste vi konfigurera ingress-kontrollern Nginx f\u00f6r att den ska kunna ta emot f\u00f6rfr\u00e5gningar fr\u00e5n hello-quarkus.<\/p>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" src=\"\/wp-content\/uploads\/2020\/10\/18183cb985436447cf15c501e4c6c3a3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" src=\"\/wp-content\/uploads\/2020\/10\/577f1e6218094b5ee23052d49869e838.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Och till sist, vi beh\u00f6ver till\u00e4mpa denna konfiguration.<\/p>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" 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=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" src=\"\/wp-content\/uploads\/2020\/10\/68fba4ef3d2762a97dc5be5de9e6b864.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Eftersom vi g\u00f6r allt detta p\u00e5 v\u00e5r dator, l\u00e4gger vi bara till IP-adressen till v\u00e5r nod i filen \/etc\/hosts f\u00f6r att dirigera http-f\u00f6rfr\u00e5gningar till v\u00e5r minikube via lastbalanseraren NGINX.<\/p>\n<pre><code class=\"plaintext\">192.168.99.100 hello-quarkus.info\n<\/code><\/pre>\n<p>\nDet \u00e4r klart, nu \u00e4r v\u00e5r minikube-tj\u00e4nst tillg\u00e4nglig utanf\u00f6r via ingress-kontrollern Nginx.<\/p>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" src=\"\/wp-content\/uploads\/2020\/10\/a456f34d168d43e9236e4769722b7f5d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Tja, var det inte enkelt? Eller kanske inte s\u00e5 mycket?<\/h3>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" src=\"\/wp-content\/uploads\/2020\/10\/237015dc06bb9d12eb4cd2944dc6df58.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>K\u00f6rning p\u00e5 OpenShift (Code Ready Containers)<\/h3>\n<p>\nOch nu ska vi se hur allt g\u00f6rs p\u00e5 Red Hat OpenShift Container Platform (OCP).<\/p>\n<p>Som i minikube-fallet v\u00e4ljer vi en en-nods OpenShift-klusterl\u00f6sning i form av Code Ready Containers (CRC). Tidigare kallades detta minishift och baserades p\u00e5 OpenShift Origin-projektet, men nu \u00e4r det CRC och bygger p\u00e5 Red Hats OpenShift Container Platform.<\/p>\n<p>H\u00e4r kan vi inte l\u00e5ta bli att s\u00e4ga: \"OpenShift \u00e4r fantastiskt!\"<\/p>\n<p>Vi t\u00e4nkte fr\u00e5n b\u00f6rjan skriva att utvecklingen p\u00e5 OpenShift inte skiljer sig fr\u00e5n utvecklingen p\u00e5 Kubernetes. Och i grunden \u00e4r det sant. Men under skrivandet av detta inl\u00e4gg kom vi ih\u00e5g hur m\u00e5nga extra steg man m\u00e5ste ta utan OpenShift, och d\u00e4rf\u00f6r \u00e4r det, som sagt, fantastiskt. Vi \u00e4lskar n\u00e4r allt g\u00f6rs enkelt, och hur mycket enklare v\u00e5rt exempel distribueras och k\u00f6rs p\u00e5 OpenShift j\u00e4mf\u00f6rt med minikube var helt enkelt vad som motiverade oss att skriva detta inl\u00e4gg.<\/p>\n<p>L\u00e5t oss g\u00e5 igenom processen och se vad vi beh\u00f6ver g\u00f6ra.<\/p>\n<p>S\u00e5 i exemplet med minikube b\u00f6rjade vi med Docker... V\u00e4nta, vi beh\u00f6ver inte l\u00e4ngre ha Docker installerat p\u00e5 maskinen.<\/p>\n<p><b>Och lokal git beh\u00f6vs inte.<br \/>\nOch Maven beh\u00f6vs inte.<br \/>\nOch det beh\u00f6vs inte att manuellt skapa en containerbild.<br \/>\nOch det beh\u00f6vs inte att leta efter n\u00e5got containerbildsrepo.<br \/>\nOch det beh\u00f6vs inte att installera en ingress-controller.<br \/>\nOch det beh\u00f6vs inte att konfigurera ingress heller.<\/b><\/p>\n<p>F\u00f6rst\u00e5r du? F\u00f6r att drifts\u00e4tta och k\u00f6ra v\u00e5r applikation p\u00e5 OpenShift beh\u00f6ver vi inte n\u00e5got av det ovanst\u00e5ende. Och sj\u00e4lva processen ser ut p\u00e5 f\u00f6ljande s\u00e4tt.<\/p>\n<h4>Steg 1 \u2013 Starta din OpenShift-kluster.<\/h4>\n<p>\nVi anv\u00e4nder Code Ready Containers fr\u00e5n Red Hat, som i princip \u00e4r samma som Minikube, men med en fullt fungerande en-nod-klyngstruktur f\u00f6r Openshift.<\/p>\n<pre><code class=\"plaintext\">crc start\n<\/code><\/pre>\n<p><\/p>\n<h4>Steg 2 \u2013 Bygg och drifts\u00e4tt applikationen i OpenShift-klustret.<\/h4>\n<p>\nJust h\u00e4r visa OpenShifts enkelhet och anv\u00e4ndarv\u00e4nlighet sig i sin fulla prakt. Som i alla Kubernetes-distributioner har vi m\u00e5nga s\u00e4tt att starta en applikation i klustret. Och precis som i fallet med K8s v\u00e4ljer vi medvetet det allra enklaste alternativet.<\/p>\n<p>OpenShift har alltid byggts som en plattform f\u00f6r att skapa och k\u00f6ra containerapplikationer. Byggandet av containrar har alltid varit en integrerad del av denna plattform, s\u00e5 h\u00e4r finns det massor av ytterligare Kubernetes-resurser f\u00f6r relevanta uppgifter.<\/p>\n<p>Vi kommer att anv\u00e4nda OpenShift:s Source 2 Image (S2I) process, som har flera olika s\u00e4tt att ta v\u00e5r k\u00e4llkod (kod eller bin\u00e4ra filer) och omvandla den till en containerbild som k\u00f6rs i OpenShift-klustret.<\/p>\n<p>F\u00f6r detta beh\u00f6ver vi tv\u00e5 saker:<\/p>\n<ul>\n<li>V\u00e5r k\u00e4llkod i en git-repo<\/li>\n<li>Builder-bild som byggprocessen kommer att baseras p\u00e5.<\/li>\n<\/ul>\n<p>\nDet finns m\u00e5nga s\u00e5dana bilder, b\u00e5de st\u00f6djade av Red Hat och p\u00e5 samh\u00e4llsniv\u00e5, och vi kommer att anv\u00e4nda bilden OpenJDK, eftersom jag bygger en Java-applikation.<\/p>\n<p>S2I-byggandet kan startas b\u00e5de fr\u00e5n OpenShift Developer-grafikkonsolen och fr\u00e5n kommandoraden. Vi kommer att anv\u00e4nda kommandot new-app, d\u00e4r vi anger var vi ska h\u00e4mta builder-bilden och v\u00e5r k\u00e4llkod.<\/p>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" src=\"\/wp-content\/uploads\/2020\/10\/64b8091c6857999c94dd907ad12fa9ae.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<pre><code class=\"plaintext\">oc new-app registry.access.redhat.com\/ubi8\/openjdk-11:latest~https:\/\/github.com\/gcolman\/quarkus-hello-world.git\n<\/code><\/pre>\n<p>\nDet \u00e4r klart, v\u00e5r applikation \u00e4r skapad. Dessutom genomf\u00f6rde S2I-processen f\u00f6ljande saker:<\/p>\n<ul>\n<li>Skapade en service-build-pod f\u00f6r olika bygg-relaterade saker.<\/li>\n<li>Skapade en OpenShift Build-konfiguration.<\/li>\n<li>Laddade ner builder-bilden till OpenShifts interna docker-register.<\/li>\n<li>Klonade 'Hello World' till det lokala registret.<\/li>\n<li>Jag s\u00e5g att det fanns en maven pom, s\u00e5 jag kompilerade applikationen med hj\u00e4lp av maven.<\/li>\n<li>Jag skapade en ny containerbild som inneh\u00e5ller den kompilera Java-applikationen och lade denna bild i det interna containerregistret.<\/li>\n<li>Jag skapade en Kubernetes-deployment med specifikationer f\u00f6r pod, tj\u00e4nst, etc.<\/li>\n<li>Jag startade deployment av containerbilden.<\/li>\n<li>Jag tog bort den tempor\u00e4ra build-poden.<\/li>\n<\/ul>\n<p>\nDet finns mycket h\u00e4r, men det viktigaste \u00e4r att hela byggprocessen sker helt inom OpenShift, det interna Docker-registret ligger inom OpenShift, och byggprocessen skapar alla Kubernetes-komponenter och startar dem i klustret.<\/p>\n<p>Om man visuellt \u00f6vervakar starten av S2I i konsolen kan man se hur build-poden startar n\u00e4r byggprocessen k\u00f6rs.<\/p>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" src=\"\/wp-content\/uploads\/2020\/10\/bd69c6e27813b1211a11e522f28f45b7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Och nu l\u00e5t oss titta p\u00e5 loggarna f\u00f6r builder-poden: f\u00f6rst och fr\u00e4mst kan man se hur maven g\u00f6r sitt arbete och laddar ner beroenden f\u00f6r att bygga v\u00e5r java-applikation.<\/p>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" src=\"\/wp-content\/uploads\/2020\/10\/326192f9f9373e451d601b77052d67d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Efter att maven-bygget har avslutats startas byggandet av containerbilden och den f\u00e4rdiga bilden skickas till det interna arkivet.<\/p>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" src=\"\/wp-content\/uploads\/2020\/10\/c97da4c17a8e275d39104126d0f87048.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Processen f\u00f6r byggandet \u00e4r klar. Nu ska vi se till att poddar och tj\u00e4nster f\u00f6r v\u00e5r applikation har startat i klustret.<\/p>\n<pre><code class=\"plaintext\">oc get service\n<\/code><\/pre>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" src=\"\/wp-content\/uploads\/2020\/10\/f16a098a096128073f305e0444061417.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Och det \u00e4r allt. Och bara en kommandorad. Nu har vi bara att exponera denna tj\u00e4nst f\u00f6r \u00e5tkomst utifr\u00e5n.<\/p>\n<h4>Steg 3 \u2013 exponerar tj\u00e4nsten f\u00f6r \u00e5tkomst utifr\u00e5n<\/h4>\n<p>\nPrecis som med KUK, beh\u00f6ver v\u00e5r \"Hello World\"-applikation ocks\u00e5 en router p\u00e5 OpenShift f\u00f6r att styra extern trafik till tj\u00e4nsten inom klustret. OpenShift g\u00f6r detta mycket enkelt. F\u00f6r det f\u00f6rsta, i klustret finns en HAProxy-routingkomponent installerad som standard (den kan bytas ut mot NGINX). F\u00f6r det andra finns det speciella resurser som till\u00e5ter omfattande konfiguration, som kallas Routes och liknar Ingress-objekt i den gamla goda Kubernetes (faktiskt har OpenShifts Routes starkt p\u00e5verkat designen av Ingress-objekt som nu ocks\u00e5 kan anv\u00e4ndas i OpenShift), men f\u00f6r v\u00e5r \"Hello World\" och de flesta andra fallen r\u00e4cker det med standard Route utan ytterligare konfiguration.<\/p>\n<p>F\u00f6r att skapa en routad FQDN f\u00f6r \"Hello World\" (ja, OpenShift har sin egen DNS f\u00f6r routing via servicenamn) k\u00f6r vi helt enkelt expose f\u00f6r v\u00e5r tj\u00e4nst:<\/p>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" 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>\nOm vi kollar den just skapade Route kan vi hitta FQDN och annan information om routing:<\/p>\n<pre><code class=\"plaintext\">oc get route\n<\/code><\/pre>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" src=\"\/wp-content\/uploads\/2020\/10\/dc59c36166605ef0a5a24b2b7ffa65b6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Och till sist, vi g\u00e5r till v\u00e5r tj\u00e4nst via webbl\u00e4saren:<\/p>\n<p><img decoding=\"async\" alt=\"F\u00f6rl\u00e5t, OpenShift, vi v\u00e4rderade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given.\" src=\"\/wp-content\/uploads\/2020\/10\/fccf6cae1746fa59df2ff8ffb6973666.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Och nu var det verkligen enkelt!<\/h3>\n<p>\nVi \u00e4lskar Kubernetes och allt som denna teknik m\u00f6jligg\u00f6r, liksom vi \u00e4lskar enkelhet och smidighet. Kubernetes skapades f\u00f6r att drastiskt f\u00f6renkla driften av distribuerade skalbara beh\u00e5llare, men f\u00f6r att inf\u00f6ra applikationer \u00e4r denna enkelhet idag inte tillr\u00e4cklig. H\u00e4r kommer OpenShift in i bilden, som h\u00e5ller j\u00e4mna steg med tiden och erbjuder Kubernetes som fr\u00e4mst riktar sig till utvecklare. Mycket arbete har lagts ner f\u00f6r att skr\u00e4ddarsy OpenShift-plattformen specifikt f\u00f6r utvecklare, inklusive skapandet av verktyg som S2I, ODI, Developer Portal, OpenShift Operator Framework, integration med IDE, Developer Catalogues, integration med Helm, \u00f6vervakning och m\u00e5nga andra.<\/p>\n<p>Vi hoppas att denna artikel har varit intressant och anv\u00e4ndbar f\u00f6r dig. Du kan hitta ytterligare resurser, material och andra anv\u00e4ndbara saker f\u00f6r utveckling p\u00e5 OpenShift-plattformen p\u00e5 portalen <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/\">Red Hat Developers<\/a><\/noindex>.<br \/>\n<br \/>K\u00e4lla: <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.4 - 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\/sv\/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.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47F\u00f6rl\u00e5t, OpenShift, vi uppskattade dig inte tillr\u00e4ckligt och tog dig f\u00f6r given | ProHoster","description":"Detta inl\u00e4gg \u00e4r skrivet eftersom v\u00e5ra medarbetare har haft m\u00e5nga samtal med kunder om applikationsutveckling p\u00e5 Kubernetes och om specifika aspekter av s\u00e5dan utveckling p\u00e5 OpenShift.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/97254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=97254"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/97254\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/97255"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=97254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=97254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=97254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}