Utvikle Java-applikasjoner for Kubernetes ved å bruke Eclipse JKube

For 25 år siden gikk Java inn i hovedstrømmen av programmering og ble til slutt et av kjerneelementene som applikasjonsstabler er bygget rundt. I dag er imidlertid mange mennesker og organisasjoner som har vært lojale til Java i mange år, opptatt med å migrere eller vurderer å migrere til plattformen. Kubernetes eller dens derivater som f.eks Red Hat OpenShift eller Amazon EX.

Utvikle Java-applikasjoner for Kubernetes ved å bruke Eclipse JKube

Dessverre har Kubernetes en bratt læringskurve og introduserer enda et operativt lag i utviklingsprosessen som Java-programmerere er vant til. I dag vil vi fortelle deg hvordan du bruker Eclipse JKube, for å forenkle disse tilleggsoperasjonene knyttet til Kubernetes og containere, og sikre en smertefri migrering til skyplattformen samtidig som det velkjente Java-økosystemet opprettholdes. Dessuten vil vi vise hvordan du distribuerer Java-applikasjoner på OpenShift-plattformen ved å bruke OpenShift Maven-plugin.

Tradisjonell Java-utviklingsprosess

Tradisjonell utviklingsprosess Java (Figur 1) innebærer at utvikleren skriver kode, deretter oppretter distribusjonsenheter i form av JAR- eller WAR-filer, og deretter distribuerer og kjører disse filene på en web- eller applikasjonsserver. Den viktigste måten å gjøre dette på er å bruke Maven fra kommandolinjen eller bruke en IDE som IntelliJ eller Eclipse for å kode og pakke applikasjonene. Utviklere er vant til å gjøre kodeendringer og teste alt grundig før de forplikter koden og sender den til versjonskontroll.

Utvikle Java-applikasjoner for Kubernetes ved å bruke Eclipse JKube

Ris. 1. Tradisjonell Java utviklingsprosess.

Java-utviklingsprosess for skyen

Når du flytter til skyapplikasjoner, Kubernetes og Containere. Derfor må utvikleren nå pakke Java-applikasjoner inn containerbilder og lage Kubernetes-manifester som beskriver disse bildene. Disse manifestene blir deretter brukt på produksjonsserveren som kjører Kubernetes. På sin side tar Kubernetes disse bildene fra registret og distribuerer applikasjoner i henhold til konfigurasjonene som vi har skrevet i manifester, som vanligvis er YAML-filer.

Metamorfosen til den tradisjonelle Java-utviklingsprosessen i overgangen til skyen er vist i fig. 2.

Utvikle Java-applikasjoner for Kubernetes ved å bruke Eclipse JKube

Ris. 2. Java utviklingsprosess for skyen.

Eclipse JKube

Migrering til Kubernetes legger enda et operativt lag til utviklingsprosessen, og mange utviklere er nervøse for det fordi de ønsker å fokusere på kjernearbeidet sitt – applikasjonslogikken – i stedet for hvordan de skal distribueres. Og det er her det spiller inn. Eclipse JKube, som lar utviklere bruke bibliotekene og pluginene deres (JKube-sett med Kubernetes Maven Plugin eller OpenShift Maven Plugin) for å enkelt utføre beholder- og Kubernetes-relaterte operasjoner ved å følge diagrammet i figuren. 2.

I resten av denne artikkelen viser vi deg hvordan du forenkler Java-utviklingsprosessen i Kubernetes-miljøet ved å bruke Eclipse JKube med Kubernetes Maven-plugin.

Skyutviklingsprosess ved hjelp av Eclipse JKube

La oss vurdere en litt modifisert Java-utviklingsplan for skyen fra Fig. 2, og introdusere Eclipse JKube og Kubernetes Maven Plugin i den, som vist i Fig. 3.

Utvikle Java-applikasjoner for Kubernetes ved å bruke Eclipse JKube

Ris. 3. Java utviklingsprosess for skyen ved hjelp av Eclipse JKube.

