Java-sovellusten kehittäminen Kubernetesille Eclipse JKuben avulla

25 vuotta sitten Java tuli ohjelmoinnin valtavirtaan ja siitä tuli lopulta yksi ydinelementeistä, joiden ympärille sovelluspinot rakennetaan. Nykyään kuitenkin monet ihmiset ja organisaatiot, jotka ovat olleet uskollisia Javalle vuosia, ovat kiireisiä siirtymässä tai harkitsevat siirtymistä alustalle. Kubernetes tai sen johdannaisia, kuten Red Hat OpenShift tai Amazon EX.

Java-sovellusten kehittäminen Kubernetesille Eclipse JKuben avulla

Valitettavasti Kubernetesilla on jyrkkä oppimiskäyrä ja se tuo kehitysprosessiin toisen toiminnallisen kerroksen, johon Java-ohjelmoijat ovat tottuneet. Tänään kerromme sinulle kuinka käyttää Eclipse JKube, yksinkertaistaa näitä Kubernetesiin ja säilöihin liittyviä lisätoimintoja ja varmistaa kivuttoman siirtymisen pilvialustaan ​​säilyttäen samalla tutun Java-ekosysteemin. Lisäksi näytämme, kuinka Java-sovelluksia otetaan käyttöön OpenShift-alustalla käyttämällä OpenShift Maven -laajennusta.

Perinteinen Java-kehitysprosessi

Perinteinen kehitysprosessi Jaava (Kuva 1) tarkoittaa, että kehittäjä kirjoittaa koodin, luo sitten käyttöönottoyksiköt JAR- tai WAR-tiedostoina ja sitten nämä tiedostot otetaan käyttöön ja suoritetaan verkko- tai sovelluspalvelimella. Pääasiallinen tapa tehdä tämä on käyttää Mavenia komentoriviltä tai käyttää IDE:tä, kuten IntelliJ:tä tai Eclipseä, sovellusten koodaamiseen ja pakkaamiseen. Kehittäjät ovat tottuneet tekemään koodimuutoksia ja testaamaan kaiken perusteellisesti ennen koodin sitomista ja lähettämistä versionhallintaan.

Java-sovellusten kehittäminen Kubernetesille Eclipse JKuben avulla

Riisi. 1. Perinteinen Java-kehitysprosessi.

Java-kehitysprosessi pilvelle

Pilvisovelluksiin siirtyessä Kubernetes ja Kontit. Siksi kehittäjän on nyt pakattava Java-sovellukset sisään kontti kuvat ja luoda Kubernetes-luetteloita, jotka kuvaavat näitä kuvia. Näitä luetteloita sovelletaan sitten tuotantopalvelimeen, jossa on Kubernetes. Kubernetes puolestaan ​​ottaa nämä kuvat rekisteristä ja ottaa käyttöön sovelluksia luetteloihin kirjoittamiemme asetusten mukaisesti, jotka ovat yleensä YAML-tiedostoja.

Perinteisen Java-kehitysprosessin metamorfoosi pilveen siirtymisessä on esitetty kuvassa. 2.

Java-sovellusten kehittäminen Kubernetesille Eclipse JKuben avulla

Riisi. 2. Java-kehitysprosessi pilvelle.

Eclipse JKube

Kubernetesiin siirtyminen lisää kehitysprosessiin toisen toiminnallisen kerroksen, ja monet kehittäjät ovat hermostuneita siitä, koska he haluavat keskittyä ydintyöhönsä - sovelluslogiikkaan - sen sijaan, miten ne otetaan käyttöön. Ja tässä se tulee peliin. Eclipse JKube, jonka avulla kehittäjät voivat käyttää kirjastojaan ja laajennuksiaan (JKube Kit kanssa Kubernetes Maven -laajennus tai OpenShift Maven Plugin) suorittaaksesi vaivattomasti säiliöön ja Kubernetesiin liittyviä toimintoja kuvan kaavion mukaisesti. 2.

Tämän artikkelin loppuosassa näytämme sinulle, kuinka voit yksinkertaistaa Java-kehitysprosessia Kubernetes-ympäristössä käyttämällä Eclipse JKubea Kubernetes Maven Pluginin kanssa.

Pilvikehitysprosessi Eclipse JKubella

Tarkastellaan hieman muokattua Java-kehitysmallia pilvelle kuvasta 2, joka tuo siihen Eclipse JKuben ja Kubernetes Maven Pluginin, kuten kuvassa näkyy. 3.

Java-sovellusten kehittäminen Kubernetesille Eclipse JKuben avulla

Riisi. 3. Java-kehitysprosessi pilvelle Eclipse JKubella.

