Razvijanje aplikacij Java za Kubernetes z uporabo Eclipse JKube

Pred 25 leti je Java vstopila v glavni tok programiranja in sčasoma postala eden od osrednjih elementov, okoli katerih so zgrajeni skladi aplikacij. Vendar pa je danes veliko ljudi in organizacij, ki so že vrsto let zvesti Javi, zaposleni s selitvijo ali razmišljajo o selitvi na platformo. Kubernetes ali njegove izpeljanke, kot npr Red Hat OpenShift ali Amazon EKS.

Razvijanje aplikacij Java za Kubernetes z uporabo Eclipse JKube

Na žalost ima Kubernetes strmo krivuljo učenja in v razvojni proces uvaja še eno operativno plast, ki so je programerji Java vajeni. Danes vam bomo povedali, kako uporabljati Eclipse JKube, da poenostavite te dodatne operacije, povezane s Kubernetesom in vsebniki, ter zagotovite nebolečo selitev na platformo v oblaku, hkrati pa ohranite znani ekosistem Java. Poleg tega bomo pokazali, kako namestiti aplikacije Java na platformo OpenShift z uporabo vtičnika OpenShift Maven.

Tradicionalni razvojni proces Jave

Tradicionalni razvojni proces Java (Slika 1) vključuje razvijalčevo pisanje kode, nato ustvarjanje enot za uvajanje v obliki datotek JAR ali WAR ter nato uvajanje in izvajanje teh datotek na spletnem ali aplikacijskem strežniku. Glavni način za to je, da uporabite Maven iz ukazne vrstice ali uporabite IDE, kot sta IntelliJ ali Eclipse, za kodiranje in pakiranje aplikacij. Razvijalci so navajeni spreminjati kodo in vse temeljito testirati, preden kodo potrdijo in jo predložijo nadzoru različic.

Razvijanje aplikacij Java za Kubernetes z uporabo Eclipse JKube

riž. 1. Tradicionalni razvojni proces Java.

Razvojni proces Java za oblak

Pri prehodu na aplikacije v oblaku, Kubernetes in posode. Zato mora zdaj razvijalec zapakirati aplikacije Java slike vsebnika in ustvarite manifeste Kubernetes, ki opisujejo te slike. Ti manifesti se nato uporabijo v produkcijskem strežniku, v katerem se izvaja Kubernetes. Kubernetes nato vzame te slike iz registra in razmesti aplikacije v skladu s konfiguracijami, ki smo jih zapisali v manifestih, ki so običajno datoteke YAML.

Metamorfoza tradicionalnega razvojnega procesa Jave pri prehodu v oblak je prikazana na sl. 2.

Razvijanje aplikacij Java za Kubernetes z uporabo Eclipse JKube

riž. 2. Razvojni proces Java za oblak.

Eclipse JKube

Migracija na Kubernetes razvojnemu procesu doda še eno operativno plast in mnogi razvijalci so zaradi tega nervozni, ker se želijo osredotočiti na svoje osnovno delo – logiko aplikacij – namesto na to, kako jih uvesti. In tu pride do izraza. Eclipse JKube, ki razvijalcem omogoča uporabo njihovih knjižnic in vtičnikov (Komplet JKube s Vtičnik Kubernetes Maven ali Vtičnik OpenShift Maven), da brez napora izvajate vsebnike in operacije, povezane s Kubernetesom, tako da sledite diagramu na sliki. 2.

V nadaljevanju tega članka vam bomo pokazali, kako poenostaviti razvojni proces Jave v okolju Kubernetes z uporabo Eclipse JKube z vtičnikom Kubernetes Maven.

Proces razvoja v oblaku z uporabo Eclipse JKube

Oglejmo si nekoliko spremenjeno razvojno shemo Jave za oblak s slike 2, ki vanjo uvaja Eclipse JKube in Kubernetes Maven Plugin, kot je prikazano na sliki 3. XNUMX.

Razvijanje aplikacij Java za Kubernetes z uporabo Eclipse JKube

riž. 3. Razvojni proces Java za oblak z uporabo Eclipse JKube.

Kot lahko vidimo, so tukaj vse operacije za interakcijo s Kubernetesom in vsebniki (v diagramu označene rdeče) nadomeščene s privzetimi ciljnimi nalogami Eclipse JKube, ki so navedene v tabeli. 1.

