Sviluppà applicazioni Java per Kubernetes Utilizendu Eclipse JKube

25 anni fà, Java hà intrutu in u mainstream di a prugrammazione è diventò eventualmente unu di l'elementi core attornu à i quali sò custruiti pile di applicazioni. Oghje, però, assai persone è urganisazioni chì sò stati fideli à Java dapoi parechji anni sò occupati à migrà o cunsiderendu a migrazione à a piattaforma. Kubernetes o i so derivati ​​cum'è RedHat OpenShift o Amazon EKS.

Sviluppà applicazioni Java per Kubernetes Utilizendu Eclipse JKube

Sfortunatamente, Kubernetes hà una curva d'apprendimentu ripida è introduce un altru stratu operativu in u prucessu di sviluppu chì i programatori Java sò abituati. Oghje vi diceremu cumu aduprà Eclipse JKube, per simplificà queste operazioni supplementari assuciate cù Kubernetes è cuntenituri, è assicurà una migrazione indolore à a piattaforma nuvola mantenendu l'ecosistema Java familiar. Inoltre, mostreremu cumu implementà l'applicazioni Java nantu à a piattaforma OpenShift utilizendu u plugin OpenShift Maven.

Prucessu tradiziunale di sviluppu Java

Prucessu di sviluppu tradiziunale Java (Figura 1) implica u codice di scrittura di u sviluppatore, poi creà unità di implementazione in forma di file JAR o WAR, è poi implementà è eseguisce questi schedari nantu à un servitore web o applicazione. A manera principale di fà questu hè di utilizà Maven da a linea di cummanda o utilizate un IDE cum'è IntelliJ o Eclipse per codificà è imballà l'applicazioni. I sviluppatori sò abituati à fà cambiamenti di codice è à pruvà tuttu bè prima di cummette u codice è sottumettenu à u cuntrollu di versione.

Sviluppà applicazioni Java per Kubernetes Utilizendu Eclipse JKube

Risu. 1. Prucessu tradiziunale di sviluppu Java.

Prucessu di sviluppu Java per u Cloud

Quandu si move à l'applicazioni in nuvola, Kubernetes è cuntenenu. Dunque, avà u sviluppatore hà bisognu di imballà l'applicazioni Java in l'imaghjini di u containeru è creanu manifesti Kubernetes chì descrizanu queste imagine. Questi manifesti sò allora appiicati à u servitore di produzzione chì esegue Kubernetes. À u turnu, Kubernetes piglia queste imagine da u registru è implementa l'applicazioni secondu e cunfigurazioni chì avemu scrittu in manifesti, chì sò generalmente schedarii YAML.

A metamorfosi di u prucessu tradiziunale di sviluppu Java in a transizione à u nuvulu hè mostrata in Fig. 2.

Sviluppà applicazioni Java per Kubernetes Utilizendu Eclipse JKube

Risu. 2. Prucessu di sviluppu Java per u nuvulu.

Eclipse JKube

A migrazione à Kubernetes aghjusta un altru stratu operativu à u prucessu di sviluppu, è parechji sviluppatori sò nervosi per questu perchè volenu fucalizza nantu à u so travagliu core - a logica di l'applicazione - invece di cumu implementà. È questu hè induve vene in ghjocu. Eclipse JKube, chì permette à i sviluppatori di utilizà e so librerie è plugins (Kit JKube inseme cù Kubernetes Maven Plugin o OpenShift Maven Plugin) per eseguisce senza sforzu operazioni di containeru è Kubernetes in seguitu u diagramma in Figura. 2.

In u restu di questu articulu, vi mustraremu cumu simplificà u prucessu di sviluppu Java in l'ambiente Kubernetes usendu Eclipse JKube cù u Kubernetes Maven Plugin.

Prucessu di Sviluppu Cloud Utilizendu Eclipse JKube

Fighjemu un schema di sviluppu Java ligeramente mudificatu per u nuvulu da a Fig. 2.

Sviluppà applicazioni Java per Kubernetes Utilizendu Eclipse JKube

Risu. 3. Prucessu di sviluppu Java per u nuvulu cù Eclipse JKube.

Comu pudemu vede, quì tutte l'operazioni per interagisce cù Kubernetes è cuntenituri (saltatu in rossu in u diagramma) sò rimpiazzati da e funzioni predeterminate di Eclipse JKube, chì sò listati in Table. 1.