Kuten näemme, tässä kaikki Kubernetesin ja säilöjen kanssa vuorovaikutuksessa käytettävät toiminnot (korostettu punaisella kaaviossa) korvataan oletusarvoisilla Eclipse JKube -tavoitetehtävillä, jotka on lueteltu taulukossa. 1.

Pöytä 1. Eclipse JKuben oletustehtävät.

Tehtävä
vaihe
Kuvaus

k8s:build
PRE_INTEGRATION_TEST
Docker-kuvien rakentaminen

k8s:push
ASENNUS
Docker-kuvien lataaminen rekisteriin

k8s:resurssi
PROCESS_RESOURCES
K8:n manifestien luominen

k8s: käytä
KOOTA
Luotujen luetteloiden käyttäminen K8:ssa

k8s:undeploy
POISTAA TYÖKÄYTTÖÄ
Poistaa K8s-resurssit, jotka otettiin käyttöön k8s:apply- ja k8s:deploy-komennoilla

Huom: Jos et halua tehtävien käyttävän näitä mielipiteisiä oletusasetuksia, voit määrittää Eclipse JKuben manuaalisesti itse, koska se tukee määrityksiä XML и ресурсы.

Katsotaanpa nyt esimerkkejä Eclipse JKuben ja Kubernetes Maven Pluginin käytöstä sovellusten kanssa työskennellessä.

Java-sovelluksen käyttöönotto Kubernetesissa Eclipse JKuben avulla

Tässä esimerkissä otamme käyttöön klusterin yksinkertaisen Java-sovelluksen Minikube käyttämällä Eclipse JKubea. Kubernetes Maven Plugin -laajennuksen avulla voimme asettaa käyttöönottoparametreja ilman, että tarvitsee kirjoittaa mitään asetuksia.

Käytämme esimerkkisovelluksena yksinkertainen satunnaislukugeneraattori, joka tuottaa JSON-tulosteen /random-päätepisteessä:

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

Vaihe 1. Lataa Kubernetes Maven Plugin

Kubernetes Maven Plugin on arkistossa Mavenin keskusvarasto. Jotta voit käyttää Eclipse JKubea, sinun on lisättävä Kubernetes Maven -laajennus pom.xml-tiedostoosi riippuvuutena:

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

Jos OpenShiftiä käytetään puhtaan Kubernetesin sijaan, pom.xml muutetaan seuraavasti:

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

Vaihe 2. Rakenna telakointikuva

Sovelluksen JAR-tiedosto voidaan rakentaa mvn package -komennolla, ja sitten mvn goal -tehtävällä k8s:build voidaan rakentaa sovelluksesta telakointikuva. Huomaa, että olemme ohittaneet oletuskuvan nimen tällä ominaisuudella:

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

Ennen kuvan rakentamista sinun on varmistettava, että Docker-daemon on valotettu oikein. Tämä voidaan tehdä seuraavalla komennolla:

$ eval $(minikube docker-env)

Sitten kirjoitamme komennon mvn k8s:build, ja tämä näkyy näytöllä, kun rakennamme telakointikuvaa Eclipse JKube -koontitehtävällä:

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

Vaihe 3. Lataa kuva telakointiaseman rekisteriin

Kun olemme rakentaneet Docker-kuvan push-rekisterillä (meissämme se on docker.io), voimme lähettää tämän kuvan rekisteriin. Tämä näytetään, kun pyydämme Eclipse JKubea suorittamaan mvn k8s:push push -tehtävän:

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

Kuvan lähettämisen jälkeen sinun on tarkistettava, että se sisältyy rekisteriin. Meidän tapauksessamme näemme sen yksinkertaisesti Docker Hubissa, kuten kuvassa 4 on esitetty. XNUMX.

Java-sovellusten kehittäminen Kubernetesille Eclipse JKuben avulla

Riisi. 4. Rekisteriin lähetetty kuva ilmestyi Docker Hubiin.

Vaihe 4. Luo Kubernetes-resurssiluettelot sovellukselle

Joten olemme keränneet sovelluskuvan, nyt meidän on kirjoitettava Kubernetes-luettelot. Tätä varten Eclipse JKubella on tehtävä, joka luo jäykkiä resurssiluetteloita taustalla olevan Java-kehyksen (Jousikenkä, quarkus, Vert.x tai jokin muu). Voit myös mukauttaa luetteloa käyttämällä XML-määritystiedostoa ja sijoittamalla raaka-osia (vaaditun resurssiluettelon fragmentteja) sovelluskansioon src/main/jkube. Tässä tapauksessa määritykset ladataan luotuihin luetteloihin.

