Java Uwendungen fir Kubernetes entwéckelen mat Eclipse JKube

Virun 25 Joer ass Java an de Mainstream vun der Programméierung agaangen a gouf schlussendlech ee vun de Kärelementer ronderëm déi Applikatiounsstack gebaut ginn. Haut awer, vill Leit an Organisatiounen, déi fir vill Joren zu Java trei waren, si beschäftegt ze migréieren oder iwwerleeën op d'Plattform ze migréieren. Kubernetes oder seng Derivate wéi Red Hat OpenShift oder Amazon EKS.

Java Uwendungen fir Kubernetes entwéckelen mat Eclipse JKube

Leider huet Kubernetes eng géi Léierkurve an stellt eng aner operationell Schicht an den Entwécklungsprozess vir, un deem Java Programméierer gewinnt sinn. Haut wäerte mir Iech soen wéi Dir benotzt Sonnendäischtert JKube, fir dës zousätzlech Operatiounen, déi mat Kubernetes a Container verbonne sinn, ze vereinfachen, an eng schmerzlos Migratioun op d'Wollekplattform ze garantéieren, während de vertraute Java-Ökosystem behalen. Ausserdeem wäerte mir weisen wéi Java Uwendungen op der OpenShift Plattform ofgebaut ginn mam OpenShift Maven Plugin.

Traditionell Java Entwécklung Prozess

Traditionell Entwécklung Prozess Java (Figur 1) involvéiert den Entwéckler Code ze schreiwen, dann Deployment Eenheeten a Form vu JAR oder WAR Dateien ze kreéieren, an dann dës Dateien op engem Web oder Applikatiounsserver z'installéieren an ze lafen. Den Haapt Wee fir dëst ze maachen ass Maven vun der Kommandozeil ze benotzen oder eng IDE wéi IntelliJ oder Eclipse ze benotzen fir d'Applikatiounen ze codéieren an ze packen. D'Entwéckler gi benotzt fir Code Ännerungen ze maachen an alles grëndlech ze testen ier se de Code engagéieren an en an d'Versiounskontroll ofginn.

Java Uwendungen fir Kubernetes entwéckelen mat Eclipse JKube

Reis. 1. Traditionell Java Entwécklung Prozess.

Java Entwécklungsprozess fir d'Cloud

Wann Dir op d'Wollekapplikatioune bewegt, Kubernetes an Container. Dofir muss den Entwéckler elo Java Uwendungen packen Container Biller a schafen Kubernetes Manifestatiounen datt dës Biller beschreiwen. Dës Manifestatiounen ginn dann op de Produktiounsserver applizéiert deen Kubernetes leeft. Am Tour hëlt Kubernetes dës Biller aus der Registry an setzt Uwendungen no de Konfiguratiounen, déi mir a Manifestatiounen geschriwwen hunn, déi normalerweis YAML-Dateien sinn.

D'Metamorphose vum traditionelle Java Entwécklungsprozess am Iwwergank zu der Wollek gëtt a Fig. 2.

Java Uwendungen fir Kubernetes entwéckelen mat Eclipse JKube

Reis. 2. Java Entwécklung Prozess fir d'Wollek.

Sonnendäischtert JKube

Migratioun op Kubernetes füügt eng aner operationell Schicht un den Entwécklungsprozess, a vill Entwéckler sinn nervös doriwwer, well se wëllen op hir Käraarbecht konzentréieren - d'Applikatiounslogik - anstatt wéi se se ofsetzen. An dat ass wou et an d'Spill kënnt. Sonnendäischtert JKube, wat d'Entwéckler erlaabt hir Bibliothéiken a Plugins ze benotzen (JKube Kit zesumme mat Kubernetes Maven Plugin oder OpenShift Maven Plugin) fir ouni Ustrengung Container a Kubernetes-relatéiert Operatiounen auszeféieren andeems Dir d'Diagramm an der Figur verfollegt. 2.

Am Rescht vun dësem Artikel wäerte mir Iech weisen wéi Dir de Java Entwécklungsprozess am Kubernetes Ëmfeld vereinfacht andeems Dir Eclipse JKube mam Kubernetes Maven Plugin benotzt.

Cloud Entwécklungsprozess Mat Eclipse JKube

Loosst eis e liicht modifizéierten Java Entwécklungsschema fir d'Wollek aus der Fig. 2.

Java Uwendungen fir Kubernetes entwéckelen mat Eclipse JKube

