Kubernetesi jaoks Java rakenduste arendamine Eclipse JKube abil

25 aastat tagasi käivitus Java laiemasse programmeerijate ringi, et lõpuks saada üheks nendest aluspinkidest, mille ümber rakenduste tehnoloogiad ehitatakse. Siiski on paljud inimesed ja organisatsioonid, kes on aastaid Java'le truud püsinud, nüüd hõivatud üleminekuga või mõtlemas üleminekule platvormile Kubernetes või selle variante, nagu Red Hat OpenShift või Amazon EKS.

Kubernetesi jaoks Java rakenduste arendamine Eclipse JKube abil

Kahjuks on Kubernetesil järsk õpikõver ja see toob tuttavasse Java arendajate arendusprotsessi veel ühe operatiivse taseme. Täna räägime, kuidas kasutada Eclipse JKube, et lihtsustada neid Kubernetesega ja konteineritega seotud lisategevusi ning tagada sujuv üleminek pilveplatvormile, säilitades Java tuttava ökosüsteemi. Veelgi enam, näitame, kuidas juurutada Java rakendusi OpenShift platvormil OpenShift Maven pluginaga.

Traditsiooniline Java arendamisprotsess

Traditsiooniline arendusprotsess Java (Joon. 1) tähendab, et arendaja kirjutab koodi, seejärel loob ta rakendusteüksused JAR- või WAR-failidena ning seejärel paigaldab ja käivitab need failid veebiserveris või rakenduste serveris. Peamiselt kasutatakse selleks kas Mavenit käsurida kaudu või IDE-d, nagu IntelliJ või Eclipse, et rakendusi kodeerida ja pakendada. Arendajad on harjunud koodis muudatusi tegema ja kõike hoolikalt testima, enne kui nad koodi fikseerivad ja saadavad selle versioonihaldussüsteemi.

Kubernetesi jaoks Java rakenduste arendamine Eclipse JKube abil

Joon. 1. Traditsiooniline Java-arenduse protsess.

Java arendamise protsess pilves

Pilvepõhiste rakenduste üleminekul lisatakse ülaltoodud skeemile Kubernetes ja konteinerites. Seetõttu peab arendaja nüüd Java-rakendused pakendama konteineripiltideks ja looma Kubernetes'e manifestid, mis kirjeldavad neid pilte. Seejärel rakendatakse need manifestid tootmisserverile, kus Kubernetes töötab. Omakorda võtab Kubernetes need pildid registrist ja paigaldab rakendused vastavalt nendele konfiguratsioonidele, mille oleme manifestides kirjeldanud, mis on tavaliselt YAML-failid.

Traditsioonilise Java-arenduse protsessi metamorfosis pilveülemineku ajal on näidatud joonisel 2.

Kubernetesi jaoks Java rakenduste arendamine Eclipse JKube abil

Joonis 2. Java-arengu protsess pilve jaoks.

Eclipse JKube

Üleminek Kubernetes'ile lisab arendusprotsessile veel ühe operatiivtasandi, mis tekitab paljudes arendajates muret, kuna nad tahavad keskenduda oma põhitegevusele – rakenduste loogikale – mitte sellele, kuidas neid käivitada. Siin tuleb mängu Eclipse JKube, mis võimaldab arendajatel kasutada oma teeke ja pluginaid (JKube Kit (autoriseerimiskoodiga). Kubernetes Maven Plugin või OpenShift Maven Plugin), et teha konteinerite ja Kubernetes'ega seotud ülesandeid hõlpsalt, järgides joonisel 2 esitatud skeemi.

Artikli ülejäänud osas näitame, kuidas muuta Java-arenduse protsess Kubernetes'i keskkonnas lihtsamaks, kasutades Eclipse JKube'i koos Kubernetes Maven Plugin'iga.

Arendusprotsess pilve jaoks, kasutades Eclipse JKube'i

Vaatame veidi muudetud Java-arenduse skeemi pilve jaoks joonisel 2, lisades sinna Eclipse JKube'i ja Kubernetes Maven Plugin'i, nagu on näidatud joonisel 3.

Kubernetesi jaoks Java rakenduste arendamine Eclipse JKube abil

Joonis 3. Java-arenduse protsess pilve jaoks, kasutades Eclipse JKube'i.

Nagu me näeme, asendatakse siin kõik Kubernetes'i ja konteineritega seotud toimingud (skeemis on need punaselt esile tõstetud) Eclipse JKube vaike-eesmärkide, mis on loetletud Tabelis 1, poolt.

Tabel 1. Eclipse JKube vaikimisi ülesanded.

Ülesanne
Etapp
Kirjeldus

k8s:build
PRE_INTEGRATION_TEST
Docker-piltide koostamine

k8s:push
INSTALL
Docker-piltide saatmine registrisse

