Utvikling av Java-applikasjoner for Kubernetes med Eclipse JKube

For 25 years, Java has been widely adopted by programmers, ultimately becoming one of the pillars around which application stacks are built. However, today many individuals and organizations that have long remained loyal to Java are busy transitioning or considering a move to the platform Kubernetes or its derivatives, such as Red Hat OpenShift eller Amazon EKS.

Utvikling av Java-applikasjoner for Kubernetes med Eclipse JKube

Unfortunately, Kubernetes has a steep learning curve and introduces yet another operational layer into the development process familiar to Java developers. Today, we will discuss how to use Eclipse JKube, to simplify the additional operations associated with Kubernetes and containers, as well as ensure a smooth migration to the cloud platform while retaining the familiar Java ecosystem. Furthermore, we will demonstrate how to deploy Java applications on the OpenShift platform using the OpenShift Maven plugin.

The traditional Java development process

The traditional development process Java (Fig. 1) involves the developer writing code, then creating deployment units in the form of JAR or WAR files, and subsequently deploying and running these files on a web server or application server. Generally, Maven is used from the command line, or IDEs like IntelliJ or Eclipse are utilized to code and package applications. Developers are accustomed to making changes to the code and thoroughly testing everything before committing the code and pushing it to the version control system.

Utvikling av Java-applikasjoner for Kubernetes med Eclipse JKube

Fig. 1. The traditional Java development process.

The Java development process for the cloud

When transitioning to cloud applications, Kubernetes and kontainereare added to the scheme described above. As a result, the developer now needs to package Java applications into container images and create Kubernetes manifests describing these images. These manifests are then applied to the production server running Kubernetes. In turn, Kubernetes retrieves these images from the registry and deploys applications according to the configurations specified in the manifests, which are typically YAML files.

The metamorphosis of the traditional Java development process when moving to the cloud is shown in Fig. 2.

Utvikling av Java-applikasjoner for Kubernetes med Eclipse JKube

Fig. 2. The Java development process for the cloud.

Eclipse JKube

Overgangen til Kubernetes tilfører et nytt driftsnivå i utviklingsprosessen, og mange utviklere føler seg stresset, fordi de ønsker å fokusere på sitt hovedarbeid – applikasjonslogikken – og ikke på hvordan de skal distribuere det. Her kommer Eclipse JKube, som lar utviklere bruke sine biblioteker og plugins (JKube Kit sammen med Kubernetes Maven Plugin eller OpenShift Maven Plugin), for enkelt å utføre operasjoner knyttet til containere og Kubernetes, i samsvar med diagrammet i Fig. 2.

I den resterende delen av denne artikkelen vil vi vise hvordan vi kan forenkle Java-utviklingsprosessen i et Kubernetes-miljø ved å bruke Eclipse JKube med Kubernetes Maven Plugin.

Utviklingsprosess for skyen med Eclipse JKube

La oss se på et lett modifisert diagram over Java-utvikling for skyen med Fig. 2, der vi introduserer Eclipse JKube og Kubernetes Maven Plugin, som vist i Fig. 3.

Utvikling av Java-applikasjoner for Kubernetes med Eclipse JKube

Fig. 3. Java-utviklingsprosess for skyen med Eclipse JKube.

Som vi ser, blir alle operasjoner for interaksjon med Kubernetes og containere (markert i rødt på diagrammet) erstattet av Eclipse JKubes standardmåloppgaver, som er oppført i Tabell 1.

Tabell 1. Standardoppgaver for Eclipse JKube.

Oppgave
Etappe
Description

k8s:build
PRE_INTEGRATION_TEST
Bygging av docker-bilder

k8s:push
INSTALL
Sending av docker-bilder til registret

k8s:resource
PROCESS_RESOURCES
Generering av K8s-manifester

k8s:apply
COMPILE
Anvendelse av de genererte manifestene til K8s

k8s:undeploy
UNDEPLOY
Fjerning av K8s-ressurser som ble distribuert via k8s:apply og k8s:deploy

Merk: Hvis du ikke vil at oppgavene skal bruke disse strenge standardene (opinionated defaults), kan du manuelt konfigurere Eclipse JKube etter dine behov, siden det støtter konfigurasjon via XML og ressurser.