Tabela 1. Privzete naloge Eclipse JKube.

Naloga
Faza
Opis

k8s: zgraditi
PRE_INTEGRACIJA_TEST
Gradnja docker slik

k8s: potisni
INSTALL
Nalaganje slik dockerja v register

k8s: vir
PROCESS_RESOURCES
Ustvarjanje manifestov K8s

k8s:uporabi
SESTAVI
Uporaba ustvarjenih manifestov za K8

k8s: razmesti
NEZAPOSLITEV
Odstranjevanje virov K8s, ki so bili nameščeni z uporabo k8s:apply in k8s:deploy

Opomba: Če ne želite, da naloge uporabljajo te samozavestne privzete nastavitve, lahko sami ročno konfigurirate Eclipse JKube, saj podpira konfiguracijo prek XML и ресурсы.

Zdaj pa si poglejmo primere uporabe Eclipse JKube in Kubernetes Maven Plugin pri delu z aplikacijami.

Uvajanje aplikacije Java v Kubernetes z uporabo Eclipse JKube

V tem primeru bomo namestili preprosto aplikacijo Java v gručo Minikube z uporabo Eclipse JKube. Z uporabo vtičnika Kubernetes Maven lahko nastavimo parametre uvajanja, ne da bi morali napisati kakršno koli konfiguracijo.

Kot primer aplikacije uporabljamo preprost generator naključnih števil, ki ustvari izhod JSON na /random končni točki:

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

1. korak. Prenesite vtičnik Kubernetes Maven

Kubernetes Maven Plugin je v skladišču Centralno skladišče Maven. Če želite uporabljati Eclipse JKube, morate svojemu pom.xml kot odvisnost dodati vtičnik Kubernetes Maven:

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

Če se namesto čistega Kubernetesa uporablja OpenShift, se pom.xml spremeni na naslednji način:

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

2. korak. Zgradite sliko priklopne postaje

Datoteko JAR aplikacije je mogoče zgraditi z ukazom mvn package, nato pa lahko ciljno nalogo mvn k8s:build uporabite za izdelavo docker slike aplikacije. Upoštevajte, da smo s to lastnostjo preglasili privzeto ime slike:

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

Pred gradnjo slike se morate prepričati, da je docker demon pravilno izpostavljen. To lahko storite z naslednjim ukazom:

$ eval $(minikube docker-env)

Nato vnesemo ukaz mvn k8s:build in to je tisto, kar bomo videli na zaslonu pri gradnji docker slike z gradbeno nalogo Eclipse JKube:

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:build
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Building random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] k8s: Running in Kubernetes mode
[INFO] k8s: Building Docker image in Kubernetes mode
[INFO] k8s: Running generator spring-boot
[INFO] k8s: spring-boot: Using Docker image quay.io/jkube/jkube-java-binary-s2i:0.0.7 as base / builder
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Created docker-build.tar in 251 milliseconds
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Built image sha256:a20e5
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  5.053 s
[INFO] Finished at: 2020-08-10T11:28:23+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $

3. korak. Prenesite sliko v register dockerjev

Ko zgradimo sliko dockerja s konfiguriranim potisnim registrom (v našem primeru je to docker.io), lahko to sliko pošljemo v register. To je tisto, kar bo prikazano, ko bomo Eclipse JKube prosili, da izvede nalogo mvn k8s:push push:

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

Po pošiljanju slike morate preveriti, ali je vključena v register. V našem primeru ga preprosto vidimo v Docker Hubu, kot je prikazano na sl. 4.

Razvijanje aplikacij Java za Kubernetes z uporabo Eclipse JKube

riž. 4. Slika, poslana v register, se je pojavila v Docker Hubu.

4. korak. Ustvarite manifeste virov Kubernetes za aplikacijo

Tako smo zbrali sliko aplikacije, zdaj moramo napisati manifeste Kubernetes. Za to ima Eclipse JKube nalogo, ki generira toge manifeste virov na podlagi osnovnega ogrodja Java (Pomladni čevelj, quarkus, Vert.x ali katero drugo). Manifest lahko prilagodite tudi tako, da uporabite konfiguracijsko datoteko XML in postavite neobdelane fragmente (fragmente zahtevanega manifesta vira) v mapo aplikacije src/main/jkube. V tem primeru bo vaša konfiguracija naložena v ustvarjene manifeste.

