Entwicklung von Java-Anwendungen für Kubernetes mit Eclipse JKube

Vor 25 Jahren begann Java, sich in die breiten Programmierermassen zu integrieren, um letztendlich zu einem der Pfeiler zu werden, um die herum Anwendungsstacks aufgebaut werden. Heute sind jedoch viele Menschen und Organisationen, die über viele Jahre hinweg Java treu geblieben sind, damit beschäftigt, zu einer Plattform zu wechseln oder darüber nachzudenken. Kubernetes oder deren Abkömmlingen, wie -Plattform bereitstellt. Weitere Informationen über die Funktionsweise finden Sie oder Amazon EKS.

Entwicklung von Java-Anwendungen für Kubernetes mit Eclipse JKube

Leider ist Kubernetes mit einer steilen Lernkurve verbunden und fügt eine weitere Betriebsebene in den gewohnten Entwicklungsprozess für Java-Programmierer ein. Heute werden wir erklären, wie man Eclipse JKubeverwendet, um diese zusätzlichen Operationen im Zusammenhang mit Kubernetes und Containern zu vereinfachen und einen schmerzlosen Übergang auf eine Cloud-Plattform unter Beibehaltung des gewohnten Java-Ökosystems zu gewährleisten. Darüber hinaus zeigen wir, wie man Java-Anwendungen auf der OpenShift-Plattform mit dem OpenShift Maven-Plugin bereitstellt.

Der traditionelle Java-Entwicklungsprozess

Der traditionelle Entwicklungsprozess Java (Abb. 1) sieht vor, dass der Entwickler Code schreibt, anschließend Bereitstellungseinheiten in Form von JAR- oder WAR-Dateien erstellt und diese Dateien dann auf einem Webserver oder Anwendungsserver bereitstellt und ausführt. Hierfür wird hauptsächlich Maven über die Kommandozeile oder IDEs wie IntelliJ oder Eclipse verwendet, um Anwendungen zu codieren und zu verpacken. Entwickler sind es gewohnt, Änderungen am Code vorzunehmen und alles sorgfältig zu testen, bevor sie den Code festschreiben und in ein Versionskontrollsystem einpflegen.

Entwicklung von Java-Anwendungen für Kubernetes mit Eclipse JKube

Abb. 1. Traditioneller Java-Entwicklungsprozess.

Der Java-Entwicklungsprozess für die Cloud

Beim Übergang zu Cloud-Anwendungen wird das oben beschriebene Schema um Kubernetes und . Ein Container ist eine Möglichkeit, die Anwendung zu verpacken, um sie von der Umgebung zu isolieren.erweitert. Daher muss der Entwickler jetzt Java-Anwendungen in Container-Images verpacken und Kubernetes-Manifeste erstellen, die diese Images beschreiben. Anschließend werden diese Manifeste auf dem Produktionsserver, auf dem Kubernetes läuft, angewendet. Kubernetes zieht dann diese Images aus dem Repository und stellt die Anwendungen gemäß den in den Manifesten festgelegten Konfigurationen bereit, die normalerweise in YAML-Dateien vorliegen.

Die Metamorphose des traditionellen Java-Entwicklungsprozesses beim Übergang zur Cloud ist in Abbildung 2 dargestellt.

Entwicklung von Java-Anwendungen für Kubernetes mit Eclipse JKube

Abb. 2. Der Java-Entwicklungsprozess für die Cloud.

Eclipse JKube

Der Übergang zu Kubernetes fügt einen weiteren operationellen Layer im Entwicklungsprozess hinzu, was viele Entwickler nervös macht, da sie sich auf ihre Kernaufgaben – die Anwendungslogik – konzentrieren möchten und nicht darauf, wie diese bereitgestellt werden. Und hier kommt Eclipse JKubeins Spiel, was Entwicklern ermöglicht, ihre Bibliotheken und Plugins (JKube Kit zusammen mit Kubernetes Maven Plugin oder OpenShift Maven Plugin), um Container- und Kubernetes-bezogene Operationen mühelos durchzuführen, gemäß dem Schema in Abb. 2.