k8s:resource
PROCESS_RESOURCES
K8s manifestide genereerimine

k8s:apply
COMPILE
Genereeritud manifestide rakendamine K8s-ile

k8s:undeploy
UNDEPLOY
K8s ressursside eemaldamine, mis on juurutatud k8s:apply ja k8s:deploy kaudu

Märkus: Kui te ei soovi, et ülesanded kasutaksid neid jäigid vaikeväärtusi (opinionated defaults), siis saate Eclipse JKube'i enda vajadustele käsitsi kohandada, sest ta toetab seadistamist läbi XML ja ressursse.

Nüüd vaatame näiteid Eclipse JKube ja Kubernetes Maven Plugin'i kasutamisest rakendustega.

Juurutame Java rakenduse Kubernetes'is Eclipse JKube'i abil

Selles näites juurutame lihtsa Java rakenduse klastris Minikube Eclipse JKube'i abil. Kasutades Kubernetes Maven Plugin'it, saame määrata juurutamise parameetrid ilma, et peaksime mingeid konfiguratsioone kirjutama.

Näidisrakenduseks on meil lihtne juhuslike arvude generaator, mis tõukab JSON-väljundi endpoint'il /random:

~/work/repos/eclipse-jkube-demo-project : $ curl localhost:8080/random | jq .
  % Kogu    % Saadud % Edastus Keskmine Kiirus   Aeg    Aeg     Aeg  Praegune
                                 Laadimine  Üleslaadimine   Kogu   Veedetud    Jäänud  Kiirus
100    45    0    45    0     0    818      0 --:--:-- --:--:-- --:--:--   818
{
  "id": "e80a4d10-c79b-4b9a-aaac-7c286cb37f3c"
}

Samm 1. Laadige alla Kubernetes Maven Plugin

Kubernetes Maven Plugin asub hoidlas Maven Central Repository. Eclipse JKube'i kasutamiseks tuleb lisada Kubernetes Maven Plugin oma pom.xml-s sõltuvuseks:

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

Kui puhta Kubernetes'i asemel kasutatakse OpenShifti, muudetakse pom.xml järgmiselt:

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

Samm 2. Koguge docker-pilt

Rakenduse JAR-faili saab koguda käsuga mvn package, seejärel saab kasutada eesmärki mvn k8s:build, et koguda selle rakenduse docker-pilt. Pange tähele, et oleme muutnud vaikepildi nime järgmise atribuudi abil:

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

Enne pildi koostamist tuleb veenduda, et docker-daemon on korrektsetelt eksponeeritud. Selleks saab kasutada järgmist käsku:

$ eval $(minikube docker-env)

Seejärel sisestame käsu mvn k8s:build ja siin on, mida näeme ekraanil docker-pildi koostamisel Eclipse JKube build-ülesande abil:

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:build
[INFO] Projekti otsimine...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Koostatakse random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] k8s: Käivitatakse Kubernetes režiimis
[INFO] k8s: Koostatakse Docker-pilti Kubernetes režiimis
[INFO] k8s: Käivitatakse generaator spring-boot
[INFO] k8s: spring-boot: Kasutatakse Docker-pilti quay.io/jkube/jkube-java-binary-s2i:0.0.7 baasina / genereerijana
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Loodi docker-build.tar 251 millisekundi jooksul
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Pildi sha256:a20e5
[INFO] ------------------------------------------------------------------------
[INFO] KOOSTAMINE ÕNNESTUS
[INFO] ------------------------------------------------------------------------
[INFO] Kogu aeg:  5.053 s
[INFO] Lõpetatud kell: 2020-08-10T11:28:23+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $

Samm 3. Toimetame pildi docker registrisse

Pärast docker-pildi koostamist seadistatud push-repositooriumiga (meie juhul docker.io) saame selle pildi repositooriumisse saata. Siin on, mida kuvatakse ekraanile, kui palume Eclipse JKube'il push-ülesannet mvn k8s:push täita:

/work/repos/eclipse-jkube-demo-project : $ mvn k8s:push
[INFO] Otsitakse projekte...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Koostatakse random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:push (default-cli) @ random-generator ---
[INFO] k8s: Käitatakse Kubernetes'i režiimis
[INFO] k8s: Docker pildi loomine Kubernetes'i režiimis
[INFO] k8s: Käitatakse generaatorit spring-boot
[INFO] k8s: spring-boot: Kasutatakse Docker pildi quay.io/jkube/jkube-java-binary-s2i:0.0.7 aluseks / ehitajana
[INFO] k8s: Push viitab repositooriumile [docker.io/rohankanojia/random-generator]
5dcd9556710f: Kiht eksisteerib juba 
b7139ad07aa8: Kiht eksisteerib juba 
b6f081e4b2b6: Kiht eksisteerib juba 
d8e1f35641ac: Kiht eksisteerib juba 
[INFO] k8s: 0.0.1: digest: sha256:9f9eda2a13b8cab1d2c9e474248500145fc09e2922fe3735692f9bda4c76002d suurus: 1162
[INFO] k8s: Pildid saadetud docker.io/rohankanojia/random-generator:0.0.1 7 sekundi jooksul 
[INFO] ------------------------------------------------------------------------
[INFO] EHITUS ÕNNESTUS
[INFO] ------------------------------------------------------------------------
[INFO] Kokkuvõttes:  11.222 s
[INFO] Lõpetatud: 2020-08-10T11:35:37+05:30
[INFO] ------------------------------------------------------------------------
/work/repos/eclipse-jkube-demo-project : $ 

