Java-applikaasjes ûntwikkelje foar Kubernetes mei Eclipse JKube

25 jier lyn kaam Java yn 'e mainstream fan programmearring en waard úteinlik ien fan 'e kearneleminten dêr't applikaasjestapels omhinne boud wurde. Tsjintwurdich binne lykwols in protte minsken en organisaasjes dy't in protte jierren trou west hawwe oan Java, drok dwaande mei migrearjen of oerwage te migrearjen nei it platfoarm. Kubernetes of syn derivatives lykas RedHat OpenShift of Amazon EKS.

Java-applikaasjes ûntwikkelje foar Kubernetes mei Eclipse JKube

Spitigernôch hat Kubernetes in steile learkurve en yntrodusearret in oare operasjonele laach yn it ûntwikkelingsproses dat Java-programmeurs wend binne. Hjoed sille wy jo fertelle hoe te brûken Eclipse JKube, om dizze ekstra operaasjes te ferienfâldigjen dy't ferbûn binne mei Kubernetes en konteners, en soargje foar in pynlike migraasje nei it wolkplatfoarm, wylst it fertroude Java-ekosysteem behâldt. Boppedat sille wy sjen litte hoe't jo Java-applikaasjes kinne ynsette op it OpenShift-platfoarm mei it OpenShift Maven-plugin.

Tradisjoneel Java-ûntwikkelingsproses

Tradisjoneel ûntwikkelingsproses Java (Figure 1) giet it om dat de ûntwikkelder koade skriuwt, dan ynset-ienheden oanmeitsje yn 'e foarm fan JAR- of WAR-bestannen, en dan dizze bestannen ynsette en útfiere op in web- of applikaasjetsjinner. De wichtichste manier om dit te dwaan is om Maven te brûken fan 'e kommandorigel of in IDE te brûken lykas IntelliJ of Eclipse om de applikaasjes te kodearjen en te pakken. Untwikkelders binne wend om koadewizigingen te meitsjen en alles goed te testen foardat se de koade ynsette en it yntsjinje oan ferzjekontrôle.

Java-applikaasjes ûntwikkelje foar Kubernetes mei Eclipse JKube

Rys. 1. Tradisjoneel Java ûntwikkeling proses.

Java-ûntwikkelingsproses foar de wolk

By it ferpleatsen nei wolk applikaasjes, Kubernetes en konteners. Dêrom moat de ûntwikkelder no Java-applikaasjes ynpakke container ôfbyldings en meitsje Kubernetes manifests dy't beskriuwe dizze bylden. Dizze manifesten wurde dan tapast op de produksjetsjinner dy't Kubernetes draait. Op syn beurt nimt Kubernetes dizze ôfbyldings út it register en set applikaasjes yn neffens de konfiguraasjes dy't wy hawwe skreaun yn manifesten, dy't normaal YAML-bestannen binne.

De metamorfoaze fan it tradisjonele Java-ûntwikkelingsproses yn 'e oergong nei de wolk wurdt werjûn yn Fig. 2.

Java-applikaasjes ûntwikkelje foar Kubernetes mei Eclipse JKube

Rys. 2. Java ûntwikkeling proses foar de wolk.

Eclipse JKube

Migrearjen nei Kubernetes foeget in oare operasjonele laach ta oan it ûntwikkelingsproses, en in protte ûntwikkelders binne der senuweftich oer om't se wolle rjochtsje op har kearnwurk - de applikaasjelogika - ynstee fan hoe't se se ynsette. En dit is wêr't it yn spiel komt. Eclipse JKube, wêrtroch ûntwikkelders har bibleteken en plugins kinne brûke (JKube Kit tegearre mei Kubernetes Maven Plugin of OpenShift Maven Plugin) om kontener- en Kubernetes-relatearre operaasjes maklik út te fieren troch it diagram yn figuer te folgjen. 2.

Yn 'e rest fan dit artikel sille wy jo sjen litte hoe't jo it Java-ûntwikkelingsproses yn 'e Kubernetes-omjouwing ferienfâldigje kinne troch Eclipse JKube te brûken mei de Kubernetes Maven Plugin.

Wolkenûntwikkelingsproses mei Eclipse JKube

Lit ús beskôgje in bytsje feroare Java ûntwikkeling skema foar de wolk út Fig. 2.

Java-applikaasjes ûntwikkelje foar Kubernetes mei Eclipse JKube

Rys. 3. Java ûntwikkeling proses foar de wolk mei help fan Eclipse JKube.