Im restlichen Teil dieses Artikels zeigen wir, wie der Java-Entwicklungsprozess in einer Kubernetes-Umgebung vereinfacht werden kann, indem wir Eclipse JKube mit dem Kubernetes Maven Plugin verwenden.

Entwicklungsprozess für die Cloud mit Eclipse JKube

Betrachten wir ein leicht modifiziertes Schema der Java-Entwicklung für die Cloud mit Abb. 2, wobei wir Eclipse JKube und das Kubernetes Maven Plugin integrieren, wie in Abb. 3 dargestellt.

Entwicklung von Java-Anwendungen für Kubernetes mit Eclipse JKube

Abb. 3. Java-Entwicklungsprozess für die Cloud mit Eclipse JKube.

Wie wir sehen, werden hier alle Interaktionen mit Kubernetes und Containern (in der Grafik rot hervorgehoben) durch die Standard-Goals von Eclipse JKube ersetzt, die in Tab. 1 aufgelistet sind.

Tab. 1. Standardaufgaben von Eclipse JKube.

Aufgabe
Die Phase
Beschreibung

k8s:build
PRE_INTEGRATION_TEST
Bau von Docker-Images

k8s:push
INSTALL
Hochladen der Docker-Images in das Repository

k8s:resource
PROCESS_RESOURCES
Generierung von K8s-Manifeste

k8s:apply
COMPILE
Anwendung der generierten Manifeste auf K8s

k8s:undeploy
UNDEPLOY
Entfernung der K8s-Ressourcen, die über k8s:apply und k8s:deploy bereitgestellt wurden

Hinweis: Wenn Sie nicht möchten, dass die Aufgaben diese festen Vorgaben (meinungsbasierte Standardwerte) verwenden, können Sie Eclipse JKube manuell auf Ihre Bedürfnisse anpassen, da es die Konfiguration über XML und Ressourcen.

Jetzt betrachten wir Beispiele für die Verwendung von Eclipse JKube und dem Kubernetes Maven Plugin bei der Arbeit mit Anwendungen.

Bereitstellung einer Java-Anwendung in Kubernetes mit Eclipse JKube

In diesem Beispiel werden wir eine einfache Java-Anwendung in einem Cluster bereitstellen Minikube mithilfe von Eclipse JKube. Mit dem Kubernetes Maven Plugin können wir Bereitstellungsparameter angeben, ohne eine Konfiguration festzulegen.

Als Beispielanwendung verwenden wir einen einfachen Zufallszahlengenerator, der JSON-Ausgaben an dem Endpunkt /random ausgibt:

~\/work\/repos\/eclipse-jkube-demo-project : $ curl localhost:8080\/random | jq .\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100    45    0    45    0     0    818      0 --:--:-- --:--:-- --:--:--   818\n{\n  \

Schritt 1. Laden Sie das Kubernetes Maven Plugin hoch

Das Kubernetes Maven Plugin befindet sich im Repository Maven Central Repository. Um Eclipse JKube zu verwenden, muss das Kubernetes Maven Plugin in die pom.xml als Abhängigkeit hinzugefügt werden:

org.eclipse.jkube
     kubernetes-maven-plugin
     ${jkube.version}

Wenn anstelle von reinem Kubernetes OpenShift verwendet wird, wird die pom.xml wie folgt modifiziert:

org.eclipse.jkube
     openshift-maven-plugin
     ${jkube.version}

Schritt 2. Erstellen Sie das Docker-Image

Die JAR-Datei der Anwendung kann mit dem Befehl mvn package erstellt werden, und dann kann das Ziel mvn k8s:build verwendet werden, um das Docker-Image dieser Anwendung zu erstellen. Bitte beachten Sie, dass wir den Standard-Image-Namen mit dieser Eigenschaft überschrieben haben:

docker.io/rohankanojia/random-generator:${project.version}

Bevor Sie das Image erstellen, sollten Sie sicherstellen, dass der Docker-Daemon korrekt exponiert ist. Dies kann mit folgendem Befehl erfolgen:

$ eval $(minikube docker-env)

Geben Sie dann den Befehl mvn k8s:build ein, und das sehen wir auf dem Bildschirm, wenn das Docker-Image mit dem Build-Ziel von Eclipse JKube erstellt wird:

~work/repos/eclipse-jkube-demo-project : $ mvn k8s:build
[INFO] Scannen nach Projekten...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Erstellen von random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] k8s: Ausführung im Kubernetes-Modus
[INFO] k8s: Erstellen des Docker-Images im Kubernetes-Modus
[INFO] k8s: Ausführung des Generators spring-boot
[INFO] k8s: spring-boot: Verwendung des Docker-Images quay.io/jkube/jkube-java-binary-s2i:0.0.7 als Basis/Baustelle
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Docker-build.tar in 251 Millisekunden erstellt
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Image sha256:a20e5 erstellt
[INFO] ------------------------------------------------------------------------
[INFO] BUILD ERFOLGREICH
[INFO] ------------------------------------------------------------------------
[INFO] Gesamtzeit: 5.053 s
[INFO] Fertiggestellt um: 2020-08-10T11:28:23+05:30
[INFO] ------------------------------------------------------------------------
~work/repos/eclipse-jkube-demo-project : $