Som vi kan se, erstattes her alle operasjoner for samhandling med Kubernetes og containere (uthevet i rødt i diagrammet) av standard Eclipse JKube-måloppgaver, som er oppført i tabell. 1.

Bord 1. Eclipse JKube standardoppgaver.

Oppgave
Scene
beskrivelse

k8s:bygg
PRE_INTEGRATION_TEST
Byggehavnerbilder

k8s: skyv
INSTALLER
Laster opp docker-bilder til registeret

k8s:ressurs
PROCESS_RESOURCES
Genererer K8-manifester

k8s:søk
KOMPILERE
Bruk av genererte manifester på K8-er

k8s:undeploy
UTSATT
Fjerning av K8s-ressurser som ble distribuert med k8s:apply og k8s:deploy

Merk: Hvis du ikke vil at oppgaver skal bruke disse oppfattede standardinnstillingene, kan du manuelt konfigurere Eclipse JKube for deg selv, siden den støtter konfigurasjon via XML и ресурсы.

La oss nå se på eksempler på bruk av Eclipse JKube og Kubernetes Maven Plugin når du arbeider med applikasjoner.

Distribuere en Java-applikasjon på Kubernetes ved å bruke Eclipse JKube

I dette eksemplet vil vi distribuere en enkel Java-applikasjon på en klynge Minikube bruker Eclipse JKube. Ved å bruke Kubernetes Maven-plugin, kan vi angi distribusjonsparametere uten å måtte skrive noen konfigurasjon.

Som en eksempelapplikasjon bruker vi enkel tilfeldig tallgenerator, som produserer JSON-utdata på /random endepunktet:

~/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. Last ned Kubernetes Maven Plugin

Kubernetes Maven Plugin er i depotet Maven sentrale depot. For å bruke Eclipse JKube må du legge til Kubernetes Maven Plugin til pom.xml som en avhengighet:

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

Hvis OpenShift brukes i stedet for rene Kubernetes, endres pom.xml som følger:

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

Trinn 2. Bygg docker-bildet

Applikasjonens JAR-fil kan bygges med mvn-pakkekommandoen, og deretter kan mvn goal-oppgaven k8s:build brukes til å bygge et docker-bilde av applikasjonen. Merk at vi har overstyrt standard bildenavn med denne egenskapen:

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

Før du bygger bildet, må du sørge for at docker-demonen er korrekt eksponert. Dette kan gjøres med følgende kommando:

$ eval $(minikube docker-env)

Deretter går vi inn i mvn k8s:build-kommandoen, og dette er hva vi vil se på skjermen når vi bygger docker-bildet ved å bruke Eclipse JKube byggeoppgave:

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

Trinn 3. Last opp bildet til docker-registeret

Etter at vi har bygget docker-bildet med push-registret konfigurert (i vårt tilfelle er det docker.io), kan vi sende dette bildet til registret. Dette er hva som vises etter at vi har bedt Eclipse JKube om å utføre mvn k8s:push push-oppgaven:

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

Etter å ha sendt bildet, må du sjekke at det er inkludert i registeret. I vårt tilfelle ser vi det ganske enkelt i Docker Hub, som vist i fig. 4.

Utvikle Java-applikasjoner for Kubernetes ved å bruke Eclipse JKube

Ris. 4. Bildet sendt til registeret dukket opp i Docker Hub.

Trinn 4. Generer Kubernetes-ressursmanifester for applikasjonen

Så vi har samlet applikasjonsbildet, nå må vi skrive Kubernetes-manifester. For å gjøre dette har Eclipse JKube en oppgave som genererer stive ressursmanifester basert på det underliggende Java-rammeverket (Vårstøvel, quarkus, Vert.x eller noe annet). Du kan også tilpasse manifestet ved å bruke en XML-konfigurasjonsfil og plassere råfragmenter (fragmenter av det nødvendige ressursmanifestet) i applikasjonsmappen src/main/jkube. I dette tilfellet vil konfigurasjonen din lastes opp til de genererte manifestene.