Sa't wy kinne sjen, hjir alle operaasjes foar ynteraksje mei Kubernetes en konteners (markearre yn read yn it diagram) wurde ferfongen troch standert Eclipse JKube doel taken, dy't steane yn tabel. 1.

Tafel 1. Eclipse JKube standert taken.

Objective
Stage
beskriuwing

k8s: boud
PRE_INTEGRATION_TEST
Bouwe docker-ôfbyldings

k8s: ryk
YNSTALLEARJE
Upload docker-ôfbyldings nei it register

k8s: boarne
PROCESS_RESOURCES
Generearjen fan K8s manifestearret

k8s: oan
KOMPILJE
It tapassen fan generearre manifesten op K8s

k8s: ynset
UNEPLOY
K8s-boarnen fuortsmite dy't waarden ynset mei k8s: tapasse en k8s: ynsette

Tink derom: As jo ​​​​net wolle dat taken dizze opfettende standerts brûke, kinne jo Eclipse JKube manuell foar josels konfigurearje, om't it konfiguraasje stipet fia XML и boarnen.

Litte wy no nei foarbylden sjen fan it brûken fan Eclipse JKube en Kubernetes Maven Plugin by it wurkjen mei applikaasjes.

In Java-applikaasje ynsette op Kubernetes mei Eclipse JKube

Yn dit foarbyld sille wy in ienfâldige Java-applikaasje ynsette op in kluster Minikube mei help fan Eclipse JKube. Mei de Kubernetes Maven Plugin kinne wy ​​ynsetparameters ynstelle sûnder konfiguraasje te skriuwen.

As foarbyldapplikaasje brûke wy ienfâldige willekeurige getallengenerator, dy't JSON-útfier produsearret op it / random einpunt:

~/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"
}

Stap 1. Download Kubernetes Maven Plugin

Kubernetes Maven Plugin is yn 'e repository Maven Central Repository. Om Eclipse JKube te brûken moatte jo de Kubernetes Maven Plugin tafoegje oan jo pom.xml as ôfhinklikens:

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

As OpenShift brûkt wurdt ynstee fan suvere Kubernetes, dan wurdt pom.xml as folget wizige:

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

Stap 2. Bou de dockerôfbylding

It JAR-bestân fan 'e applikaasje kin boud wurde mei it kommando mvn-pakket, en dan kin de mvn-doeltaak k8s:build brûkt wurde om in dockerôfbylding fan 'e applikaasje te bouwen. Tink derom dat wy de standertôfbyldingsnamme hawwe oerskreaun mei dizze eigenskip:

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

Foardat jo de ôfbylding bouwe, moatte jo derfoar soargje dat de docker-daemon goed bleatsteld is. Dit kin dien wurde mei it folgjende kommando:

$ eval $(minikube docker-env)

Dan fiere wy it kommando mvn k8s:build yn, en dit is wat wy sille sjen op it skerm by it bouwen fan de docker-ôfbylding mei de Eclipse JKube-bouwtaak:

~/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 : $

Stap 3. Upload de ôfbylding nei it docker-register

Nei't wy de dockerôfbylding boud hawwe mei de push-registraasje konfigureare (yn ús gefal is it docker.io), kinne wy ​​dizze ôfbylding nei it register stjoere. Dit is wat sil wurde werjûn nei't wy Eclipse JKube freegje om de mvn k8s:push push-taak út te fieren:

~/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 : $ 

Nei it ferstjoeren fan de ôfbylding moatte jo kontrolearje dat it is opnaam yn it register. Yn ús gefal sjogge wy it gewoan yn Docker Hub, lykas werjûn yn Fig. 4.

Java-applikaasjes ûntwikkelje foar Kubernetes mei Eclipse JKube

Rys. 4. De ôfbylding stjoerd nei it register ferskynde yn Docker Hub.

Stap 4. Generearje Kubernetes boarne manifestaasjes foar de applikaasje

Dat, wy hawwe de applikaasjeôfbylding sammele, no moatte wy Kubernetes-manifesten skriuwe. Om dit te dwaan hat Eclipse JKube in taak dy't stive boarne-manifesten genereart basearre op it ûnderlizzende Java-ramt (Spring boot, quarkus, Vert.x of wat oars). Jo kinne it manifest ek oanpasse troch in XML-konfiguraasjetriem te brûken en rûge fragminten (fragminten fan it fereaske boarnemanifest) te pleatsen yn 'e applikaasjemap src/main/jkube. Yn dit gefal sil jo konfiguraasje wurde opladen nei de oanmakke manifesten.