V našem primeru pustimo vse tako, kot je, zato Eclipse JKube ustvari manifest za privzeto uvedbo in za storitev s tipom ClusterIP. In šele nato spremenimo manifest storitve, da spremenimo vrsto storitve v NodePort. Privzeto vedenje lahko preglasite z naslednjo lastnostjo:

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

Tako je videti izpis zaslona, ​​​​ko zahtevamo Eclipse JKube, da izvede nalogo vira mvn k8s:resource.

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

5. korak. Razmestite aplikacijo v gručo Kubernetes

Zdaj smo pripravljeni na uvajanje aplikacije: ustvarili smo njeno sliko in nato samodejno ustvarili manifeste virov. Zdaj ostane le še, da vse to uporabimo v gruči Kubernetes. Za razmestitev aplikacije lahko seveda uporabite ukaz kubectl apply -f, vendar lahko to namesto nas stori vtičnik. To je tisto, kar se bo prikazalo na zaslonu, potem ko Eclipse JKube prosimo, da izvede nalogo mvn k8s:apply apply:

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

6. korak. Odstranite aplikacije iz gruče Kubernetes

Za to se uporabi naloga razmestitve, ki preprosto odstrani vse vire, ki so bili uporabljeni v prejšnjem koraku, to je, ko se izvede naloga uporabe. To je tisto, kar bomo videli na zaslonu, potem ko bomo od Eclipse JKube zahtevali izvedbo naloge 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 : $

Kaj še lahko storite z Eclipse JKube

Tako smo si ogledali glavne ciljne naloge Eclipse JKube in Kubernetes Maven Plugin, ki olajšata razvoj aplikacij Java za platformo Kubernetes. Če ne želite nenehno vnašati teh nalog s tipkovnice, jih lahko zapišete v konfiguracijo vtičnika, na primer takole:

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

Povedati je treba, da v tem članku nismo upoštevali vseh ciljnih nalog, ki so v vtičniku Eclipse JKube in Kubernetes Maven, zato v tabeli 2 podajamo seznam dodatnih nalog, ki vam lahko prav tako koristijo.

Tabela 2. Dodatne ciljne naloge Eclipse JKube.

Naloga
Faza
Opis

k8s:log
POTRDI
Prejemanje dnevnikov iz aplikacije, ki se izvaja v Kubernetesu.

k8s: odpravljanje napak
PAKET
Odprite vrata za odpravljanje napak, da boste lahko odpravljali napake v svoji aplikaciji, ki se izvaja v Kubernetesu, neposredno iz IDE.

k8s: razmesti
INSTALL
Ustvarjanje razcepa za nalogo namestitve in uporaba ustvarjenih manifestov v gručo Kubernetes na enak način kot v primeru naloge uporabe.

k8s: pazi
PAKET
Samodejna vroča uvedba aplikacije s sledenjem njenemu imenskemu prostoru.

Uvajanje aplikacij Java na Red Hat OpenShift z uporabo vtičnika OpenShift Maven

Za namestitev aplikacije iz našega primera na platformo Red Hat OpenShift uporabljamo vtičnik OpenShift Maven. Edina razlika bo v tem, da se bo predpona opravila spremenila iz k8s v oc. Privzeto to počne vtičnik Kubernetes Maven Docker-sestave in vtičnik OpenShift Maven - sestave S2I. V našem projektu ne delamo nobenih sprememb, razen odstranitve lastnosti jkube.generator.name, ker ni potrebna pri potiskanju v register (OpenShift postavi sliko v svoj notranji register med fazo gradnje). In to je tisto, kar se bo prikazalo na zaslonu, ko bomo zagnali naš primer, v katerem mimogrede izvajamo ciljne naloge ne eno za drugo, ampak vse naenkrat:

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

Če želite izvedeti več o tem, kako olajšati razvoj Kubernetesa z Eclipse JKube, si oglejte to video vadnico o tem, kako hitro uvesti preprosto aplikacijo Spring Boot na Minikube:

Zaključek

V tem članku smo pokazali, kako Eclipse JKube olajša življenje razvijalcem Java pri delu s Kubernetesom. Več informacij o Eclipse JKube najdete na stran projekta in GitHub.

Vir: www.habr.com

Dodaj komentar