I vårt eksempel lar vi alt være som det er, og derfor genererer Eclipse JKube et manifest for standardimplementeringen og for tjenesten med typen ClusterIP. Og først da endrer vi tjenestemanifestet for å endre tjenestetypen til NodePort. Du kan overstyre standardoppførselen ved å bruke følgende egenskap:

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

Slik ser skjermutgangen ut etter at vi har bedt Eclipse JKube om å utføre ressursoppgaven mvn k8s:ressurs.

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

Trinn 5. Distribuer applikasjonen til Kubernetes-klyngen

Nå er vi klare til å distribuere applikasjonen: vi har generert bildet og deretter automatisk generert ressursmanifest. Nå gjenstår det bare å bruke alt dette på Kubernetes-klyngen. For å distribuere applikasjonen kan du selvfølgelig bruke kommandoen kubectl apply -f, men plugin-en kan gjøre dette for oss. Dette er hva som vil vises på skjermen etter at vi har bedt Eclipse JKube om å utføre mvn k8s:apply application-oppgaven:

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

Trinn 6. Avinstaller programmer fra Kubernetes-klyngen

For å gjøre dette brukes undeploy-oppgaven, som ganske enkelt fjerner alle ressurser som ble brukt i forrige trinn, det vil si når applikasjonsoppgaven utføres. Dette er hva vi vil se på skjermen etter at vi har bedt Eclipse JKube om å utføre oppgaven mvn k8s:undeploy 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       <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 : $

Hva annet kan du gjøre med Eclipse JKube

Så vi så på hovedmåloppgavene til Eclipse JKube og Kubernetes Maven Plugin, som letter utviklingen av Java-applikasjoner for Kubernetes-plattformen. Hvis du ikke vil hele tiden legge inn disse oppgavene fra tastaturet, kan du skrive dem i plugin-konfigurasjonen, for eksempel slik:

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

Det må sies at vi i denne artikkelen ikke har vurdert alle måloppgavene som er i Eclipse JKube og Kubernetes Maven Plugin, så vi gir i Tabell 2 en liste over tilleggsoppgaver som også kan være nyttige for deg.

Bord 2. Ytterligere Eclipse JKube-måloppgaver.

Oppgave
Scene
beskrivelse

k8s:log
VALIDERE
Motta logger fra en applikasjon som kjører på Kubernetes.

k8s:debug
PAKKE
Åpne en feilsøkingsport slik at du kan feilsøke programmet som kjører på Kubernetes direkte fra IDE.

k8s:deploy
INSTALLER
Opprette en gaffel for installasjonsoppgaven og bruke de genererte manifestene til Kubernetes-klyngen på samme måte som i tilfellet med bruksoppgaven.

k8s: se
PAKKE
Automatisk hot-distribusjon av en applikasjon ved å spore navneområdet.

Distribuere Java-applikasjoner på Red Hat OpenShift ved å bruke OpenShift Maven-plugin

For å distribuere applikasjonen fra vårt eksempel på Red Hat OpenShift-plattformen, bruker vi plugin OpenShift Maven. Den eneste forskjellen vil være at oppgaveprefikset vil endres fra k8s til oc. Som standard gjør Kubernetes Maven-pluginen det Docker-montasjer, og OpenShift Maven-plugin - forsamlinger S2I. Vi gjør ingen endringer i prosjektet vårt annet enn å fjerne egenskapen jkube.generator.name siden det ikke er nødvendig når du trykker til registret (OpenShift plasserer bildet i det interne registret under byggefasen). Og dette er det som vil vises på skjermen når vi kjører vårt eksempel, der vi forresten utfører måloppgaver ikke én om gangen, men alle på en gang:

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

For å lære mer om hvordan du gjør Kubernetes-utvikling enklere med Eclipse JKube, se denne videoopplæringen om hvordan du raskt kan distribuere en enkel Spring Boot-applikasjon på Minikube:

Konklusjon

I denne artikkelen viste vi hvordan Eclipse JKube gjør livet enklere for en Java-utvikler når han jobber med Kubernetes. Mer informasjon om Eclipse JKube finner du på prosjektnettsted og GitHub.

Kilde: www.habr.com

Legg til en kommentar