Schritt 3. Das Image in das Docker-Registry hochladen

Nachdem wir das Docker-Image mit dem konfigurierten Push-Registry (in unserem Fall ist es docker.io) erstellt haben, können wir dieses Image in das Registry hochladen. Folgendes wird auf dem Bildschirm angezeigt, nachdem wir Eclipse JKube aufgefordert haben, die Push-Aufgabe mvn k8s:push auszuführen:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:push
[INFO] Scannen nach Projekten...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Erstelle random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:push (default-cli) @ random-generator ---
[INFO] k8s: Läuft im Kubernetes-Modus
[INFO] k8s: Docker-Image im Kubernetes-Modus erstellen
[INFO] k8s: Ausführender Generator spring-boot
[INFO] k8s: spring-boot: Verwende Docker-Image quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 als Basis \/ Builder
[INFO] k8s: Der Push bezieht sich auf das Repository [docker.io\/rohankanojia\/random-generator]
5dcd9556710f: Schicht existiert bereits 
b7139ad07aa8: Schicht existiert bereits 
b6f081e4b2b6: Schicht existiert bereits 
d8e1f35641ac: Schicht existiert bereits 
[INFO] k8s: 0.0.1: Digest: sha256:9f9eda2a13b8cab1d2c9e474248500145fc09e2922fe3735692f9bda4c76002d Größe: 1162
[INFO] k8s: docker.io\/rohankanojia\/random-generator:0.0.1 in 7 Sekunden gepusht
[INFO] ------------------------------------------------------------------------
[INFO] BUILD ERFOLGREICH
[INFO] ------------------------------------------------------------------------
[INFO] Gesamte Zeit:  11,222 s
[INFO] Fertiggestellt am: 2020-08-10T11:35:37+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ 

Nach dem Push des Images muss überprüft werden, ob es im Registry angekommen ist. In unserem Fall sehen wir es einfach im Docker Hub, wie in Abb. 4 gezeigt.

Entwicklung von Java-Anwendungen für Kubernetes mit Eclipse JKube

Abb. 4. Das ins Registry hochgeladene Image erscheint im Docker Hub.

Schritt 4. Generierung von Kubernetes-Ressourcen-Manifests für die Anwendung