Esimerkissämme jätämme kaiken ennalleen, ja siksi Eclipse JKube luo luettelon oletusasennukselle ja palvelulle, jonka tyyppi on ClusterIP. Ja vasta sitten muokkaamme palvelun luetteloa muuttaaksemme palvelutyypiksi NodePort. Voit ohittaa oletuskäyttäytymisen käyttämällä seuraavaa ominaisuutta:

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

Tältä näytön tuloste näyttää, kun pyydämme Eclipse JKubea suorittamaan mvn k8s:resurssiresurssitehtävän.

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

Vaihe 5. Ota sovellus käyttöön Kubernetes-klusteriin

Nyt olemme valmiita ottamaan sovelluksen käyttöön: olemme luoneet sen kuvan ja luoneet sitten automaattisesti resurssiluettelot. Nyt ei jää muuta kuin soveltaa tätä kaikkea Kubernetes-klusteriin. Voit ottaa sovelluksen käyttöön käyttämällä kubectl apply -f -komentoa, mutta laajennus voi tehdä tämän puolestamme. Tämä näkyy näytöllä, kun pyydämme Eclipse JKubea suorittamaan mvn k8s:apply apply -tehtävän:

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

Vaihe 6. Poista sovellusten käyttöönotto Kubernetes-klusterista

Tätä varten käytetään undeploy-tehtävää, joka yksinkertaisesti poistaa kaikki resurssit, joita käytettiin edellisessä vaiheessa, eli kun asennustehtävä suoritetaan. Tämän näemme näytöllä, kun pyydämme Eclipse JKubea suorittamaan mvn k8s:undeploy undeploy -tehtävän:

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

Mitä muuta voit tehdä Eclipse JKubella

Joten tarkastelimme Eclipse JKuben ja Kubernetes Maven Pluginin päätavoitteita, jotka helpottavat Java-sovellusten kehittämistä Kubernetes-alustalle. Jos et halua syöttää näitä tehtäviä jatkuvasti näppäimistöltä, voit kirjoittaa ne laajennuksen kokoonpanoon esimerkiksi näin:

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

On sanottava, että tässä artikkelissa emme ole tarkastelleet kaikkia tavoitetehtäviä, jotka ovat Eclipse JKubessa ja Kubernetes Maven Pluginissa, joten annamme taulukossa 2 luettelon lisätehtävistä, jotka voivat myös olla hyödyllisiä sinulle.

Pöytä 2. Eclipse JKube -tavoitteen lisätehtävät.

Tehtävä
vaihe
Kuvaus

k8s:log
VAHVISTA
Lokien vastaanottaminen Kubernetesissa toimivasta sovelluksesta.

k8s:debug
PAKETTI
Avaa virheenkorjausportti, jotta voit tehdä virheenkorjauksen Kubernetes-sovelluksessasi suoraan IDE:stä.

k8s:deploy
ASENNUS
Haarukan luominen asennustehtävälle ja luotujen luetteloiden käyttäminen Kubernetes-klusteriin samalla tavalla kuin asennustehtävän tapauksessa.

k8s: katso
PAKETTI
Sovelluksen automaattinen kuuma käyttöönotto seuraamalla sen nimiavaruutta.

Java-sovellusten käyttöönotto Red Hat OpenShiftissä käyttämällä OpenShift Maven -laajennusta

Käytämme laajennusta ottaaksesi sovelluksen käyttöön esimerkistämme Red Hat OpenShift -alustalla OpenShift Maven. Ainoa ero on, että tehtävän etuliite muuttuu k8s:sta oc:ksi. Oletuksena Kubernetes Maven -laajennus tekee sen satamatyöläinen-kokoonpanot ja OpenShift Maven -laajennus - kokoonpanot S2I. Emme tee mitään muutoksia projektiimme, paitsi poistamalla ominaisuuden jkube.generator.name, koska sitä ei vaadita rekisteriin työnnettäessä (OpenShift sijoittaa kuvan sisäiseen rekisteriinsä koontivaiheen aikana). Ja tämä tulee näkyviin näytölle, kun suoritamme esimerkkimme, jossa muuten suoritamme tavoitetehtäviä ei yksi kerrallaan, vaan kaikki kerralla:

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

Saat lisätietoja Kubernetes-kehityksen helpottamisesta Eclipse JKuben avulla katsomalla tämän opetusvideon yksinkertaisen Spring Boot -sovelluksen nopeasta käyttöönotosta Minikubessa:

Johtopäätös

Tässä artikkelissa näytimme, kuinka Eclipse JKube helpottaa Java-kehittäjän elämää Kubernetesin kanssa työskennellessään. Lisätietoja Eclipse JKubesta löytyy osoitteesta projektisivusto ja edelleen GitHub.

Lähde: will.com

Lisää kommentti