Table 1. Eclipse JKube compiti predeterminatu.

Objettivu
Stage
discrizzione

k8s: custruì
PRE_INTEGRATION_TEST
Custruì l'imaghjini di docker

k8s: push
INSTALL
Caricà l'imaghjini di docker à u registru

k8s: risorsa
PROCESS_RESOURCES
Generazione di manifesti K8s

k8s: applicà
COMPILA
Applicazione di manifesti generati à K8s

k8s: undeploy
UNDEPLOY
Eliminazione di risorse K8s chì sò state implementate cù k8s: apply è k8s: deploy

Nutate bè: Se ùn vulete micca chì i travaglii aduprate sti predefiniti opinioni, pudete cunfigurà manualmente Eclipse JKube per sè stessu, postu chì sustene a cunfigurazione via XML и risorse.

Avà fighjemu l'esempi di l'usu di Eclipse JKube è Kubernetes Maven Plugin quandu si travaglia cù l'applicazioni.

Implementazione di una applicazione Java in Kubernetes Utilizendu Eclipse JKube

In questu esempiu, implementeremu una semplice applicazione Java in un cluster Minikube utilizendu Eclipse JKube. Utilizendu u Kubernetes Maven Plugin, pudemu stabilisce i paràmetri di implementazione senza avè da scrive alcuna cunfigurazione.

Cum'è un esempiu di applicazione avemu aduprà generatore di numeri casuali simplice, chì produce output JSON à l'endpoint /random:

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

Passu 1. Download Kubernetes Maven Plugin

Kubernetes Maven Plugin hè in u repository Repositoriu Centrale Maven. Per utilizà Eclipse JKube, avete bisognu di aghjunghje Kubernetes Maven Plugin à u vostru pom.xml cum'è una dependenza:

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

Se OpenShift hè utilizatu invece di Kubernetes puri, pom.xml hè mudificatu cusì:

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

Passu 2. Custruite l'imagine docker

U schedariu JAR di l'applicazione pò esse custruitu cù u cumandamentu di u pacchettu mvn, è dopu u mvn goal task k8s:build pò esse usatu per custruisce una maghjina docker di l'applicazione. Nota chì avemu rimpiazzatu u nome di l'imagine predeterminatu cù sta pruprietà:

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

Prima di custruisce l'imaghjini, avete bisognu di assicurà chì u daemon docker hè espostu currettamente. Questu pò esse fattu cù u cumandimu seguitu:

$ eval $(minikube docker-env)

Allora entremu in u mvn k8s: cumanda di custruzzione, è questu hè ciò chì vedemu nantu à u screnu quandu custruisce l'imaghjini docker usendu u compitu di creazione di Eclipse JKube:

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

Step 3. Caricate l'imaghjini à u registru docker

Dopu avè custruitu l'imaghjini di docker cù u registru push cunfiguratu (in u nostru casu hè docker.io), pudemu mandà sta maghjina à u registru. Questu hè ciò chì serà affissatu dopu avè dumandatu à Eclipse JKube per eseguisce u mvn k8s: push push task:

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

Dopu avè mandatu l'imaghjini, avete bisognu di verificà chì hè inclusu in u registru. In u nostru casu, simpricimenti vedemu in Docker Hub, cum'è mostra in Fig. 4.

Sviluppà applicazioni Java per Kubernetes Utilizendu Eclipse JKube

Risu. 4. L'imaghjini mandati à u registru apparsu in Docker Hub.

Step 4. Generate manifesti di risorse Kubernetes per l'applicazione

Allora, avemu cullatu l'imaghjini di l'applicazione, avà avemu bisognu di scrive Kubernetes manifesti. Per fà questu, Eclipse JKube hà un compitu chì genera manifestazioni di risorse rigide basatu annantu à u framework Java sottostante (Stivali di primavera, quarkus, Vert.x o qualchì altru). Pudete ancu persunalizà u manifestu utilizendu un schedariu di cunfigurazione XML è pusendu frammenti crudi (frammenti di u manifestu di risorsa necessaria) in u cartulare di l'applicazione src/main/jkube. In questu casu, a vostra cunfigurazione serà caricata à i manifesti generati.