Reis. 3. Java Entwécklung Prozess fir d'Wollek benotzt Eclipse JKube.

Wéi mir kënne gesinn, ginn hei all Operatiounen fir Interaktioun mat Kubernetes a Container (rout am Diagramm markéiert) duerch Standard Eclipse JKube Zil Aufgaben ersat, déi an der Tabell opgelëscht sinn. 1.

Dësch 1. Eclipse JKube Standard Aufgaben.

Objective
Bühn
Beschreiwung

k8s: vum
PRE_INTEGRATION_TEST
Bauen Docker Biller

k8s :zu
installéieren
Eroplueden Docker Biller an de Registry

k8s: Ressource
PROCESS_RESOURCES
Generéiere K8s Manifestatiounen

k8s: op
KOMPILEREN
Gëlle generéiert Manifestatiounen op K8s

k8s: ofbaut
UNEPLOYEN
Ewechzehuelen K8s Ressourcen déi agesat goufen mat k8s: apply an k8s: deploy

Opgepasst: Wann Dir net wëllt datt Aufgaben dës Meenungsverschiddenheete benotzen, kënnt Dir manuell Eclipse JKube fir Iech selwer konfiguréieren, well et d'Konfiguratioun iwwer ënnerstëtzt XML и Ressourcen.

Loosst eis elo Beispiller kucken fir Eclipse JKube a Kubernetes Maven Plugin ze benotzen wann Dir mat Uwendungen schafft.

Eng Java Applikatioun op Kubernetes z'installéieren mat Eclipse JKube

An dësem Beispill wäerte mir eng einfach Java Applikatioun op engem Cluster ofsetzen Minikube benotzt Eclipse JKube. Mat dem Kubernetes Maven Plugin kënne mir Deploymentparameter setzen ouni eng Konfiguratioun ze schreiwen.

Als Beispill Applikatioun benotze mir einfach zoufälleg Zuel Generator, déi JSON Output am / random Endpunkt produzéiert:

~/work/repos/eclipse-jkube-demo-project : $ curl localhost:8080/random | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    45    0    45    0     0    818      0 --:--:-- --:--:-- --:--:--   818
{
  "id": "e80a4d10-c79b-4b9a-aaac-7c286cb37f3c"
}

Schrëtt 1. Luet Kubernetes Maven Plugin

Kubernetes Maven Plugin ass am Repository Maven Central Repository. Fir Eclipse JKube ze benotzen, musst Dir de Kubernetes Maven Plugin op Är pom.xml als Ofhängegkeet addéieren:

<plugin>
     <groupId>org.eclipse.jkube</groupId>
     <artifactId>kubernetes-maven-plugin</artifactId>
     <version>${jkube.version}</version>
 </plugin>

Wann OpenShift benotzt gëtt anstatt pure Kubernetes, da gëtt pom.xml wéi follegt geännert:

<plugin>
     <groupId>org.eclipse.jkube</groupId>
     <artifactId>openshift-maven-plugin</artifactId>
     <version>${jkube.version}</version>
 </plugin>

Schrëtt 2. Bauen d'Docker Bild

D'JAR-Datei vun der Applikatioun kann mam mvn Package Kommando gebaut ginn, an dann kann d'mvn Zil Task k8s:build benotzt ginn fir en Docker Bild vun der Applikatioun ze bauen. Notéiert datt mir den Standardbildnumm mat dëser Immobilie iwwerschratt hunn:

<jkube.generator.name>docker.io/rohankanojia/random-generator:${project.version}</jkube.generator.name>

Ier Dir d'Bild baut, musst Dir sécher sinn datt den Docker Daemon richteg ausgesat ass. Dëst kann mat dem folgenden Kommando gemaach ginn:

$ eval $(minikube docker-env)

Da gitt mir de mvn k8s:build Kommando an, an dat ass wat mir um Bildschierm gesinn wann Dir den Docker Bild mat der Eclipse JKube Build Task bauen:

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:build
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Building random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] k8s: Running in Kubernetes mode
[INFO] k8s: Building Docker image in Kubernetes mode
[INFO] k8s: Running generator spring-boot
[INFO] k8s: spring-boot: Using Docker image quay.io/jkube/jkube-java-binary-s2i:0.0.7 as base / builder
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Created docker-build.tar in 251 milliseconds
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Built image sha256:a20e5
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  5.053 s
[INFO] Finished at: 2020-08-10T11:28:23+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $

Schrëtt 3. Eroplueden d'Bild op d'Docker Registry

Nodeems mir den Docker-Bild mat der Push-Registry konfiguréiert hunn (an eisem Fall ass et docker.io), kënne mir dëst Bild an d'Registry schécken. Dëst ass wat ugewise gëtt nodeems mir Eclipse JKube froen d'mvn k8s: Push Push Task auszeféieren:

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:push
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Building random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:push (default-cli) @ random-generator ---
[INFO] k8s: Running in Kubernetes mode
[INFO] k8s: Building Docker image in Kubernetes mode
[INFO] k8s: Running generator spring-boot
[INFO] k8s: spring-boot: Using Docker image quay.io/jkube/jkube-java-binary-s2i:0.0.7 as base / builder
[INFO] k8s: The push refers to repository [docker.io/rohankanojia/random-generator]
5dcd9556710f: Layer already exists 
b7139ad07aa8: Layer already exists 
b6f081e4b2b6: Layer already exists 
d8e1f35641ac: Layer already exists 
[INFO] k8s: 0.0.1: digest: sha256:9f9eda2a13b8cab1d2c9e474248500145fc09e2922fe3735692f9bda4c76002d size: 1162
[INFO] k8s: Pushed docker.io/rohankanojia/random-generator:0.0.1 in 7 seconds 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  11.222 s
[INFO] Finished at: 2020-08-10T11:35:37+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $ 

Nodeems Dir d'Bild geschéckt hutt, musst Dir kucken ob et am Registry abegraff ass. An eisem Fall gesi mir et einfach am Docker Hub, wéi an der Fig. 4.

Java Uwendungen fir Kubernetes entwéckelen mat Eclipse JKube

Reis. 4. D'Bild an d'Registry geschéckt erschéngt am Docker Hub.

Schrëtt 4. Generéiere Kubernetes Ressource Manifestatiounen fir d'Applikatioun

Also, mir hunn d'Applikatiounsbild gesammelt, elo musse mir Kubernetes Manifestatiounen schreiwen. Fir dëst ze maachen, huet Eclipse JKube eng Aufgab déi steiwe Ressource Manifestatiounen generéiert baséiert op dem Basisdaten Java Kader (Fréijoer Boot, Quark, Vert.x oder soss). Dir kënnt och de Manifest personaliséieren andeems Dir eng XML Konfiguratiounsdatei benotzt a réi Fragmenter (Fragmenter vum erfuerderleche Ressource Manifest) an den Uwendungsdossier src/main/jkube placéiert. An dësem Fall gëtt Är Konfiguratioun op déi generéiert Manifestatiounen eropgelueden.

An eisem Beispill verloosse mir alles wéi ass, an dofir generéiert Eclipse JKube e Manifest fir d'Default Deployment a fir de Service mam Typ ClusterIP. An nëmmen dann änneren mir de Service Manifest fir de Service Typ op NodePort z'änneren. Dir kënnt d'Standardverhalen iwwerschreiden andeems Dir déi folgend Eegeschafte benotzt:

<jkube.enricher.jkube-service.type>NodePort</jkube.enricher.jkube-service.type>

Dëst ass wéi d'Bildschirmoutput ausgesäit nodeems mir Eclipse JKube froen d'mvn k8s: Ressource Ressource Task auszeféieren.

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:resource
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Building random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:resource (default-cli) @ random-generator ---
[INFO] k8s: Running generator spring-boot
[INFO] k8s: spring-boot: Using Docker image quay.io/jkube/jkube-java-binary-s2i:0.0.7 as base / builder
[INFO] k8s: jkube-controller: Adding a default Deployment
[INFO] k8s: jkube-service: Adding a default service 'random-generator' with ports [8080]
[INFO] k8s: jkube-healthcheck-spring-boot: Adding readiness probe on port 8080, path='/actuator/health', scheme='HTTP', with initial delay 10 seconds
[INFO] k8s: jkube-healthcheck-spring-boot: Adding liveness probe on port 8080, path='/actuator/health', scheme='HTTP', with initial delay 180 seconds
[INFO] k8s: jkube-revision-history: Adding revision history limit to 2
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.344 s
[INFO] Finished at: 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: [email protected]: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 : $

Schrëtt 5. Deploy d'Applikatioun op de Kubernetes Cluster

Elo si mir alles prett fir d'Applikatioun z'installéieren: mir hunn säi Bild generéiert an dann automatesch Ressourcemanifester generéiert. Elo bleift alles alles op de Kubernetes Cluster anzesetzen. Fir d'Applikatioun z'installéieren, kënnt Dir selbstverständlech de Kommando kubectl application -f benotzen, awer de Plugin kann dat fir eis maachen. Dëst ass wat um Bildschierm erschéngt nodeems mir d'Eclipse JKube froen fir d'mvn k8s auszeféieren: apply application task:

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:apply
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Building random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:apply (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: Creating a Service from kubernetes.yml namespace default name random-generator
[INFO] k8s: Created Service: target/jkube/applyJson/default/service-random-generator.json
[INFO] k8s: Creating a Deployment from kubernetes.yml namespace default name random-generator
[INFO] k8s: Created Deployment: target/jkube/applyJson/default/deployment-random-generator.json
[INFO] k8s: HINT: Use the command `kubectl get pods -w` to watch your pods start up
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  7.306 s
[INFO] Finished at: 2020-08-10T11:40:57+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $ kubectl get pods -w
NAME                                                     READY   STATUS             RESTARTS   AGE
random-generator-58b7847d7f-9m9df                        0/1     Running            0          7s
random-generator-58b7847d7f-9m9df                        1/1     Running            0          17s
^C~/work/repos/eclipse-jkube-demo-project : $ kubectl get svc
NAME                                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
io-openliberty-sample-getting-started   NodePort    10.110.4.104    <none>        9080:30570/TCP    44h
kubernetes                              ClusterIP   10.96.0.1       <none>        443/TCP           18d
random-generator                        NodePort    10.97.172.147   <none>        8080:32186/TCP    22s
~/work/repos/eclipse-jkube-demo-project : $ curl `minikube ip`:32186/random | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    45    0    45    0     0   1800      0 --:--:-- --:--:-- --:--:--  1875
{
  "id": "42e5571f-a20f-44b3-8184-370356581d10"
}

Schrëtt 6. Undeploy Applikatiounen aus dem Kubernetes Cluster

Fir dëst ze maachen, gëtt d'Undeploy Task benotzt, déi einfach all Ressourcen läscht, déi am virege Schrëtt applizéiert goufen, dat heescht wann d'Uwendungstask ausgefouert gëtt. Dëst ass wat mir um Bildschierm gesinn nodeems mir Eclipse JKube froen d'mvn k8s: undeploy undeploy Task auszeféieren:

~/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       <none>        443/TCP          18d
service/random-generator   NodePort    10.97.172.147   <none>        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] ----------------------< meetup:random-generator >-----------------------
[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    <none>        443/TCP   18d
~/work/repos/eclipse-jkube-demo-project : $

Wat soss kënnt Dir mat Eclipse JKube maachen

Also hu mir d'Haaptziel Aufgaben vun Eclipse JKube a Kubernetes Maven Plugin gekuckt, déi d'Entwécklung vu Java Uwendungen fir d'Kubernetes Plattform erliichteren. Wann Dir dës Aufgaben net permanent vun der Tastatur wëllt aginn, kënnt Dir se an der Plugin Konfiguratioun schreiwen, zum Beispill, sou:

<plugin>
     <groupId>org.eclipse.jkube</groupId>
     <artifactId>kubernetes-maven-plugin</artifactId>
     <version>${project.version}</version>
     <executions>
         <execution>
             <goals>
                  <goal>build</goal>
                  <goal>resource</goal>
                  <goal>apply</goal>
             </goals>
         </execution>
     </executions>
</plugin>

Et muss gesot ginn, datt mir an dësem Artikel net all Zil Aufgaben considéréiert hunn, datt am Eclipse JKube an Kubernetes Maven Plugin sinn, also mir bidden an Table 2 eng Lëscht vun zousätzlech Aufgaben, datt och fir Iech nëtzlech kann.

Dësch 2. Zousätzlech Eclipse JKube Goal Aufgaben.

Objective
Bühn
Beschreiwung

k8s: vun
VALIDATEN
Logbicher vun enger Applikatioun déi op Kubernetes leeft kréien.

k8s: debug
PACKAGE
Öffnen en Debugport fir datt Dir Är Applikatioun op Kubernetes direkt vun der IDE debugéiere kënnt.

k8s: op
installéieren
Eng Gabel fir d'Install Task erstellen an déi generéiert Manifestatiounen op de Kubernetes Cluster anzesetzen op déiselwecht Manéier wéi am Fall vun der Applikatioun.

k8s:kuck
PACKAGE
Automatesch Hot Deployment vun enger Applikatioun andeems se säin Nummraum verfollegen.

Java Uwendungen op Red Hat OpenShift z'installéieren Mat dem OpenShift Maven Plugin

Fir d'Applikatioun aus eisem Beispill op der Red Hat OpenShift Plattform z'installéieren, benotze mir de Plugin OpenShift Maven. Deen eenzegen Ënnerscheed wäert sinn datt d'Taskpräfix vun k8s op oc änneren. Par défaut mécht de Kubernetes Maven Plugin Docker-Versammlungen, an den OpenShift Maven Plugin - Versammlungen S2 ech. Mir maachen keng Ännerunge fir eise Projet, ausser fir d'Eegeschaft jkube.generator.name ze läschen, well et net erfuerderlech ass wann Dir an d'Registry dréckt (Während der Bauphase setzt OpenShift d'Bild a sengem internen Registry). An dat ass wat um Écran erschéngt wa mir eist Beispill lafen, an deem mir iwwregens Zilaufgaben net een gläichzäiteg ausféieren, awer all op eemol:

~/work/repos/eclipse-jkube-demo-project : $ mvn oc:build oc:resource oc:apply
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Building random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] oc: Using OpenShift build with strategy S2I
[INFO] oc: Running in OpenShift mode
[INFO] oc: Running generator spring-boot
[INFO] oc: spring-boot: Using Docker image quay.io/jkube/jkube-java-binary-s2i:0.0.7 as base / builder
[INFO] oc: [random-generator:0.0.1] "spring-boot": Created docker source tar /home/rohaan/work/repos/eclipse-jkube-demo-project/target/docker/random-generator/0.0.1/tmp/docker-build.tar
[INFO] oc: Adding to Secret pullsecret-jkube
[INFO] oc: Using Secret pullsecret-jkube
[INFO] oc: Creating BuildServiceConfig random-generator-s2i for Source build
[INFO] oc: Creating ImageStream random-generator
[INFO] oc: Starting Build random-generator-s2i
[INFO] oc: Waiting for build random-generator-s2i-1 to complete...
[INFO] oc: Caching blobs under "/var/cache/blobs".
[INFO] oc: Getting image source signatures
[INFO] oc: Copying blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Copying blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Copying blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Copying config sha256:52d6788fcfdd39595264d34a3959464a5dabc1d4ef0ae188802b20fc2d6a857b
[INFO] oc: Writing manifest to image destination
[INFO] oc: Storing signatures
[INFO] oc: Generating dockerfile with builder image quay.io/jkube/jkube-java-binary-s2i:0.0.7
[INFO] oc: STEP 1: FROM quay.io/jkube/jkube-java-binary-s2i:0.0.7
[INFO] oc: STEP 2: LABEL "io.openshift.build.source-location"="/tmp/build/inputs"       "io.openshift.build.image"="quay.io/jkube/jkube-java-binary-s2i:0.0.7"
[INFO] oc: STEP 3: ENV JAVA_APP_DIR="/deployments"     OPENSHIFT_BUILD_NAME="random-generator-s2i-1"     OPENSHIFT_BUILD_NAMESPACE="default"
[INFO] oc: STEP 4: USER root
[INFO] oc: STEP 5: COPY upload/src /tmp/src
[INFO] oc: STEP 6: RUN chown -R 1000:0 /tmp/src
[INFO] oc: STEP 7: USER 1000
[INFO] oc: STEP 8: RUN /usr/local/s2i/assemble
[INFO] oc: INFO S2I source build with plain binaries detected
[INFO] oc: INFO S2I binary build from fabric8-maven-plugin detected
[INFO] oc: INFO Copying binaries from /tmp/src/deployments to /deployments ...
[INFO] oc: random-generator-0.0.1.jar
[INFO] oc: INFO Copying deployments from deployments to /deployments...
[INFO] oc: '/tmp/src/deployments/random-generator-0.0.1.jar' -> '/deployments/random-generator-0.0.1.jar'
[INFO] oc: STEP 9: CMD /usr/local/s2i/run
[INFO] oc: STEP 10: COMMIT temp.builder.openshift.io/default/random-generator-s2i-1:48795e41
[INFO] oc: time="2020-08-10T06:37:49Z" level=info msg="Image operating system mismatch: image uses "", expecting "linux""
[INFO] oc: time="2020-08-10T06:37:49Z" level=info msg="Image architecture mismatch: image uses "", expecting "amd64""
[INFO] oc: Getting image source signatures
[INFO] oc: Copying blob sha256:d8e1f35641acb80b562f70cf49911341dfbe8c86f4d522b18efbf3732aa74223
[INFO] oc: Copying blob sha256:b6f081e4b2b6de8be4b1dec132043d14c121e968384dd624fb69c2c07b482edb
[INFO] oc: Copying blob sha256:b7139ad07aa8ce4ed5a132f7c5cc9f1de0f5099b5e155027a23d57f7fbe78b16
[INFO] oc: Copying blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Copying config sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Writing manifest to image destination
[INFO] oc: Storing signatures
[INFO] oc: --> 27aaadaf28e
[INFO] oc: 27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Getting image source signatures
[INFO] oc: 
[INFO] oc: Pushing image image-registry.openshift-image-registry.svc:5000/default/random-generator:0.0.1 ...
[INFO] oc: Copying blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Copying blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Copying blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Copying blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Copying config sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Writing manifest to image destination
[INFO] oc: Storing signatures
[INFO] oc: Successfully pushed image-registry.openshift-image-registry.svc:5000/default/random-generator@sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: Push successful
[INFO] oc: Build random-generator-s2i-1 in status Complete
[INFO] oc: Found tag on ImageStream random-generator tag: sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: ImageStream random-generator written to /home/rohaan/work/repos/eclipse-jkube-demo-project/target/random-generator-is.yml
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:resource (default-cli) @ random-generator ---
[INFO] oc: Using docker image name of namespace: default
[INFO] oc: Running generator spring-boot
[INFO] oc: spring-boot: Using Docker image quay.io/jkube/jkube-java-binary-s2i:0.0.7 as base / builder
[INFO] oc: jkube-controller: Adding a default DeploymentConfig
[INFO] oc: jkube-service: Adding a default service 'random-generator' with ports [8080]
[INFO] oc: jkube-healthcheck-spring-boot: Adding readiness probe on port 8080, path='/actuator/health', scheme='HTTP', with initial delay 10 seconds
[INFO] oc: jkube-healthcheck-spring-boot: Adding liveness probe on port 8080, path='/actuator/health', scheme='HTTP', with initial delay 180 seconds
[INFO] oc: jkube-revision-history: Adding revision history limit to 2
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] oc: Using OpenShift at https://api.crc.testing:6443/ in namespace default with manifest /home/rohaan/work/repos/eclipse-jkube-demo-project/target/classes/META-INF/jkube/openshift.yml 
[INFO] oc: OpenShift platform detected
[INFO] oc: Using project: default
[INFO] oc: Creating a Service from openshift.yml namespace default name random-generator
[INFO] oc: Created Service: target/jkube/applyJson/default/service-random-generator.json
[INFO] oc: Creating a DeploymentConfig from openshift.yml namespace default name random-generator
[INFO] oc: Created DeploymentConfig: target/jkube/applyJson/default/deploymentconfig-random-generator.json
[INFO] oc: Creating Route default:random-generator host: null
[INFO] oc: HINT: Use the command `oc get pods -w` to watch your pods start up
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:07 min
[INFO] Finished at: 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       Running     0          14s
random-generator-1-vnrm9       0/1       Running     0          11s
random-generator-s2i-1-build   0/1       Completed   0          1m
random-generator-1-vnrm9   1/1       Running   0         24s
random-generator-1-deploy   0/1       Completed   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 
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100    45    0    45    0     0   1666      0 --:--:-- --:--:-- --:--:--  1730
{
"id": "d80052d9-2f92-43cb-b9eb-d7cffb879798"
}
~/work/repos/eclipse-jkube-demo-project : $

Video Lektioun

Fir méi ze léieren iwwer d'Kubernetes Entwécklung méi einfach mat Eclipse JKube ze maachen, kuckt dëse Video Tutorial wéi Dir séier eng einfach Spring Boot Applikatioun op Minikube ofsetzt:

Konklusioun

An dësem Artikel hu mir gewisen wéi Eclipse JKube d'Liewen méi einfach mécht fir e Java Entwéckler wann Dir mat Kubernetes schafft. Méi Informatioun iwwer Eclipse JKube fannt Dir op Projet Websäit an un GitHub.

Source: will.com

Setzt e Commentaire