Pärast pildi üleslaadimist tuleb kontrollida, kas see on registrisse jõudnud. Meie juhul näeme lihtsalt, et see on Docker Hubis, nagu on näidatud joonisel 4.

Kubernetesi jaoks Java rakenduste arendamine Eclipse JKube abil

Joonis 4. Registrisse üles laaditud pilt on ilmunud Docker Hubi.

Samm 4. Loome Kubernetesi ressursside manifestid rakendusele

Nii et me oleme rakenduse pildi kokku pannud, nüüd tuleb kirjutada Kubernetes manifestid. Selleks on Eclipse JKube'is ülesanne, mis genereerib kindlad ressursi manifestid, toetudes aluseks olevale Java raamistiku (Spring Boot, Quarkus, Vert.x või mõne muu). Samuti saab manifesti konfigureerida, kasutades konfiguratsioonifaili XML ja asetades raw-fragmentid (vajalike ressursi manifestide fragmendid) rakenduse kausta src/main/jkube. Sellisel juhul laaditakse teie konfiguratsioon genereeritud manifestidesse.

Meie näites jätame kõik nii nagu on, ja seepärast genereerib Eclipse JKube manifesti vaikepaigaldamiseks ja teenusele, mille tüüp on ClusterIP. Ja seejärel muudame teenuse manifesti, et muuta teenuse tüüp NodePort'iks. Vaikeste käitumise üle määramine on võimalik järgmise omaduse abil:

NodePort

Nii näeb välja ekraaniväljund pärast seda, kui palume Eclipse JKube'l täita resource-ülesanne mvn k8s:resource.

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:resource
[INFO] Projekti otsimine...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Ehitamine random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:resource (default-cli) @ random-generator ---
[INFO] k8s: Käitamine generaatoreid spring-boot
[INFO] k8s: spring-boot: Kasutatakse Docker'i pilti quay.io/jkube/jkube-java-binary-s2i:0.0.7 alusena / ehitamiseks
[INFO] k8s: jkube-controller: Lisatakse vaikimisi juurutus
[INFO] k8s: jkube-service: Lisatakse vaikimisi teenus 'random-generator' portidega [8080]
[INFO] k8s: jkube-healthcheck-spring-boot: Lisatakse valmisoleku kontroll porti 8080, tee='/actuator/health', skeem='HTTP', esimese viivitusega 10 sekundit
[INFO] k8s: jkube-healthcheck-spring-boot: Lisatakse elavuse kontroll porti 8080, tee='/actuator/health', skeem='HTTP', esimese viivitusega 180 sekundit
[INFO] k8s: jkube-revision-history: Lisatakse revideerimise ajaloosa piir 2
[INFO] ------------------------------------------------------------------------
[INFO] EHITAMINE ÕNNESTUS
[INFO] ------------------------------------------------------------------------
[INFO] Kokku kulunud aeg:  3.344 s
[INFO] Lõpetatud: 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 : $

Samm 5. Rakenduse juurutamine Kubernetes klastris