In u nostru esempiu, lasciamu tuttu cum'è, è dunque Eclipse JKube genera un manifestu per a implementazione predeterminata è per u serviziu cù u tipu ClusterIP. È solu dopu mudificà u manifestu di serviziu per cambià u tipu di serviziu à NodePort. Pudete annullà u cumpurtamentu predeterminatu usendu a seguente pruprietà:

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

Questu hè ciò chì l'output di a schermu pare dopu avè dumandatu à Eclipse JKube per eseguisce a mvn k8s:resource resource task.

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

Step 5. Implementa l'applicazione à u cluster Kubernetes

Avà simu tutti pronti per implementà l'applicazione: avemu generatu a so maghjina è dopu generatu automaticamente manifesti di risorse. Avà tuttu ciò chì resta hè di applicà tuttu questu à u cluster Kubernetes. Per implementà l'applicazione, pudete, sicuru, aduprà u kubectl apply -f command, ma u plugin pò fà questu per noi. Questu hè ciò chì appariscerà nantu à u screnu dopu chì avemu dumandatu à Eclipse JKube per eseguisce u mvn k8s: apply apply 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"
}

Passu 6. Undeploy appricazzioni da u cluster Kubernetes

Per fà questu, hè aduprata u compitu undeploy, chì sguassate solu tutte e risorse chì sò stati appiicati in u passu precedente, vale à dì quandu u compitu di applicà hè eseguitu. Questu hè ciò chì vedemu nantu à u screnu dopu avè dumandatu à Eclipse JKube per eseguisce u mvn k8s:undeploy undeploy task:

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

Chì altru pudete fà cù Eclipse JKube

Dunque, avemu guardatu i travaglii di u scopu principale di Eclipse JKube è Kubernetes Maven Plugin, chì facilitanu u sviluppu di applicazioni Java per a piattaforma Kubernetes. Se ùn vulete micca entre in constantemente queste attività da u teclatu, pudete scrive in a cunfigurazione di u plugin, per esempiu, cusì:

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

Ci vole à dì chì in questu articulu ùn avemu micca cunsideratu tutti i travaglii di u scopu chì sò in Eclipse JKube è Kubernetes Maven Plugin, cusì furnimu in a Tabella 2 una lista di tarei supplementari chì ponu ancu esse utili per voi.

Table 2. Eclipse JKube compiti di scopu supplementari.

Objettivu
Stage
discrizzione

k8s: log
VALIDATE
Riceve i log da una applicazione in esecuzione in Kubernetes.

k8s: debug
pacchettu
Apertura un portu di debug per pudè debug a vostra applicazione in esecuzione in Kubernetes direttamente da l'IDE.

k8s: implementà
INSTALL
Crià una furchetta per u compitu Installa è applicà i manifesti generati à u cluster Kubernetes in u listessu modu cum'è in u casu di l'applicazioni.

k8s: guardà
pacchettu
Impiegazione automatica calda di una applicazione tracciandu u so spaziu di nomi.

Implementazione di applicazioni Java in Red Hat OpenShift Utilizendu u Plugin OpenShift Maven

Per implementà l'applicazione da u nostru esempiu nantu à a piattaforma Red Hat OpenShift, usemu u plugin OpenShift Maven. L'unica diferenza serà chì u prefissu di u compitu cambierà da k8s à oc. Per automaticamente, u plugin Kubernetes Maven faci docker-assemblee, è u plugin OpenShift Maven - assembly S2I. Ùn facemu micca cambiamenti à u nostru prughjettu altru da caccià a pruprietà jkube.generator.name postu chì ùn hè micca necessariu quandu spinghje à u registru (OpenShift mette l'imaghjini in u so registru internu durante a fase di creazione). È questu hè ciò chì appariscerà nantu à u screnu quandu corremu u nostru esempiu, in u quale, per via, eseguimu compiti di scopu micca unu à un tempu, ma tutti in una volta:

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

Per sapè di più nantu à cumu fà u sviluppu di Kubernetes più faciule cù Eclipse JKube, fighjate stu video tutoriale nantu à cumu implementà rapidamente una semplice applicazione Spring Boot in Minikube:

cunchiusioni

In questu articulu, avemu dimustratu cumu Eclipse JKube rende a vita più faciule per un sviluppatore Java quandu travaglia cù Kubernetes. Più infurmazione nantu à Eclipse JKube pò esse truvata à situ web di u prugettu è quì GitHub.

Source: www.habr.com

Add a comment