Nå skal vi se på eksempler på bruk av Eclipse JKube og Kubernetes Maven Plugin i arbeidet med applikasjoner.

Distribuerer Java-applikasjon i Kubernetes ved hjelp av Eclipse JKube

I dette eksempelet skal vi distribuere en enkel Java-applikasjon i en klynge Minikube ved hjelp av Eclipse JKube. Ved å bruke Kubernetes Maven Plugin kan vi angi distribusjonsparametere uten å måtte skrive noen konfigurasjon.

Som et eksempel på applikasjonen bruker vi en enkel generator av tilfeldige tall, som gir JSON-output på endpointen /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"
}

Trinn 1. Laster opp Kubernetes Maven Plugin

Kubernetes Maven Plugin finnes i depotet Maven Central Repository. For å bruke Eclipse JKube må du legge til Kubernetes Maven Plugin i din pom.xml som et avhengighet:

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

Hvis det brukes OpenShift i stedet for ren Kubernetes, modifiseres pom.xml som følger:

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

Trinn 2. Bygger docker-image

JAR-filen til applikasjonen kan bygges med kommandoen mvn package, og deretter kan målet mvn k8s:build brukes for å bygge docker-image av denne applikasjonen. Vær oppmerksom på at vi har overskrevet det standard image-navnet med denne egenskapen:

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

Før vi bygger imaget, er det viktig å sikre at docker-demonen er korrekt eksponert. Dette kan gjøres med følgende kommando:

$ eval $(minikube docker-env)

Deretter skriver vi inn kommandoen mvn k8s:build, og her er hva vi vil se på skjermen når vi bygger docker-image med Eclipse JKube bygningsoppgave:

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:build
[INFO] Skanner etter prosjekter...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Bygger random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] k8s: Kjører i Kubernetes-modus
[INFO] k8s: Bygger Docker-image i Kubernetes-modus
[INFO] k8s: Kjører generator spring-boot
[INFO] k8s: spring-boot: Bruker Docker-image quay.io/jkube/jkube-java-binary-s2i:0.0.7 som grunnlag / bygg
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Opprettet docker-build.tar på 251 millisekunder
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Bygget image sha256:a20e5
[INFO] ------------------------------------------------------------------------
[INFO] BYGG SUKSESS
[INFO] ------------------------------------------------------------------------
[INFO] Totaltid:  5.053 s
[INFO] Ferdig den: 2020-08-10T11:28:23+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $

Trinn 3. Sender imaget til docker-registeret

Etter at vi har bygget docker-imaget med en konfigurert push-register (i vårt tilfelle docker.io), kan vi sende dette imaget til registeret. Her er hva som vil vises på skjermen etter at vi ber Eclipse JKube om å utføre push-oppgaven mvn k8s:push:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:push
[INFO] Skanner etter prosjekter...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Bygger random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:push (default-cli) @ random-generator ---
[INFO] k8s: Kjører i Kubernetes-modus
[INFO] k8s: Bygger Docker-bilde i Kubernetes-modus
[INFO] k8s: Kjører generator spring-boot
[INFO] k8s: spring-boot: Bruker Docker-bilde quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 som base \/ builder
[INFO] k8s: Pushen refererer til depot [docker.io\/rohankanojia\/random-generator]
5dcd9556710f: Lagret allerede eksisterer 
b7139ad07aa8: Lagret allerede eksisterer 
b6f081e4b2b6: Lagret allerede eksisterer 
d8e1f35641ac: Lagret allerede eksisterer 
[INFO] k8s: 0.0.1: digest: sha256:9f9eda2a13b8cab1d2c9e474248500145fc09e2922fe3735692f9bda4c76002d størrelse: 1162
[INFO] k8s: Pushing docker.io\/rohankanojia\/random-generator:0.0.1 på 7 sekunder 
[INFO] ------------------------------------------------------------------------
[INFO] BYGG SUKSESS
[INFO] ------------------------------------------------------------------------
[INFO] Total tid:  11.222 s
[INFO] Ferdig klokken: 2020-08-10T11:35:37+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ 

Etter å ha sendt bildet, må vi sjekke at det kom til registeret. I vårt tilfelle ser vi det bare i Docker Hub, som vist i Fig. 4.