Also, das Image der Anwendung haben wir erstellt, jetzt müssen wir die Kubernetes-Manifeste schreiben. Dafür gibt es eine Aufgabe in Eclipse JKube, die die harten Manifeste der Ressourcen basierend auf dem zugrunde liegenden Java-Framework generiert (Spring Boot, unterstützt Quarkus die Verwendung des Advanced Message Queuing Protocol (, Vert.x oder einem anderen). Zudem kann das Manifest so angepasst werden, indem eine Konfigurations-XML-Datei genutzt wird und rohe Fragmente (Fragmente des benötigten Ressourcenmanifests) in den Ordner der Anwendung src\/main\/jkube gelegt werden. In diesem Fall wird Ihre Konfiguration in die generierten Manifeste übertragen.

In unserem Beispiel lassen wir alles wie es ist, und daher generiert Eclipse JKube ein Manifest für das Standard-Deployment und für den Service mit dem Typ ClusterIP. Danach modifizieren wir das Manifest des Services, um den Servicetyp auf NodePort zu ändern. Das Standardverhalten kann mit folgendem Attribut überschrieben werden:

NodePort

So sieht die Bildschirmausgabe aus, nachdem wir Eclipse JKube gebeten haben, die Ressource-Task mvn k8s:resource auszuführen.

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:resource
[INFO] Scannen nach Projekten...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Erstelle random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:resource (default-cli) @ random-generator ---
[INFO] k8s: Starte Generator spring-boot
[INFO] k8s: spring-boot: Verwende Docker-Image quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 als Basis \/ Builder
[INFO] k8s: jkube-controller: Füge ein Standard-Deployment hinzu
[INFO] k8s: jkube-service: Füge einen Standarddienst 'random-generator' mit Ports [8080] hinzu
[INFO] k8s: jkube-healthcheck-spring-boot: Füge die Readiness-Probe an Port 8080, Pfad='\/actuator\/health', Schema='HTTP', mit einer Anfangsverzögerung von 10 Sekunden hinzu
[INFO] k8s: jkube-healthcheck-spring-boot: Füge die Liveness-Probe an Port 8080, Pfad='\/actuator\/health', Schema='HTTP', mit einer Anfangsverzögerung von 180 Sekunden hinzu
[INFO] k8s: jkube-revision-history: Füge eine Begrenzung der Versionshistorie auf 2 hinzu
[INFO] ------------------------------------------------------------------------
[INFO] BUILD ERFOLGREICH
[INFO] ------------------------------------------------------------------------
[INFO] Gesamtzeit:  3.344 s
[INFO] Fertiggestellt um: 2020-08-10T11:38:11+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ ls target\/classes\/META-INF\/jkube\/kubernetes
random-generator-deployment.yml  random-generator-service.yml
~\/work\/repos\/eclipse-jkube-demo-project : $ cat target\/classes\/META-INF\/jkube\/kubernetes\/random-generator-deployment.yml | head -n10
---
apiVersion: apps\/v1
kind: Deployment
metadata:
  annotations:
    jkube.io\/git-url: git@github.com:rohanKanojia\/eclipse-jkube-demo-project.git
    jkube.io\/git-commit: 1ef9ef2ef7a6fcbf8eb64c293f26f9c42d026512
    jkube.io\/git-branch: master
    jkube.io\/scm-url: https:\/\/github.com\/spring-projects\/spring-boot\/spring-boot-starter-parent\/random-generator
    jkube.io\/scm-tag: HEAD
~\/work\/repos\/eclipse-jkube-demo-project : $

Schritt 5. Bereitstellung der Anwendung im Kubernetes-Cluster

Nun sind wir bereit, die Anwendung zu deployen: Wir haben das Image generiert und anschließend automatisch die Ressourcenmanifeste erstellt. Jetzt müssen wir nur noch alles auf den Kubernetes-Cluster anwenden. Für die Bereitstellung der Anwendung kann natürlich der Befehl kubectl apply -f verwendet werden, aber das Plugin kann das auch für uns erledigen. So sieht der Bildschirm aus, nachdem wir Eclipse JKube aufgefordert haben, die apply-Aufgabe mvn k8s:apply auszuführen:

~ /work/repos/eclipse-jkube-demo-project : $ mvn k8s:apply
[INFO] Suche nach Projekten...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Erstelle random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] k8s: Verwende Kubernetes unter https://192.168.39.145:8443/ im Namespace default mit Manifest /home/rohaan/work/repos/eclipse-jkube-demo-project/target/classes/META-INF/jkube/kubernetes.yml 
[INFO] k8s: Verwende Namespace: default
[INFO] k8s: Erstelle einen Service aus kubernetes.yml Namespace default Name random-generator
[INFO] k8s: Service erstellt: target/jkube/applyJson/default/service-random-generator.json
[INFO] k8s: Erstelle ein Deployment aus kubernetes.yml Namespace default Name random-generator
[INFO] k8s: Deployment erstellt: target/jkube/applyJson/default/deployment-random-generator.json
[INFO] k8s: HINWEIS: Verwenden Sie den Befehl `kubectl get pods -w`, um den Start Ihrer Pods zu beobachten
[INFO] ------------------------------------------------------------------------
[INFO] BAU ERFOLGREICH
[INFO] ------------------------------------------------------------------------
[INFO] Gesamtzeit:  7.306 s
[INFO] Beendet am: 2020-08-10T11:40:57+05:30
[INFO] ------------------------------------------------------------------------
~ /work/repos/eclipse-jkube-demo-project : $ kubectl get pods -w
NAME                                                     READY   STATUS             RESTARTS   ALTER
random-generator-58b7847d7f-9m9df                        0/1     Läuft            0          7s
random-generator-58b7847d7f-9m9df                        1/1     Läuft            0          17s
^C~ /work/repos/eclipse-jkube-demo-project : $ kubectl get svc
NAME                                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           ALTER
io-openliberty-sample-getting-started   NodePort    10.110.4.104            9080:30570/TCP    44h
kubernetes                              ClusterIP   10.96.0.1               443/TCP           18d
random-generator                        NodePort    10.97.172.147           8080:32186/TCP    22s
~ /work/repos/eclipse-jkube-demo-project : $ curl `minikube ip`:32186/random | jq .
  % Gesamt    % Erhalten % Übertragen Durchschnittsgeschwindigkeit   Zeit    Zeit     Zeit  Aktuell
                                 Dload  Upload   Gesamt   Ausgegeben   Rest  Geschwindigkeit