Nii, meil on kõik valmis rakenduse juurutamiseks: oleme genereerinud selle pildi ja seejärel automaatselt genereerinud ressursi manifestid. Nüüd jääb vaid kõik see Kubernetes klastrisse rakendada. Rakenduse juurutamiseks võime loomulikult kasutada käsku kubectl apply -f, kuid lisandmoodul suudab selle meie eest ka teha. Siin on, mis ekraanil kuvatakse pärast seda, kui palume Eclipse JKube'il täita apply-ülesanne mvn k8s:apply:

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:apply
[INFO] Projektide skaneerimine...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Ehitus random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] k8s: Kasutatakse Kubernetes'i aadressil https://192.168.39.145:8443/ vaikimisi nimetaotluses 
[INFO] k8s: Kasutatakse nimetaotlust: vaikimisi
[INFO] k8s: Teenuse loomine kubernetes.yml failist vaikimisi nimetaotlusele nimega random-generator
[INFO] k8s: Teenus loodud: target/jkube/applyJson/default/service-random-generator.json
[INFO] k8s: Rakenduse loomine kubernetes.yml failist vaikimisi nimetaotlusele nimega random-generator
[INFO] k8s: Rakendus loodud: target/jkube/applyJson/default/deployment-random-generator.json
[INFO] k8s: NIPP: Kasutage käsku `kubectl get pods -w`, et jälgida oma konteinerite käivitumist
[INFO] ------------------------------------------------------------------------
[INFO] EHIITUS EDASTAMINE
[INFO] ------------------------------------------------------------------------
[INFO] Kogu aeg:  7.306 s
[INFO] Lõpetatud: 2020-08-10T11:40:57+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $ kubectl get pods -w
NIMI                                                     VALMIS   OLEK             UUENDUSED   VANUS
random-generator-58b7847d7f-9m9df                        0/1     Käimas            0          7s
random-generator-58b7847d7f-9m9df                        1/1     Käimas            0          17s
^C~/work/repos/eclipse-jkube-demo-project : $ kubectl get svc
NIMI                                    Tüüp        KLASSE-VEEB      VÄLIS-VEES   PORT(ID)           VANUS
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 .
  % Kogus    % Vastuvõetud % Edastus   Keskmine Kiirus   Aeg    Aeg     Aeg  Praegune
                                 Laadimine  Üleslaadimine   Kogu   Mölgunud    Jäänud  Kiirus
100    45    0    45    0     0   1800      0 --:--:-- --:--:-- --:--:--  1875
{
  "id": "42e5571f-a20f-44b3-8184-370356581d10"
}

Samm 6. Käitame rakenduse undeploy Kubernetes klastrist

Selleks kasutatakse undeploy ülesannet, mis lihtsalt kustutab kõik ressursid, mis olid rakendatud eelmises etapis, st ülesande apply täitmisel. Siin on, mida me näeme ekraanil pärast seda, kui palume Eclipse JKube'l teostada undeploy ülesanne 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 : $

Millised on muud võimalused Eclipse JKube'iga?

Nii oleme vaadanud põhieesmärke, mis on seotud Eclipse JKube ja Kubernetes Maven Plugin'iga, mis lihtsustavad Java-rakenduste arendamist Kubernetes platvormil. Kui te ei soovi neid ülesandeid pidevalt klaviatuurilt sisestada, saate need pluginak konfiguratsioonis näiteks niimoodi kirja panna:

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

Peab ütlema, et selles artiklis oleme vaadanud kaugel ei ole kõiki eesmärke, mis on seotud Eclipse JKube ja Kubernetes Maven Plugin'iga, seetõttu toome tabelis 2 välja loetelu lisauppestest, mis võivad samuti kasulikud olla.

Tabel 2. Täiendavad eesmärgid Eclipse JKube'ile.

Ülesanne
Etapp
Kirjeldus

k8s:log
VALIDATE
Rakenduse logide hankimine, mis töötab Kubernetesel.

k8s:debug
PACKAGE
Silumisporti avamine, et lubada rakenduse silumist, mis töötab Kubernetesel, otse IDE-st.

k8s:deploy
INSTALL
Install-ülesande forki loomine ja genereeritud manifestide rakendamine Kubernetes klastrisse täpselt nagu apply-ülesande korral.

k8s:watch
PACKAGE
Rakenduse automaatne kuumad jaotamine selle nimede ruumi jälgimise kaudu.

Java rakenduste jaotamine Red Hat OpenShiftis OpenShift Maven plugina abil

Kasutades meie näide rakenduse jaotamiseks Red Hat OpenShift platvormil, rakendame plugina OpenShift Maven. Ainus erinevus on see, et ülesannete prefiks muutub k8s-elt oc-ks. Vaikimisi teeb Kubernetes Maven plugin docker-koostamisi, samas kui OpenShift Maven plugin teeb -koostamisi. S2I. Me ei tee meie projekti mingisuguseid muudatusi, välja arvatud jkube.generator.name omaduse eemaldamine, kuna see ei ole vajalik registrisse saatmisel (OpenShifti ehitusetapis paigutab see pildi oma sisemisse registrisse). Ja nii näeb meie näidis välja, kui käivitame selle, kus muide täidame goal-ülesandeid mitte ühe kaupa, vaid kõik korraga:

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

Videotund

Kuidas lihtsustada Kubernetes-arendust Eclipse JKube abil, vaadake videotundi, kus tutvustatakse lihtsa Spring Boot rakenduse kiiret juurutamist Minikube’is:

Vaata videot

Kokkuvõte

Selles artiklis näitame, kuidas Eclipse JKube hõlbustab Java-arendajate elu Kubernetesega töötamisel. Lisainfot Eclipse JKube’i kohta leiate projekti veebilehel ja GitHub.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster