{"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\/de\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe","title":{"rendered":"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Dieser Beitrag wurde verfasst, weil wir viele Gespr\u00e4che mit unseren Kunden \u00fcber die Entwicklung von Anwendungen auf Kubernetes und \u00fcber die Besonderheiten dieser Entwicklung auf OpenShift gef\u00fchrt haben.<\/p>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" src=\"\/wp-content\/uploads\/2020\/10\/ad447aeb80d3ae56ea4598cd959456de.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWir beginnen normalerweise mit der These, dass Kubernetes einfach Kubernetes ist, w\u00e4hrend OpenShift bereits eine Kubernetes-Plattform ist, \u00e4hnlich wie Microsoft AKS oder Amazon EKS. Jede dieser Plattformen hat ihre eigenen Vorteile, die auf eine bestimmte Zielgruppe ausgerichtet sind. Danach flie\u00dft das Gespr\u00e4ch bereits in einen Vergleich der St\u00e4rken und Schw\u00e4chen der jeweiligen Plattformen \u00fcber.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nIm Grunde dachten wir dar\u00fcber nach, diesen Beitrag mit der Schlussfolgerung zu schreiben: \u201eH\u00f6rt zu, es spielt keine Rolle, wo der Code ausgef\u00fchrt wird, auf OpenShift oder auf AKS, auf EKS, auf einem beliebigen benutzerdefinierten Kubernetes oder auf irgendeinem Kubernetes <i>(um es kurz zu machen, nennen wir es KUK)<\/i> \u2013 es ist tats\u00e4chlich einfach, sowohl dort als auch dort.\u201c<\/p>\n<p>Dann hatten wir geplant, ein einfaches \"Hello World\" zu nehmen und anhand dieses Beispiels zu zeigen, was gemeinsam ist und was die Unterschiede zwischen KUK und der Red Hat OpenShift Container Platform (nachfolgend OCP oder einfach OpenShift) sind.<\/p>\n<p>Doch w\u00e4hrend des Schreibens dieses Beitrags wurde uns klar, dass wir so sehr an OpenShift gew\u00f6hnt sind, dass wir einfach nicht bemerken, wie es gewachsen ist und sich in eine gro\u00dfartige Plattform verwandelt hat, die viel mehr ist als nur eine Kubernetes-Distribution. Wir haben uns daran gew\u00f6hnt, die Reife und Einfachheit von OpenShift als selbstverst\u00e4ndlich zu betrachten und dabei seine hervorragenden Eigenschaften au\u00dfer Acht zu lassen.<\/p>\n<p>Im Grunde ist es an der Zeit f\u00fcr aktives Bedauern, und jetzt werden wir Schritt f\u00fcr Schritt den Einsatz unseres \"Hello World\" auf KUK und OpenShift vergleichen, und wir werden dies so objektiv wie m\u00f6glich tun (au\u00dfer vielleicht, dass wir gelegentlich pers\u00f6nliche Meinungen zu dem Thema \u00e4u\u00dfern). Wenn Sie an einer rein subjektiven Meinung zu diesem Thema interessiert sind, k\u00f6nnen Sie sie lesen <noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/swlh\/im-so-sorry-openshift-i-ve-taken-you-for-granted-f36fb47ea4d9\">. Heute zeigen wir, wie man AMQ Online und Quarkus kombiniert, um ein modernes Nachrichtenaustauschsystem auf Basis von OpenShift zu erstellen, das zwei neue Technologien zur Nachrichtenverarbeitung nutzt.<\/a><\/noindex>. In diesem Beitrag werden wir uns jedoch an die Fakten und nur an die Fakten halten.<\/p>\n<h3>Cluster<\/h3>\n<p>\nAlso, f\u00fcr unser \"Hello World\" ben\u00f6tigen wir Cluster. Zun\u00e4chst einmal sagen wir \"nein\" zu allen \u00f6ffentlichen Clouds, um keine Kosten f\u00fcr Server, Registries, Netzwerke, Datentransfers usw. zu haben. Daher w\u00e4hlen wir einen einfachen Ein-Knoten-Cluster auf <noindex><a rel=\"nofollow\" href=\"https:\/\/minikube.sigs.k8s.io\/docs\/start\/\">Minikube<\/a><\/noindex> (f\u00fcr KUK) und <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/products\/codeready-containers\/overview\">Code Ready Containers<\/a><\/noindex> (f\u00fcr den OpenShift-Cluster). Beide Varianten sind in der Installation wirklich einfach, ben\u00f6tigen jedoch ziemlich viele Ressourcen auf Ihrem Laptop.<\/p>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" src=\"\/wp-content\/uploads\/2020\/10\/01c748365253fc9e11e817876629ae7e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Build auf KUK<\/h3>\n<p>\nAlso, lass uns anfangen.<\/p>\n<h4>Schritt 1 \u2013 wir erstellen unser Container-Image<\/h4>\n<p>\nIch beginne damit, unser \"Hello World\" auf minikube zu deployen. Daf\u00fcr ben\u00f6tigen wir:<\/p>\n<ol>\n<li>1. Installiertes Docker.<\/li>\n<li>2. Installiertes Git.<\/li>\n<li>3. Installiertes Maven (in diesem Projekt wird eigentlich die mvnw-Bin\u00e4rdatei verwendet, also ist es nicht erforderlich).<\/li>\n<li>4. Tats\u00e4chlich der Quellcode, d.h. ein Klon des Repositories <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>\nZuerst muss ein Quarkus-Projekt erstellt werden. Keine Sorge, wenn Sie noch nie mit der Webseite Quarkus.io gearbeitet haben \u2013 das ist einfach. W\u00e4hlen Sie einfach die Komponenten aus, die Sie in Ihrem Projekt verwenden m\u00f6chten (RestEasy, Hibernate, Amazon SQS, Camel usw.), und dann konfiguriert Quarkus alles f\u00fcr Sie, ohne dass Sie irgendetwas tun m\u00fcssen; es richtet das Maven-Archetyp ein und stellt alles auf GitHub bereit. Das hei\u00dft, mit nur einem Mausclick ist alles bereit. Daf\u00fcr lieben wir Quarkus.<\/p>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" src=\"\/wp-content\/uploads\/2020\/10\/39a62058d91f8443e77466d374d02d34.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Der einfachste Weg, um unser \"Hello World\" in ein Container-Image zu packen, ist die Verwendung von Quarkus-Maven-Erweiterungen f\u00fcr Docker, die die gesamte erforderliche Arbeit erledigen. Mit dem Erscheinen von Quarkus ist das wirklich einfach und unkompliziert geworden: Sie f\u00fcgen die Erweiterung container-image-docker hinzu und k\u00f6nnen Images mit Maven-Befehlen erstellen.<\/p>\n<pre><code class=\"plaintext\">.\/mvnw quarkus:add-extension -Dextensions=\"container-image-docker\"\n<\/code><\/pre>\n<p>\nUnd schlie\u00dflich bauen wir unser Image mit Maven. Dabei verwandelt sich unser Quellcode in ein fertiges Container-Image, das bereits in einer Container-Ausf\u00fchrungsumgebung gestartet werden kann.<\/p>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" 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>\nUnd das war's, jetzt k\u00f6nnen Sie den Container mit dem Befehl docker run starten und unseren Dienst auf Port 8080 bereitstellen, sodass er erreichbar ist.<\/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=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" src=\"\/wp-content\/uploads\/2020\/10\/4f46e13423d5027d85ebae2c98c926b8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Nachdem der Container-Instanz gestartet wurde, m\u00fcssen wir nur noch mit dem Befehl curl \u00fcberpr\u00fcfen, dass unser Dienst funktioniert:<\/p>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" src=\"\/wp-content\/uploads\/2020\/10\/1c1462f52d6a487863c21f8f72a09d1f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Also, alles funktioniert und es war wirklich einfach und unkompliziert.<\/p>\n<h4>Schritt 2 \u2013 \u00dcbertragen unseres Containers in ein Container-Image-Repository<\/h4>\n<p>\nMomentan wird das von uns erstellte Image lokal in unserem lokalen Container-Repository gespeichert. Wenn wir dieses Image in unserer Kubernetes-Umgebung verwenden m\u00f6chten, m\u00fcssen wir es in ein anderes Repository hochladen. Kubernetes hat diese Funktionen nicht eingebaut, deshalb werden wir Docker Hub verwenden. Es ist erstens kostenlos und zweitens machen es (fast) alle so.<\/p>\n<p>Das ist auch ganz einfach, man braucht nur ein Konto bei Docker Hub.<\/p>\n<p>Also, melden wir uns bei Docker Hub an und laden unser Image dort hoch.<\/p>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" src=\"\/wp-content\/uploads\/2020\/10\/fb5d81ee15ca7594277c5a05da298fbd.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>Schritt 3 \u2013 Kubernetes starten<\/h4>\n<p>\nEs gibt viele M\u00f6glichkeiten, die Kubernetes-Konfiguration f\u00fcr unser \"Hello World\" zusammenzustellen, aber wir werden die einfachste davon verwenden, weil wir so sind...<\/p>\n<p>Zuerst starten wir den Minikube-Cluster:<\/p>\n<pre><code class=\"plaintext\">minikube start\n<\/code><\/pre>\n<p><\/p>\n<h4>Schritt 4 \u2013 Wir deployen unser Container-Image<\/h4>\n<p>\nJetzt m\u00fcssen wir unseren Code und das Container-Image in Kubernetes-Konfigurationen umwandeln. Mit anderen Worten, wir ben\u00f6tigen eine Pod- und Deployment-Definition, die auf unser Container-Image auf Dockerhub verweist. Einer der einfachsten Wege, dies zu tun, ist der Befehl zum Erstellen eines Deployments, indem wir auf unser Image verweisen:<\/p>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" 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>\nMit diesem Befehl haben wir Kubernetes gesagt, dass es eine Deployment-Konfiguration erstellen soll, die eine Pod-Spezifikation f\u00fcr unser Container-Image enthalten muss. Dieser Befehl wendet auch diese Konfiguration auf unseren Minikube-Cluster an und erstellt ein Deployment, das unser Container-Image herunterl\u00e4dt und einen Pod im Cluster startet.<\/p>\n<h4>Schritt 5 \u2013 Wir \u00f6ffnen den Zugriff auf unseren Dienst<\/h4>\n<p>\nJetzt, wo wir unser Container-Image bereitgestellt haben, ist es an der Zeit zu \u00fcberlegen, wie wir den externen Zugriff auf diesen RESTful-Service konfigurieren, der in unserem Code programmiert ist.<\/p>\n<p>Hier gibt es viele M\u00f6glichkeiten. Zum Beispiel k\u00f6nnen wir den Befehl expose verwenden, um automatisch die entsprechenden Kubernetes-Komponenten wie Services und Endpoints zu erstellen. Genau das werden wir tun, indem wir den Befehl expose f\u00fcr unser Deployment-Objekt ausf\u00fchren:<\/p>\n<pre><code class=\"plaintext\">kubectl expose deployment hello-quarkus --type=NodePort --port=8080\n<\/code><\/pre>\n<p>\nLass uns einen Moment auf die Option \"--type\" des Expose-Befehls eingehen.<\/p>\n<p>Wenn wir expose machen und die f\u00fcr den Betrieb unseres Dienstes erforderlichen Komponenten erstellen, m\u00fcssen wir unter anderem gew\u00e4hrleisten, dass von au\u00dfen auf den Dienst hello-quarkus zugegriffen werden kann, der in unserem softwaredefinierten Netzwerk sitzt. Und der Parameter <b>type<\/b> erm\u00f6glicht es uns, solche Dinge wie Lastenausgleichsserver zu erstellen und zu verbinden, um den Verkehr in dieses Netzwerk zu leiten.<\/p>\n<p>Wenn wir also <b>type=LoadBalancer<\/b>, geben wir automatisch einen Lastenausgleichsserver in der \u00f6ffentlichen Cloud in Betrieb, um eine Verbindung zu unserem Kubernetes-Cluster herzustellen. Das ist nat\u00fcrlich gro\u00dfartig, man muss jedoch verstehen, dass eine solche Konfiguration stark an eine bestimmte \u00f6ffentliche Cloud gebunden sein wird und es schwieriger ist, sie zwischen Kubernetes-Instanzen in verschiedenen Umgebungen zu \u00fcbertragen.<\/p>\n<p>In unserem Beispiel <b>type=NodePort<\/b>, das hei\u00dft, der Zugriff auf unseren Dienst erfolgt \u00fcber die IP-Adresse des Knotens und die Portnummer. Diese M\u00f6glichkeit erfordert keine \u00f6ffentlichen Clouds, bringt jedoch eine Reihe zus\u00e4tzlicher Schritte mit sich. Erstens ben\u00f6tigen wir einen eigenen Load-Balancer, daher werden wir einen NGINX-Load-Balancer in unserem Cluster bereitstellen.<\/p>\n<h4>Schritt 6 \u2013 Load-Balancer einrichten<\/h4>\n<p>\nMinikube verf\u00fcgt \u00fcber eine Reihe plattforminterner Funktionen, die die Erstellung der erforderlichen Komponenten f\u00fcr den externen Zugriff, wie Ingress-Controller, erleichtern. Minikube wird mit dem Nginx-Ingress-Controller geliefert, und wir m\u00fcssen ihn nur aktivieren und konfigurieren.<\/p>\n<pre><code class=\"plaintext\">minikube addons enable ingress\n<\/code><\/pre>\n<p>\nJetzt erstellen wir mit einem einzigen Befehl den Nginx-Ingress-Controller, der innerhalb unseres Minikube-Clusters funktioniert:<\/p>\n<pre><code class=\"plaintext\">ingress-nginx-controller-69ccf5d9d8-j5gs9 1\/1 Running 1 33m\n<\/code><\/pre>\n<p><\/p>\n<h4>Schritt 7 \u2013 Ingress konfigurieren<\/h4>\n<p>\nJetzt m\u00fcssen wir den Nginx-Ingress-Controller so konfigurieren, dass er die Anfragen an hello-quarkus akzeptiert.<\/p>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" src=\"\/wp-content\/uploads\/2020\/10\/18183cb985436447cf15c501e4c6c3a3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" src=\"\/wp-content\/uploads\/2020\/10\/577f1e6218094b5ee23052d49869e838.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Und schlie\u00dflich m\u00fcssen wir diese Konfiguration anwenden.<\/p>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" 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=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" src=\"\/wp-content\/uploads\/2020\/10\/68fba4ef3d2762a97dc5be5de9e6b864.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Da wir das alles auf unserem Computer machen, f\u00fcgen wir einfach die IP-Adresse unseres Knotens in die Datei \/etc\/hosts ein, um HTTP-Anfragen an unser Minikube an den NGINX-Load-Balancer zu leiten.<\/p>\n<pre><code class=\"plaintext\">192.168.99.100 hello-quarkus.info\n<\/code><\/pre>\n<p>\nAlles klar, jetzt ist unser Minikube-Dienst von au\u00dfen \u00fcber den Nginx-Ingress-Controller zug\u00e4nglich.<\/p>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" src=\"\/wp-content\/uploads\/2020\/10\/a456f34d168d43e9236e4769722b7f5d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Na, das war doch einfach, oder? Oder nicht so sehr?<\/h3>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" src=\"\/wp-content\/uploads\/2020\/10\/237015dc06bb9d12eb4cd2944dc6df58.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Starten in OpenShift (Code Ready Containers)<\/h3>\n<p>\nUnd jetzt schauen wir uns an, wie das alles auf der Red Hat OpenShift Container Platform (OCP) funktioniert.<\/p>\n<p>Wie im Fall von Minikube w\u00e4hlen wir das Schema mit einem einzelnen Knoten in Form von Code Ready Containers (CRC). Fr\u00fcher hie\u00df es Minishift und basierte auf dem OpenShift-Origin-Projekt, jetzt ist es CRC und basiert auf der OpenShift Container Platform von Red Hat.<\/p>\n<p>Hier k\u00f6nnen wir einfach nicht widerstehen zu sagen: 'OpenShift ist gro\u00dfartig!'<\/p>\n<p>Urspr\u00fcnglich dachten wir, wir w\u00fcrden schreiben, dass die Entwicklung auf OpenShift sich nicht von der Entwicklung auf Kubernetes unterscheidet. Und im Grunde genommen stimmt das auch. Aber w\u00e4hrend wir diesen Beitrag schrieben, erinnerten wir uns, wie viele unn\u00f6tige Schritte man unternehmen muss, wenn man kein OpenShift hat, und deshalb ist es, um es noch einmal zu sagen, gro\u00dfartig. Wir lieben es, wenn alles einfach ist, und wie einfach unser Beispiel im Vergleich zu Minikube auf OpenShift bereitgestellt und gestartet wird, hat uns tats\u00e4chlich dazu bewegt, diesen Beitrag zu schreiben.<\/p>\n<p>Lassen Sie uns den Prozess durchgehen und sehen, was wir tun m\u00fcssen.<\/p>\n<p>Also, im Beispiel mit Minikube haben wir mit Docker begonnen... Halt, wir brauchen Docker nicht mehr auf dem Rechner installiert zu haben.<\/p>\n<p><b>Und lokales Git ben\u00f6tigen wir nicht.<br \/>\nUnd Maven ist auch nicht n\u00f6tig.<br \/>\nUnd es ist nicht n\u00f6tig, ein Container-Image manuell zu erstellen.<br \/>\nUnd es ist nicht n\u00f6tig, ein Container-Image-Repository zu suchen.<br \/>\nUnd es ist nicht n\u00f6tig, einen Ingress-Controller zu installieren.<br \/>\nUnd auch Ingress zu konfigurieren, ist nicht n\u00f6tig.<\/b><\/p>\n<p>Ihr habt es verstanden, ja? Um unsere Anwendung in OpenShift zu starten und bereitzustellen, braucht man nichts davon. Der Prozess sieht folgenderma\u00dfen aus.<\/p>\n<h4>Schritt 1 \u2013 Starten Sie Ihr OpenShift-Cluster<\/h4>\n<p>\nWir verwenden Code Ready Containers von Red Hat, was im Grunde dasselbe wie Minikube ist, jedoch mit einem voll funktionsf\u00e4higen Ein-Knoten-Cluster von Openshift.<\/p>\n<pre><code class=\"plaintext\">crc start\n<\/code><\/pre>\n<p><\/p>\n<h4>Schritt 2 \u2013 F\u00fchren Sie den Build und die Bereitstellung der Anwendung im OpenShift-Cluster durch<\/h4>\n<p>\nGenau in diesem Schritt zeigt sich die Einfachheit und Benutzerfreundlichkeit von OpenShift in vollem Umfang. Wie in allen Kubernetes-Distributionen gibt es viele M\u00f6glichkeiten, eine Anwendung im Cluster zu starten. Und wie im Fall von KUK w\u00e4hlen wir absichtlich die einfachste.<\/p>\n<p>OpenShift wurde immer als Plattform zur Erstellung und Ausf\u00fchrung von containerisierten Anwendungen entwickelt. Das Erstellen von Containern war immer ein wesentlicher Bestandteil dieser Plattform, daher gibt es hier eine Menge zus\u00e4tzlicher Kubernetes-Ressourcen f\u00fcr entsprechende Aufgaben.<\/p>\n<p>Wir werden den Source-to-Image (S2I) Prozess von OpenShift verwenden, der mehrere verschiedene Methoden bietet, um unseren Quellcode (Code oder Bin\u00e4rdateien) in ein containerbasiertes Image zu verwandeln, das im OpenShift-Cluster ausgef\u00fchrt wird.<\/p>\n<p>Daf\u00fcr ben\u00f6tigen wir zwei Dinge:<\/p>\n<ul>\n<li>unseren Quellcode im Git-Repository<\/li>\n<li>Ein Builder-Image, auf dessen Grundlage der Build durchgef\u00fchrt wird.<\/li>\n<\/ul>\n<p>\nEs gibt viele solcher Images, sowohl von Red Hat als auch von der Community, und wir werden das OpenJDK-Image verwenden, da ich ein Java-Anwendung baue.<\/p>\n<p>Wir k\u00f6nnen einen S2I-Build sowohl \u00fcber die grafische Konsole von OpenShift Developer als auch \u00fcber die Befehlszeile starten. Wir verwenden den Befehl new-app und geben ihm an, wo das Builder-Image und unser Quellcode zu finden sind.<\/p>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" 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>\nFertig, unsere Anwendung wurde erstellt. Dabei hat der S2I-Prozess Folgendes erledigt:<\/p>\n<ul>\n<li>Einen Build-Pod f\u00fcr alles, was mit der Erstellung der Anwendung zu tun hat, erstellt.<\/li>\n<li>Die OpenShift-Baukonfiguration erstellt.<\/li>\n<li>Das Builder-Image in das interne Docker-Registry von OpenShift heruntergeladen.<\/li>\n<li>\u00abHello World\u00bb in das lokale Repository geklont.<\/li>\n<li>Ich sah, dass dort eine maven-pom vorhanden ist, und daher habe ich die Anwendung mit maven kompiliert.<\/li>\n<li>Ich habe ein neues Container-Image erstellt, das die kompilierte Java-Anwendung enth\u00e4lt, und dieses Image in das interne Container-Registry gelegt.<\/li>\n<li>Ich habe ein Kubernetes-Deployment mit den Spezifikationen f\u00fcr den Pod, den Dienst usw. erstellt.<\/li>\n<li>Ich habe das Container-Image deployt.<\/li>\n<li>Ich habe den Build-Pod entfernt.<\/li>\n<\/ul>\n<p>\nIn dieser Liste steht viel, aber das Wichtigste ist, dass der gesamte Build ausschlie\u00dflich innerhalb von OpenShift erfolgt, das interne Docker-Registry befindet sich innerhalb von OpenShift, und der Build-Prozess erstellt alle Kubernetes-Komponenten und startet sie im Cluster.<\/p>\n<p>Wenn man den Start von S2I in der Konsole visuell verfolgt, kann man sehen, wie beim Ausf\u00fchren des Builds der Build-Pod gestartet wird.<\/p>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" src=\"\/wp-content\/uploads\/2020\/10\/bd69c6e27813b1211a11e522f28f45b7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Und jetzt schauen wir uns die Logs des Builder-Pods an: Zum einen sieht man, wie maven seine Arbeit verrichtet und Abh\u00e4ngigkeiten f\u00fcr den Build unserer Java-Anwendung herunterl\u00e4dt.<\/p>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" src=\"\/wp-content\/uploads\/2020\/10\/326192f9f9373e451d601b77052d67d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Nachdem der maven-Build abgeschlossen ist, wird das Container-Image gebaut, und danach wird dieses gebaute Image in das interne Repository hochgeladen.<\/p>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" src=\"\/wp-content\/uploads\/2020\/10\/c97da4c17a8e275d39104126d0f87048.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Alles, der Build-Prozess ist abgeschlossen. Lassen Sie uns nun sicherstellen, dass die Pods und Dienste unserer Anwendung im Cluster gestartet wurden.<\/p>\n<pre><code class=\"plaintext\">oc get service\n<\/code><\/pre>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" src=\"\/wp-content\/uploads\/2020\/10\/f16a098a096128073f305e0444061417.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Das ist alles. Und nur ein Befehl. Wir m\u00fcssen nur noch diesen Dienst f\u00fcr den externen Zugriff exponieren.<\/p>\n<h4>Schritt 3 \u2013 den Dienst f\u00fcr den externen Zugriff exponieren<\/h4>\n<p>\nWie im Fall von KUB, ben\u00f6tigt unsere \"Hello World\"-Anwendung auf der OpenShift-Plattform ebenfalls einen Router, um den externen Datenverkehr auf den Dienst innerhalb des Clusters zu lenken. In OpenShift geschieht dies sehr einfach. Erstens ist standardm\u00e4\u00dfig ein Routing-Komponente namens HAProxy im Cluster installiert (diese kann durch NGINX ersetzt werden). Zweitens gibt es hier spezielle Ressourcen, die umfassende Anpassungsm\u00f6glichkeiten bieten und als Routes bezeichnet werden und den Ingress-Objekten im guten alten Kubernetes \u00e4hneln (tats\u00e4chlich haben die OpenShift-Routes das Design der Ingress-Objekte stark beeinflusst, die nun auch in OpenShift verwendet werden k\u00f6nnen), aber f\u00fcr unser \"Hello World\" und in fast allen anderen F\u00e4llen reicht uns die Standard-Route ohne zus\u00e4tzliche Anpassung.<\/p>\n<p>Um f\u00fcr \"Hello World\" einen routbaren FQDN zu erstellen (ja, in OpenShift gibt es eigenen DNS f\u00fcr die Namensaufl\u00f6sung von Diensten), f\u00fchren wir einfach ein Expose f\u00fcr unseren Dienst aus:<\/p>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" 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>\nWenn Sie sich den gerade erstellten Route ansehen, finden Sie dort den FQDN und weitere Informationen zur Routing-Konfiguration:<\/p>\n<pre><code class=\"plaintext\">oc get route\n<\/code><\/pre>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" src=\"\/wp-content\/uploads\/2020\/10\/dc59c36166605ef0a5a24b2b7ffa65b6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Und schlie\u00dflich rufen wir unseren Dienst aus dem Browser auf:<\/p>\n<p><img decoding=\"async\" alt=\"Es tut mir leid, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich angesehen\" src=\"\/wp-content\/uploads\/2020\/10\/fccf6cae1746fa59df2ff8ffb6973666.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Und jetzt war das wirklich einfach!<\/h3>\n<p>\nWir lieben Kubernetes und alles, was diese Technologie erm\u00f6glicht, sowie Einfachheit und Leichtigkeit. Kubernetes wurde entwickelt, um die Nutzung von verteilten, skalierbaren Containern erheblich zu vereinfachen, aber f\u00fcr die Bereitstellung von Anwendungen reicht diese Einfachheit heute nicht mehr aus. Hier kommt OpenShift ins Spiel, das mit der Zeit geht und Kubernetes anbietet, das sich in erster Linie an Entwickler richtet. Es wurden gro\u00dfe Anstrengungen unternommen, um die OpenShift-Plattform speziell f\u00fcr Entwickler zu optimieren, einschlie\u00dflich der Schaffung von Tools wie S2I, ODI, Developer Portal, OpenShift Operator Framework, Integration mit IDEs, Entwicklerkatalogen, Integration mit Helm, Monitoring und vielen anderen.<\/p>\n<p>Wir hoffen, dass dieser Artikel f\u00fcr Sie interessant und n\u00fctzlich war. Weitere Ressourcen, Materialien und andere n\u00fctzliche Dinge f\u00fcr die Entwicklung auf der OpenShift-Plattform finden Sie im Portal <noindex><a rel=\"nofollow\" href=\"https:\/\/developers.redhat.com\/\">Red Hat Developers<\/a><\/noindex>.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/523568\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0448\u0438\u0445 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0431\u044b\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0432 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 Kubernetes \u0438 \u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0435 \u0442\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 OpenShift. \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043c\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u0441 \u0442\u0435\u0437\u0438\u0441\u0430, \u0447\u0442\u043e Kubernetes \u2013 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e Kubernetes, \u0430 OpenShift \u2013 \u044d\u0442\u043e \u0443\u0436\u0435 Kubernetes-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430, \u043a\u0430\u043a Microsoft AKS \u0438\u043b\u0438 Amazon EKS. \u0423 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":97255,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-97254","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u043d\u0430\u0448\u0438\u0445 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0431\u044b\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0432 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 \u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 Kubernetes \u0438 \u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0435 \u0442\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 OpenShift.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/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\udd47Entschuldige, OpenShift, wir haben dich nicht genug gesch\u00e4tzt und als selbstverst\u00e4ndlich hingenommen | ProHoster","description":"Dieser Beitrag wurde verfasst, weil wir viele Gespr\u00e4che mit unseren Kunden \u00fcber die Entwicklung von Anwendungen auf Kubernetes und \u00fcber die Besonderheiten dieser Entwicklung auf OpenShift gef\u00fchrt haben.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/prosti-openshift-my-nedostatochno-czenili-tebya-i-prinimali-kak-dolzhnoe","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/97254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=97254"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/97254\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/97255"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=97254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=97254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=97254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}