100    45    0    45    0     0   1800      0 --:--:-- --:--:-- --:--:--  1875
{
  "id": "42e5571f-a20f-44b3-8184-370356581d10"
}

Schritt 6. Anwendung aus dem Kubernetes-Cluster undeployen

Dafür wird die Aufgabe undeploy verwendet, die einfach alle Ressourcen entfernt, die im vorherigen Schritt, also bei der Ausführung der Aufgabe apply, angewendet wurden. Das werden wir auf dem Bildschirm sehen, nachdem wir Eclipse JKube gebeten haben, die undeploy-Aufgabe mvn k8s:undeploy auszuführen:

~\/work\/repos\/eclipse-jkube-demo-project : $ kubectl get all
NAME                                    READY   STATUS    RESTARTS   AGE
pod\/random-generator-58b7847d7f-9m9df   1\/1     Running   0          5m21s

NAME                       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service\/kubernetes         ClusterIP   10.96.0.1               443\/TCP          18d
service\/random-generator   NodePort    10.97.172.147           8080:32186\/TCP   5m21s

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps\/random-generator   1\/1     1            1           5m21s

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps\/random-generator-58b7847d7f   1         1         1       5m21s
~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:undeploy
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Building random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:undeploy (default-cli) @ random-generator ---
[INFO] k8s: Using Kubernetes at https:\/\/192.168.39.145:8443\/ in namespace default with manifest \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/classes\/META-INF\/jkube\/kubernetes.yml 
[INFO] k8s: Using namespace: default
[INFO] k8s: Deleting resource Deployment default\/random-generator
[INFO] k8s: Deleting resource Service default\/random-generator
[INFO] k8s: HINT: Use the command `kubectl get pods -w` to watch your pods start up
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.412 s
[INFO] Finished at: 2020-08-10T11:46:22+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ kubectl get pods -w
^C~\/work\/repos\/eclipse-jkube-demo-project : $ kubectl get all
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service\/kubernetes   ClusterIP   10.96.0.1            443\/TCP   18d
~\/work\/repos\/eclipse-jkube-demo-project : $

Was kann man noch mit Eclipse JKube machen

Wir haben also die grundlegenden Ziele von Eclipse JKube und dem Kubernetes Maven Plugin betrachtet, die die Entwicklung von Java-Anwendungen für die Kubernetes-Plattform erleichtern. Wenn Sie diese Aufgaben nicht ständig über die Tastatur eingeben möchten, können Sie sie in der Plugin-Konfiguration festlegen, zum Beispiel so:

org.eclipse.jkube
     kubernetes-maven-plugin
     ${project.version}
     
         
             
                  build
                  resource
                  apply

Es sei darauf hingewiesen, dass wir in diesem Artikel bei weitem nicht alle Ziele behandelt haben, die in Eclipse JKube und im Kubernetes Maven Plugin verfügbar sind. Daher geben wir in Tabelle 2 eine Liste zusätzlicher Aufgaben an, die ebenfalls nützlich sein können.

Tabelle 2. Zusätzliche Ziele von Eclipse JKube.

Aufgabe
Die Phase
Beschreibung

k8s:log
VALIDIEREN
Abrufen von Protokollen von einer Anwendung, die auf Kubernetes läuft.

k8s:debug
PAKETIEREN
Öffnung des Debugging-Ports, um die Debugging-Anwendung, die auf Kubernetes läuft, direkt aus der IDE durchzuführen.

k8s:deploy
INSTALL
Erstellung eines Forks für die Install-Aufgabe und Anwendung der generierten Manifestdateien auf den Kubernetes-Cluster genau wie bei der Apply-Aufgabe.

k8s:watch
PAKETIEREN
Automatische Hot-Deployment der Anwendung durch Überwachung ihres Namensraums.

Bereitstellung von Java-Anwendungen auf Red Hat OpenShift mit dem OpenShift Maven Plugin