Yn ús foarbyld litte wy alles sa't it is, en dêrom genereart Eclipse JKube in manifest foar de standert ynset en foar de tsjinst mei type ClusterIP. En pas dan wizigje wy it tsjinstmanifest om it tsjinsttype te feroarjen nei NodePort. Jo kinne it standertgedrach oerskriuwe mei de folgjende eigenskip:

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

Dit is hoe't de skermútfier der útsjocht nei't wy Eclipse JKube freegje om de mvn k8s: resource resource taak út te fieren.

~/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 : $

Stap 5. Ynsette de applikaasje oan de Kubernetes kluster

No binne wy ​​​​klear om de applikaasje yn te setten: wy hawwe de ôfbylding makke en dêrnei automatysk boarne-manifesten oanmakke. No bliuwt it allinich om dit alles oan te passen op it Kubernetes-kluster. Om de applikaasje yn te setten, kinne jo fansels it kommando kubectl apply -f brûke, mar de plugin kin dit foar ús dwaan. Dit is wat op it skerm sil ferskine nei't wy Eclipse JKube freegje om de mvn k8s út te fieren: tapasse tapasse:

~/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"
}

Stap 6. Untwikkelje applikaasjes út it Kubernetes-kluster

Om dit te dwaan, wurdt de taak ûntset brûkt, dy't gewoan alle boarnen ferwideret dy't yn 'e foarige stap waarden tapast, dat is as de tapassing taak wurdt útfierd. Dit is wat wy op it skerm sille sjen nei't wy Eclipse JKube freegje om de mvn k8s: undeploy undeploy taak út te fieren:

~/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 oars kinne jo dwaan mei Eclipse JKube

Dat, wy seagen nei de haaddoeltaken fan Eclipse JKube en Kubernetes Maven Plugin, dy't de ûntwikkeling fan Java-applikaasjes foar it Kubernetes-platfoarm fasilitearje. As jo ​​​​dizze taken net konstant fan it toetseboerd wolle ynfiere, kinne jo se skriuwe yn 'e plugin-konfiguraasje, bygelyks sa:

<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>

It moat sein wurde dat wy yn dit artikel net alle doeltaken hawwe beskôge dy't yn Eclipse JKube en Kubernetes Maven Plugin binne, dus jouwe wy yn Tabel 2 in list mei ekstra taken dy't jo ek nuttich kinne wêze.

Tafel 2. Oanfoljende Eclipse JKube doel taken.

Objective
Stage
beskriuwing

k8s: wy
VALIDATEN
Untfang logboeken fan in applikaasje dy't rint op Kubernetes.

k8s: wyb
PAKKET
Iepenje in debug-poarte sadat jo jo applikaasje direkt fan 'e IDE kinne debuggen op Kubernetes.

k8s: op
YNSTALLEARJE
In gabel meitsje foar de ynstallaasjetaak en de oanmakke manifesten tapasse op it Kubernetes-kluster op deselde manier as yn it gefal fan 'e tapassetaak.

k8s:sjo
PAKKET
Automatyske hot ynset fan in applikaasje troch it folgjen fan syn nammeromte.

Java-applikaasjes ynsette op Red Hat OpenShift mei it OpenShift Maven-plugin

Om de applikaasje út ús foarbyld op it Red Hat OpenShift-platfoarm yn te setten, brûke wy de plugin OpenShift Maven. It ienige ferskil sil wêze dat it taakfoarheaksel sil feroarje fan k8s nei oc. Standert docht de Kubernetes Maven-plugin docker-assemblies, en de OpenShift Maven-plugin - assemblies S2I. Wy meitsje gjin feroarings oan ús projekt oars as it fuortheljen fan it jkube.generator.name-eigendom, om't it net nedich is as jo nei it register drukke (OpenShift pleatst de ôfbylding yn har ynterne register yn 'e boufaze). En dit is wat op it skerm sil ferskine as wy ús foarbyld útfiere, wêryn wy trouwens doeltaken net ien foar ien útfiere, mar allegear tagelyk:

~/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 les

Om mear te learen oer hoe't jo Kubernetes-ûntwikkeling makliker meitsje kinne mei Eclipse JKube, besjoch dizze fideo-tutorial oer hoe't jo fluch in ienfâldige Spring Boot-applikaasje kinne ynsette op Minikube:

konklúzje

Yn dit artikel hawwe wy sjen litten hoe't Eclipse JKube it libben makliker makket foar in Java-ûntwikkelder by it wurkjen mei Kubernetes. Mear ynformaasje oer Eclipse JKube is te finen op projekt webside en oan GitHub.

Boarne: www.habr.com

Add a comment