Utvikling av Java-applikasjoner for Kubernetes med Eclipse JKube

Fig. 4. Det sendte bildet har dukket opp i Docker Hub.

Steg 4. Generere manifestene for Kubernetes-ressursene til applikasjonen

Så, bildet av applikasjonen er bygget, nå må vi skrive Kubernetes-manifestene. For dette har Eclipse JKube en oppgave som genererer faste manifestene for ressursene, basert på den underliggende Java-rammeverket (Spring Boot, Quarkus, Vert.x eller et annet). Man kan også tilpasse manifestet ved å bruke en konfigurasjons-XML-fil og legge raw-biter (biter av de nødvendige ressursmanifestene) i applikasjonens src\/main\/jkube-mappe. I så fall vil konfigurasjonen din bli innlemmet i de genererte manifestene.

I vårt eksempel lar vi alt stå som det er, og derfor genererer Eclipse JKube et manifest for den standard distribusjonen og for tjenesten med type ClusterIP. Deretter modifiserer vi manifestet for å endre tjenestetypen til NodePort. Man kan overstyre standard atferd med følgende egenskap:

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

Slik ser skjermutgangen ut etter at vi ber Eclipse JKube om å utføre resource-oppgaven mvn k8s:resource.

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:resource
[INFO] Skanning for projects...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Bygger random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:resource (default-cli) @ random-generator ---
[INFO] k8s: Kjøring generator spring-boot
[INFO] k8s: spring-boot: Bruker Docker-bilde quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 som base \/ builder
[INFO] k8s: jkube-controller: Legger til en standard Distribusjon
[INFO] k8s: jkube-service: Legger til en standard tjeneste 'random-generator' med porter [8080]
[INFO] k8s: jkube-healthcheck-spring-boot: Legger til readiness probe på port 8080, bane='\/actuator\/health', skjema='HTTP', med en initial forsinkelse på 10 sekunder
[INFO] k8s: jkube-healthcheck-spring-boot: Legger til liveness probe på port 8080, bane='\/actuator\/health', skjema='HTTP', med en initial forsinkelse på 180 sekunder
[INFO] k8s: jkube-revision-history: Legger til revisjonshistorikkgrense på 2
[INFO] ------------------------------------------------------------------------
[INFO] BYGG SUKSESS
[INFO] ------------------------------------------------------------------------
[INFO] Total tid:  3.344 s
[INFO] Ferdig på: 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 : $

Trinn 5. Distribuerer applikasjonen i Kubernetes-klyngen

Så, nå er vi klare til å utføre distribusjonen av applikasjonen: vi har generert bildet, og deretter automatisk generert ressursmanifestene. Nå gjenstår det bare å bruke alt dette på Kubernetes-klyngen. For å distribuerer applikasjonen kan vi selvfølgelig bruke kommandoen kubectl apply -f, men plugin-modulen kan gjøre dette for oss. Dette er hva som vil være på skjermen etter at vi ber Eclipse JKube om å utføre apply-oppgaven mvn k8s:apply:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:apply
[INFO] Skanning for projects...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Bygde random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] k8s: Bruker Kubernetes på https://192.168.39.145:8443/ i namespace default med manifest /home/rohaan/work/repos/eclipse-jkube-demo-project/target/classes/META-INF/jkube/kubernetes.yml 
[INFO] k8s: Bruker namespace: default
[INFO] k8s: Oppretter en tjeneste fra kubernetes.yml namespace default navn random-generator
[INFO] k8s: Opprettet tjeneste: target/jkube/applyJson/default/service-random-generator.json
[INFO] k8s: Oppretter en distribusjon fra kubernetes.yml namespace default navn random-generator
[INFO] k8s: Opprettet distribusjon: target/jkube/applyJson/default/deployment-random-generator.json
[INFO] k8s: HINT: Bruk kommandoen `kubectl get pods -w` for å se podene dine starte
[INFO] ------------------------------------------------------------------------
[INFO] BYGGING LYKKET
[INFO] ------------------------------------------------------------------------
[INFO] Total tid:  7.306 s
[INFO] Fullført på: 2020-08-10T11:40:57+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ kubectl get pods -w
NAVN                                                    KLAR   STATUS             RESTARTS   AGE
random-generator-58b7847d7f-9m9df                       0\/1     Kjøring            0          7s
random-generator-58b7847d7f-9m9df                       1\/1     Kjøring            0          17s
^C~\/work\/repos\/eclipse-jkube-demo-project : $ kubectl get svc
NAVN                                   TYPE        CLUSTER-IP      EKSTERN-IP   PORT(S)           AGE
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 .
  % Total    % Mottatt % Xferd  Gjennomsnittlig Hastighet   Tid    Tid     Tid  Nåværende
                                 Dload  Last opp   Total   Brukt   Venstre  Hastighet