Um die Anwendung aus unserem Beispiel auf der Red Hat OpenShift-Plattform bereitzustellen, verwenden wir das Plugin OpenShift Maven. Der einzige Unterschied besteht darin, dass das Präfix der Aufgaben von k8s auf oc geändert wird. Standardmäßig erstellt das Kubernetes Maven Plugin docker-Builds, während das OpenShift Maven Plugin -Builds S2I. Wir nehmen keine Änderungen an unserem Projekt vor, außer der Entfernung der Eigenschaft jkube.generator.name, da sie beim Pushen in das Registry nicht erforderlich ist (in der Build-Phase platziert OpenShift das Image in seinem internen Registry). Und das wird auf dem Bildschirm erscheinen, wenn wir unser Beispiel ausführen, bei dem wir übrigens die Goal-Aufgaben nicht einzeln, sondern alle gleichzeitig ausführen:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn oc:build oc:resource oc:apply
[INFO] Projekte werden gescannt...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Baue random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] oc: Verwendung von OpenShift-Bau mit der Strategie S2I
[INFO] oc: Ausführung im OpenShift-Modus
[INFO] oc: Ausführung des Generators spring-boot
[INFO] oc: spring-boot: Verwendung des Docker-Images quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 als Basis \/ Builder
[INFO] oc: [random-generator:0.0.1] "spring-boot": Docker-Quell-Tar erstellt \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/docker\/random-generator\/0.0.1\/tmp\/docker-build.tar
[INFO] oc: Hinzufügen zu Secret pullsecret-jkube
[INFO] oc: Verwendung von Secret pullsecret-jkube
[INFO] oc: Erstelle BuildServiceConfig random-generator-s2i für Source-Build
[INFO] oc: Erstelle ImageStream random-generator
[INFO] oc: Starte Build random-generator-s2i
[INFO] oc: Warte auf den Abschluss des Builds random-generator-s2i-1...
[INFO] oc: Caching Blobs unter "\/var\/cache\/blobs".
[INFO] oc: Abfrage von Bildquellensignaturen
[INFO] oc: Kopieren des Blobs sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Kopieren des Blobs sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Kopieren des Blobs sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Kopieren der Konfiguration sha256:52d6788fcfdd39595264d34a3959464a5dabc1d4ef0ae188802b20fc2d6a857b
[INFO] oc: Schreiben des Manifests an das Bildziel
[INFO] oc: Speichern der Signaturen
[INFO] oc: Generierung der Docker-Datei mit dem Builder-Image quay.io\/jkube\/jkube-java-binary-s2i:0.0.7
[INFO] oc: SCHRITT 1: VON quay.io\/jkube\/jkube-java-binary-s2i:0.0.7
[INFO] oc: SCHRITT 2: BEZEICHNEN "io.openshift.build.source-location"="\/tmp\/build\/inputs"       "io.openshift.build.image"="quay.io\/jkube\/jkube-java-binary-s2i:0.0.7"
[INFO] oc: SCHRITT 3: ENV JAVA_APP_DIR="\/deployments"     OPENSHIFT_BUILD_NAME="random-generator-s2i-1"     OPENSHIFT_BUILD_NAMESPACE="default"
[INFO] oc: SCHRITT 4: USER root
[INFO] oc: SCHRITT 5: COPY upload\/src \/tmp\/src
[INFO] oc: SCHRITT 6: RUN chown -R 1000:0 \/tmp\/src
[INFO] oc: SCHRITT 7: USER 1000
[INFO] oc: SCHRITT 8: RUN \/usr\/local\/s2i\/assemble
[INFO] oc: INFO S2I-Quell-Build mit einfachen Binaries erkannt
[INFO] oc: INFO S2I-Binär-Build von fabric8-maven-plugin erkannt
[INFO] oc: INFO Kopieren der Binaries von \/tmp\/src\/deployments zu \/deployments ...
[INFO] oc: random-generator-0.0.1.jar
[INFO] oc: INFO Kopieren der Deployments von deployments nach \/deployments...
[INFO] oc: '\/tmp\/src\/deployments\/random-generator-0.0.1.jar' -> '\/deployments\/random-generator-0.0.1.jar'
[INFO] oc: SCHRITT 9: CMD \/usr\/local\/s2i\/run
[INFO] oc: SCHRITT 10: COMMIT temp.builder.openshift.io\/default\/random-generator-s2i-1:48795e41
[INFO] oc: time="2020-08-10T06:37:49Z" level=info msg="Bild-Betriebssystem-Mismatch: Bild verwendet "", erwartet "linux""
[INFO] oc: time="2020-08-10T06:37:49Z" level=info msg="Bild-Architektur-Mismatch: Bild verwendet "", erwartet "amd64""
[INFO] oc: Abfrage von Bildquellensignaturen
[INFO] oc: Kopieren des Blobs sha256:d8e1f35641acb80b562f70cf49911341dfbe8c86f4d522b18efbf3732aa74223
[INFO] oc: Kopieren des Blobs sha256:b6f081e4b2b6de8be4b1dec132043d14c121e968384dd624fb69c2c07b482edb
[INFO] oc: Kopieren des Blobs sha256:b7139ad07aa8ce4ed5a132f7c5cc9f1de0f5099b5e155027a23d57f7fbe78b16
[INFO] oc: Kopieren des Blobs sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Kopieren der Konfiguration sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Schreiben des Manifests an das Bildziel
[INFO] oc: Speichern der Signaturen
[INFO] oc: --> 27aaadaf28e
[INFO] oc: 27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Abfrage von Bildquellensignaturen
[INFO] oc: 
[INFO] oc: Bild pushen image-registry.openshift-image-registry.svc:5000\/default\/random-generator:0.0.1 ...
[INFO] oc: Kopieren des Blobs sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Kopieren des Blobs sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Kopieren des Blobs sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Kopieren des Blobs sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Kopieren der Konfiguration sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Schreiben des Manifests an das Bildziel
[INFO] oc: Speichern der Signaturen
[INFO] oc: Erfolgreich gepusht image-registry.openshift-image-registry.svc:5000\/default\/random-generator@sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: Push erfolgreich
[INFO] oc: Build random-generator-s2i-1 im Status abgeschlossen
[INFO] oc: Tag auf ImageStream random-generator gefunden Tag: sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: ImageStream random-generator in /home/rohaan/work/repos/eclipse-jkube-demo-project/target/random-generator-is.yml gespeichert
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:resource (default-cli) @ random-generator ---
[INFO] oc: Verwendung des Docker-Image-Namens des Namensraums: default
[INFO] oc: Ausführung des Generators spring-boot
[INFO] oc: spring-boot: Verwendung des Docker-Images quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 als Basis \/ Builder
[INFO] oc: jkube-controller: Fügen Sie eine Standard-DeploymentConfig hinzu
[INFO] oc: jkube-service: Fügen Sie einen Standarddienst 'random-generator' mit Ports [8080] hinzu
[INFO] oc: jkube-healthcheck-spring-boot: Hinzufügen der Readiness-Prüfung am Port 8080, Pfad='\/actuator\/health', Schema='HTTP', mit anfänglicher Verzögerung von 10 Sekunden
[INFO] oc: jkube-healthcheck-spring-boot: Hinzufügen der Liveness-Prüfung am Port 8080, Pfad='\/actuator\/health', Schema='HTTP', mit anfänglicher Verzögerung von 180 Sekunden
[INFO] oc: jkube-revision-history: Hinzufügen einer Versionshistory-Begrenzung von 2
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] oc: Verwendung von OpenShift unter https:\/\/api.crc.testing:6443\/ im Namensraum default mit Manifest \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/classes\/META-INF\/jkube\/openshift.yml 
[INFO] oc: OpenShift-Plattform erkannt
[INFO] oc: Verwendung des Projekts: default
[INFO] oc: Erstelle einen Dienst aus openshift.yml Namensraum default Name random-generator
[INFO] oc: Dienst erstellt: target\/jkube\/applyJson\/default\/service-random-generator.json
[INFO] oc: Erstelle eine DeploymentConfig aus openshift.yml Namensraum default Name random-generator
[INFO] oc: DeploymentConfig erstellt: target\/jkube\/applyJson\/default\/deploymentconfig-random-generator.json
[INFO] oc: Erstelle Route default:random-generator Host: null
[INFO] oc: HINWEIS: Verwenden Sie den Befehl `oc get pods -w`, um zu sehen, wie Ihre Pods starten
[INFO] ------------------------------------------------------------------------
[INFO] BUILD ERFOLGREICH
[INFO] ------------------------------------------------------------------------
[INFO] Gesamtzeit: 01:07 min
[INFO] Beendet am: 2020-08-10T12:08:00+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ oc get pods -w
NAME                           READY     STATUS      RESTARTS   AGE
random-generator-1-deploy      1\/1       Laufen     0          14s
random-generator-1-vnrm9       0\/1       Laufen     0          11s
random-generator-s2i-1-build   0\/1       Abgeschlossen   0          1m
random-generator-1-vnrm9   1\/1       Laufen   0         24s
random-generator-1-deploy   0\/1       Abgeschlossen   0         28s
~\/work\/repos\/eclipse-jkube-demo-project : $ oc get routes
NAME                HOST\/PORT                                    PATH      SERVICES            PORT      TERMINATION   WILDCARD
random-generator    random-generator-default.apps-crc.testing              random-generator    8080                    None
~\/work\/repos\/eclipse-jkube-demo-project : $ curl random-generator-default.apps-crc.testing\/random 
  % Gesamt    % Empfangen % Xferd  Durchschnittsgeschwindigkeit   Zeit    Zeit     Zeit  Aktuell
                                 Dload  Hochladen   Gesamt   Ausgegeben   Verbleibend  Geschwindigkeit
100    45    0    45    0     0   1666      0 --:--:-- --:--:-- --:--:--  1730
{
  "id": "d80052d9-2f92-43cb-b9eb-d7cffb879798"
}
~\/work\/repos\/eclipse-jkube-demo-project : $

Video-Tutorial

Um mehr darüber zu erfahren, wie Sie die Kubernetes-Entwicklung mit Eclipse JKube vereinfachen können, schauen Sie sich das Video-Tutorial zur schnellen Bereitstellung einer einfachen Spring Boot-Anwendung auf Minikube an:

Video abspielen

Fazit

In diesem Artikel haben wir gezeigt, wie Eclipse JKube das Leben von Java-Entwicklern bei der Arbeit mit Kubernetes erleichtert. Weitere Informationen zu Eclipse JKube finden Sie unter der Projektwebsite und auf GitHub.

Quelle: habr.com

60GB SSD 8Gb DDR4