100    45    0    45    0     0   1800      0 --:--:-- --:--:-- --:--:--  1875
{
  "id": "42e5571f-a20f-44b3-8184-370356581d10"
}

Trinn 6. Utfør undeploy av applikasjonen fra Kubernetes-klyngen

Dette utføres ved hjelp av oppgaven undeploy, som ganske enkelt fjerner alle ressurser som ble brukt i forrige trinn, det vil si under utførelsen av oppgaven apply. Dette er hva vi vil se på skjermen etter at vi ber Eclipse JKube om å utføre undeploy-oppgaven mvn k8s:undeploy:

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

Hva mer kan gjøres med Eclipse JKube

Vi har nå sett på de grunnleggende målene til Eclipse JKube og Kubernetes Maven Plugin, som gjør utviklingen av Java-applikasjoner for Kubernetes-plattformen enklere. Hvis du ikke ønsker å skrive disse oppgavene hele tiden, kan du legge dem inn i plugin-konfigurasjonen, for eksempel slik:

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

Det må sies at vi i denne artikkelen ikke har dekket alle måloppgavene som finnes i Eclipse JKube og Kubernetes Maven Plugin. Vi gir derfor en liste over ekstra oppgaver som også kan være nyttige for deg i Tabell 2.

Tabell 2. Ekstra måloppgaver for Eclipse JKube.

Oppgave
Etappe
Description

k8s:log
VALIDERE
Hente logger fra applikasjonen som kjører på Kubernetes.

k8s:debug
PAKKE
Åpning av feilsøkingporten for å kunne feilsøke applikasjonen som kjører på Kubernetes direkte fra IDE.

k8s:deploy
INSTALL
Oppretting av en fork for installasjonsoppgaven og anvendelse av de genererte manifestene på Kubernetes-klyngen, nøyaktig som med apply-oppgaven.

k8s:watch
PAKKE
Automatisk varm distribusjon av applikasjonen ved å overvåke navnerommet.

Distribusjon av Java-applikasjoner på Red Hat OpenShift ved hjelp av OpenShift Maven Plugin.

For å distribuere applikasjonen fra vårt eksempel på Red Hat OpenShift-plattformen, benytter vi plugin-en. OpenShift Maven. Den eneste forskjellen vil være at oppgaveprefikset endres fra k8s til oc. Som standard lager Kubernetes Maven-pluginen docker-byggeoperasjoner, mens OpenShift Maven-pluginen lager S2I. Vi gjør ingen endringer i prosjektet vårt, bortsett fra å fjerne egenskapen jkube.generator.name, siden den ikke er nødvendig ved sending til registeret (i byggeprosessen plasserer OpenShift bildet i sitt interne register). Og her er hva som vil vises på skjermen når vi starter eksempelet vårt, hvor vi for øvrig utfører oppgavefokuset ikke én om gangen, men alle samtidig:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn oc:build oc:resource oc:apply
[INFO] Skanning etter prosjekter...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Bygger random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] oc: Bruker OpenShift bygg med strategi S2I
[INFO] oc: Kjører i OpenShift-modus
[INFO] oc: Kjører generator spring-boot
[INFO] oc: spring-boot: Bruker Docker-bilde quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 som base \/ builder
[INFO] oc: [random-generator:0.0.1] "spring-boot": Opprettet docker kilde tar \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/docker\/random-generator\/0.0.1\/tmp\/docker-build.tar
[INFO] oc: Legger til i Secret pullsecret-jkube
[INFO] oc: Bruker Secret pullsecret-jkube
[INFO] oc: Oppretter BuildServiceConfig random-generator-s2i for kildebygg
[INFO] oc: Oppretter ImageStream random-generator
[INFO] oc: Starter bygg random-generator-s2i
[INFO] oc: Venter på at bygg random-generator-s2i-1 skal fullføres...
[INFO] oc: Cacher blobs under "\/var\/cache\/blobs".
[INFO] oc: Får bilde kilde signaturer
[INFO] oc: Kopierer blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Kopierer blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Kopierer blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Kopierer config sha256:52d6788fcfdd39595264d34a3959464a5dabc1d4ef0ae188802b20fc2d6a857b
[INFO] oc: Skriver manifest til bilde destinasjon
[INFO] oc: Lagrer signaturer
[INFO] oc: Genererer dockerfile med builder bilde quay.io\/jkube\/jkube-java-binary-s2i:0.0.7
[INFO] oc: TRINN 1: FRA quay.io\/jkube\/jkube-java-binary-s2i:0.0.7
[INFO] oc: TRINN 2: MERK "io.openshift.build.source-location"="\/tmp\/build\/inputs"       "io.openshift.build.image"="quay.io\/jkube\/jkube-java-binary-s2i:0.0.7"
[INFO] oc: TRINN 3: ENV JAVA_APP_DIR="\/deployments"     OPENSHIFT_BUILD_NAME="random-generator-s2i-1"     OPENSHIFT_BUILD_NAMESPACE="default"
[INFO] oc: TRINN 4: BRUKER root
[INFO] oc: TRINN 5: KOPIER upload\/src \/tmp\/src
[INFO] oc: TRINN 6: KJØR chown -R 1000:0 \/tmp\/src
[INFO] oc: TRINN 7: BRUKER 1000
[INFO] oc: TRINN 8: KJØR \/usr\/local\/s2i\/assemble
[INFO] oc: INFO S2I kildebilde med rene binære oppdaget
[INFO] oc: INFO S2I binærbygg fra fabric8-maven-plugin oppdaget
[INFO] oc: INFO Kopierer binærer fra \/tmp\/src\/deployments til \/deployments ...
[INFO] oc: random-generator-0.0.1.jar
[INFO] oc: INFO Kopierer distribusjoner fra deployments til \/deployments...
[INFO] oc: '\/tmp\/src\/deployments\/random-generator-0.0.1.jar' -> '\/deployments\/random-generator-0.0.1.jar'
[INFO] oc: TRINN 9: CMD \/usr\/local\/s2i\/run
[INFO] oc: TRINN 10: FORPLIKT temp.builder.openshift.io\/default\/random-generator-s2i-1:48795e41
[INFO] oc: tid="2020-08-10T06:37:49Z" nivå=info msg="Bildesystem mismatche: bilde bruker "", forventer "linux""
[INFO] oc: tid="2020-08-10T06:37:49Z" nivå=info msg="Bildearkitektur mismatche: bilde bruker "", forventer "amd64""
[INFO] oc: Får bilde kilde signaturer
[INFO] oc: Kopierer blob sha256:d8e1f35641acb80b562f70cf49911341dfbe8c86f4d522b18efbf3732aa74223
[INFO] oc: Kopierer blob sha256:b6f081e4b2b6de8be4b1dec132043d14c121e968384dd624fb69c2c07b482edb
[INFO] oc: Kopierer blob sha256:b7139ad07aa8ce4ed5a132f7c5cc9f1de0f5099b5e155027a23d57f7fbe78b16
[INFO] oc: Kopierer blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Kopierer config sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Skriver manifest til bilde destinasjon
[INFO] oc: Lagrer signaturer
[INFO] oc: --> 27aaadaf28e
[INFO] oc: 27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Får bilde kilde signaturer
[INFO] oc: 
[INFO] oc: Pusher bilde image-registry.openshift-image-registry.svc:5000\/default\/random-generator:0.0.1 ...
[INFO] oc: Kopierer blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Kopierer blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Kopierer blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Kopierer blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Kopierer config sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Skriver manifest til bilde destinasjon
[INFO] oc: Lagrer signaturer
[INFO] oc: Succesfully pushed image-registry.openshift-image-registry.svc:5000\/default\/random-generator@sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: Push vellykket
[INFO] oc: Bygg random-generator-s2i-1 i status Fullført
[INFO] oc: Fant tag på ImageStream random-generator tag: sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: ImageStream random-generator skrevet til \/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: Bruker docker bilde navn av navnerom: default
[INFO] oc: Kjører generator spring-boot
[INFO] oc: spring-boot: Bruker Docker-bilde quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 som base \/ builder
[INFO] oc: jkube-controller: Legger til en standard DeploymentConfig
[INFO] oc: jkube-service: Legger til en standard tjeneste 'random-generator' med porter [8080]
[INFO] oc: jkube-healthcheck-spring-boot: Legger til readiness probe på port 8080, sti='\/actuator\/health', skjema='HTTP', med initial forsinkelse 10 sekunder
[INFO] oc: jkube-healthcheck-spring-boot: Legger til liveness probe på port 8080, sti='\/actuator\/health', skjema='HTTP', med initial forsinkelse 180 sekunder
[INFO] oc: jkube-revision-history: Legger til revisjonshistorikkgrense til 2
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] oc: Bruker OpenShift på https:\/\/api.crc.testing:6443\/ i navnerom default med manifest \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/classes\/META-INF\/jkube\/openshift.yml 
[INFO] oc: OpenShift plattform oppdaget
[INFO] oc: Bruker prosjekt: default
[INFO] oc: Oppretter en Tjeneste fra openshift.yml navnerom default navn random-generator
[INFO] oc: Opprettet Tjeneste: target\/jkube\/applyJson\/default\/service-random-generator.json
[INFO] oc: Oppretter en DeploymentConfig fra openshift.yml navnerom default navn random-generator
[INFO] oc: Opprettet DeploymentConfig: target\/jkube\/applyJson\/default\/deploymentconfig-random-generator.json
[INFO] oc: Oppretter Rute default:random-generator vert: null
[INFO] oc: HINT: Bruk kommandoen `oc get pods -w` for å se på podene dine starte opp
[INFO] ------------------------------------------------------------------------
[INFO] BYGG SUKSESS
[INFO] ------------------------------------------------------------------------
[INFO] Total tid:  01:07 min
[INFO] Fullført på: 2020-08-10T12:08:00+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ oc get pods -w
NAVN                           KLAR     STATUS      RESTARTS   AGE
random-generator-1-deploy      1\/1       Kjørende     0          14s
random-generator-1-vnrm9       0\/1       Kjørende     0          11s
random-generator-s2i-1-build   0\/1       Fullført   0          1m
random-generator-1-vnrm9   1\/1       Kjørende   0         24s
random-generator-1-deploy   0\/1       Fullført   0         28s
~\/work\/repos\/eclipse-jkube-demo-project : $ oc get routes
NAVN                VERT\/PORT                                    STI      TJENESTER            PORT      TERMINERING   WILDCARD
random-generator    random-generator-default.apps-crc.testing              random-generator    8080                    Ingen
~\/work\/repos\/eclipse-jkube-demo-project : $ curl random-generator-default.apps-crc.testing\/random 
  % Total    % Mottatt % Xferd  Gjennomsnittlig Hastighet   Tid    Tid     Tid  Nåværende
                                 Dload  Last opp   Totalt   Brukt   Venstre  Hastighet
100    45    0    45    0     0   1666      0 --:--:-- --:--:-- --:--:--  1730
{
  "id": "d80052d9-2f92-43cb-b9eb-d7cffb879798"
}
~\/work\/repos\/eclipse-jkube-demo-project : $

Videoleksjon

For å lære mer om hvordan du kan forenkle Kubernetes-utviklingen med Eclipse JKube, se videoleksjonen om rask distribusjon av en enkel Spring Boot-applikasjon på Minikube:

Spill video

Konklusjon

I denne artikkelen har vi vist hvordan Eclipse JKube gjør livet lettere for Java-utviklere som arbeider med Kubernetes. Ytterligere informasjon om Eclipse JKube finner du på prosjektets nettsted og på GitHub.

Kilde: habr.com

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster