Evoluigante Java-Aplikojn por Kubernetes Uzante Eclipse JKube

Antaŭ 25 jaroj, Java eniris la ĉeftendencon de programado kaj finfine iĝis unu el la kernaj elementoj ĉirkaŭ kiuj aplikaĵstakoj estas konstruitaj. Tamen hodiaŭ multaj homoj kaj organizoj, kiuj estis lojalaj al Java dum multaj jaroj, okupas migradon aŭ pripensas migri al la platformo. Kubernetoj aŭ ĝiaj derivaĵoj kiel ekz OpenShift de Ruĝa ĈapeloAmazon EX.

Evoluigante Java-Aplikojn por Kubernetes Uzante Eclipse JKube

Bedaŭrinde, Kubernetes havas krutan lernkurbon kaj enkondukas alian operacian tavolon en la evoluprocezon, al kiu kutimas Java-programistoj. Hodiaŭ ni rakontos al vi kiel uzi Eklipso JKube, por simpligi ĉi tiujn aldonajn operaciojn asociitajn kun Kubernetes kaj ujoj, kaj certigi sendoloran migradon al la nuba platformo konservante la konatan Java-ekosistemon. Plie, ni montros kiel disfaldi Java-aplikaĵojn sur la platformo OpenShift uzante la kromprogramon OpenShift Maven.

Tradicia Java Evoluprocezo

Tradicia disvolva procezo java (Figuro 1) implikas la programiston skribanta kodon, tiam kreante deplojajn unuojn en la formo de JAR aŭ WAR-dosieroj, kaj tiam deplojante kaj funkciigante ĉi tiujn dosierojn sur retejo aŭ aplikaĵoservilo. La ĉefa maniero fari tion estas uzi Maven de la komandlinio aŭ uzi IDE kiel IntelliJ aŭ Eclipse por kodi kaj paki la aplikaĵojn. Programistoj kutimas fari kodŝanĝojn kaj provi ĉion ĝisfunde antaŭ ol fari la kodon kaj sendi ĝin al versio-kontrolo.

Evoluigante Java-Aplikojn por Kubernetes Uzante Eclipse JKube

Rizo. 1. Tradicia Java evoluprocezo.

Java Evoluprocezo por la Nubo

Kiam vi moviĝas al nubaj aplikoj, Kubernetes kaj ujoj. Tial nun la programisto devas paki Java-aplikaĵojn enen ujbildoj kaj kreu manifestojn de Kubernetes, kiuj priskribas ĉi tiujn bildojn. Ĉi tiuj manifestoj tiam estas aplikataj al la produktadservilo kuranta Kubernetes. Siavice, Kubernetes prenas ĉi tiujn bildojn el la registro kaj disfaldas aplikaĵojn laŭ la agordoj, kiujn ni skribis en manifestoj, kiuj kutime estas YAML-dosieroj.

La metamorfozo de la tradicia Java evoluprocezo en la transiro al la nubo estas montrita en Fig. 2.

Evoluigante Java-Aplikojn por Kubernetes Uzante Eclipse JKube

Rizo. 2. Java evoluprocezo por la nubo.

Eklipso JKube

Migri al Kubernetes aldonas alian funkcian tavolon al la evoluprocezo, kaj multaj programistoj estas nervozaj pri ĝi ĉar ili volas koncentriĝi pri sia kernlaboro—la aplika logiko—prefere ol kiel disfaldi ilin. Kaj ĉi tie ĝi venas en ludon. Eklipso JKube, kiu permesas al programistoj uzi siajn bibliotekojn kaj kromaĵojn (JKube Kit kune kun Kubernetes Maven KromaĵoOpenShift Maven Kromaĵo) senpene plenumi ujon kaj Kubernetes-rilatajn operaciojn sekvante la diagramon en Figuro. 2.

En la resto de ĉi tiu artikolo, ni montros al vi kiel simpligi la Java-disvolvan procezon en la medio Kubernetes uzante Eclipse JKube kun la Kubernetes Maven Plugin.

Nuba Disvolva Procezo Uzante Eclipse JKube

Ni konsideru iomete modifitan Java-disvolvan skemon por la nubo el Fig. 2, enkondukante Eclipse JKube kaj Kubernetes Maven Plugin en ĝin, kiel montrite en Fig. 3.

Evoluigante Java-Aplikojn por Kubernetes Uzante Eclipse JKube

Rizo. 3. Java evoluprocezo por la nubo uzante Eclipse JKube.

Kiel ni povas vidi, ĉi tie ĉiuj operacioj por interagado kun Kubernetes kaj ujoj (markitaj ruĝe en la diagramo) estas anstataŭigitaj defaŭlte Eclipse JKube-celaj taskoj, kiuj estas listigitaj en Tabelo. 1.

Tablo 1. Eclipse JKube defaŭltaj taskoj.

Objektivo
Scenejo
Priskribo

k8s:konstrui
PRE_INTEGRATION_TEST
Konstruante docker bildojn

k8s:puŝo
INSTALL
Alŝutante docker-bildojn al la registro

k8s:rimedo
PROCESS_RESOURCES
Generante K8s-manifestojn

k8s:aplikas
KOMPILI
Aplikante generitajn manifestojn al K8s

k8s:maldeploji
SENPLUGI
Forigante K8s-resursojn kiuj estis deplojitaj uzante k8s:apply kaj k8s:deploy

Notu: Se vi ne volas, ke taskoj uzu ĉi tiujn opiniajn defaŭltojn, vi povas mane agordi Eclipse JKube por vi mem, ĉar ĝi subtenas agordon per XML и rimedoj.

Nun ni rigardu ekzemplojn de uzado de Eclipse JKube kaj Kubernetes Maven Plugin kiam vi laboras kun aplikaĵoj.

Deplojante Java Aplikon sur Kubernetes Uzante Eclipse JKube

En ĉi tiu ekzemplo ni deplojos simplan Java-aplikaĵon sur areto Minikube uzante Eclipse JKube. Uzante la Kubernetes Maven Plugin, ni povas agordi disfaldajn parametrojn sen devi skribi ajnan agordon.

Kiel ekzemplon aplikaĵon ni uzas simpla hazarda nombro-generatoro, kiu produktas JSON-produktaĵon ĉe la /hazarda finpunkto:

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

Paŝo 1. Elŝutu Kubernetes Maven Plugin

Kubernetes Maven Plugin estas en la deponejo Maven Centra Deponejo. Por uzi Eclipse JKube vi devas aldoni la Kubernetes Maven Plugin al via pom.xml kiel dependeco:

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

Se OpenShift estas uzata anstataŭ pura Kubernetes, tiam pom.xml estas modifita jene:

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

Paŝo 2. Konstruu la docker-bildon

La JAR-dosiero de la aplikaĵo povas esti konstruita per la mvn package-komando, kaj tiam la mvn goaltasko k8s:build povas esti uzata por konstrui docker-bildon de la aplikaĵo. Notu, ke ni anstataŭis la defaŭltan bildonomon per ĉi tiu posedaĵo:

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

Antaŭ ol konstrui la bildon, vi devas certigi, ke la docker-demono estas ĝuste elmontrita. Ĉi tio povas esti farita per la sekva komando:

$ eval $(minikube docker-env)

Poste ni enigas la komandon mvn k8s:build, kaj jen kion ni vidos sur la ekrano kiam ni konstruas la docker-bildon uzante la konstrutaskon 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 : $

Paŝo 3. Alŝutu la bildon al la docker-registro

Post kiam ni konstruis la docker-bildon kun la puŝa registro agordita (en nia kazo ĝi estas docker.io), ni povas sendi ĉi tiun bildon al la registro. Jen kio montriĝos post kiam ni petos al Eclipse JKube plenumi la mvn k8s:push push taskon:

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

Post sendi la bildon, vi devas kontroli, ke ĝi estas inkluzivita en la registro. En nia kazo, ni simple vidas ĝin en Docker Hub, kiel montrite en Fig. 4.

Evoluigante Java-Aplikojn por Kubernetes Uzante Eclipse JKube

Rizo. 4. La bildo sendita al la registro aperis en Docker Hub.

Paŝo 4. Generu manifestojn de rimedoj de Kubernetes por la aplikaĵo

Do, ni kolektis la aplikan bildon, nun ni devas skribi manifestojn de Kubernetes. Por fari tion, Eclipse JKube havas taskon, kiu generas rigidajn rimedmanifestojn bazitajn sur la subesta Java kadro (Printempa boteto, quarkus, Vert.x aŭ iu alia). Vi ankaŭ povas personecigi la manifeston uzante XML-agordan dosieron kaj metante krudajn fragmentojn (fragmentojn de la bezonata rimeda manifesto) en la aplikaĵa dosierujo src/main/jkube. En ĉi tiu kazo, via agordo estos alŝutita al la generitaj manifestoj.

En nia ekzemplo, ni lasas ĉion kiel estas, kaj tial Eclipse JKube generas manifeston por la defaŭlta deplojo kaj por la servo kun tipo ClusterIP. Kaj nur tiam ni modifas la servo manifeston por ŝanĝi la servotipo al NodePort. Vi povas superregi la defaŭltan konduton uzante la jenan posedaĵon:

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

Jen kiel aspektas la ekrana eligo post kiam ni petas Eclipse JKube plenumi la taskon 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 : $

Paŝo 5. Deploji la aplikaĵon al la Kubernetes-grupo

Nun ni ĉiuj estas pretaj por deploji la aplikaĵon: ni generis ĝian bildon kaj poste aŭtomate generis rimedmanifestojn. Nun restas nur apliki ĉion ĉi al la Kubernetes-areo. Por disfaldi la aplikaĵon, vi povas, kompreneble, uzi la komandon kubectl apply -f, sed la kromprogramo povas fari tion por ni. Jen kio aperos sur la ekrano post kiam ni petos al Eclipse JKube ekzekuti la mvn k8s:aply apply taskon:

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

Paŝo 6. Maldeploji aplikojn de la Kubernetes-grupo

Por fari tion, oni uzas la sendeplojan taskon, kiu simple forigas ĉiujn rimedojn, kiuj estis aplikitaj en la antaŭa paŝo, tio estas, kiam la aplika tasko estas ekzekutita. Jen kion ni vidos sur la ekrano post kiam ni petos al Eclipse JKube plenumi la taskon mvn k8s:undeploy maldeploi:

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

Kion alian vi povas fari kun Eclipse JKube

Do, ni rigardis la ĉefajn celajn taskojn de Eclipse JKube kaj Kubernetes Maven Plugin, kiuj faciligas la disvolviĝon de Java-aplikoj por la platformo Kubernetes. Se vi ne volas konstante enigi ĉi tiujn taskojn de la klavaro, vi povas skribi ilin en la aldonaĵa agordo, ekzemple, jene:

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

Oni devas diri, ke en ĉi tiu artikolo ni ne konsideris ĉiujn celajn taskojn, kiuj estas en Eclipse JKube kaj Kubernetes Maven Plugin, do ni provizas en Tabelo 2 liston de pliaj taskoj, kiuj ankaŭ povas esti utilaj al vi.

Tablo 2. Pliaj Eklipso JKube-celaj taskoj.

Objektivo
Scenejo
Priskribo

k8s:log
VALIDIGI
Ricevante protokolojn de aplikaĵo funkcianta sur Kubernetes.

k8s:debug
pako
Malfermu sencimigan havenon por ke vi povu sencimigi vian aplikaĵon funkciantan sur Kubernetes rekte de la IDE.

k8s:deploji
INSTALL
Krei forkon por la Instala tasko kaj aplikante la generitajn manifestojn al la Kubernetes-grupo sammaniere kiel en la kazo de la aplika tasko.

k8s:horloĝo
pako
Aŭtomata varma deplojo de aplikaĵo spurante ĝian nomspacon.

Deplojante Java-Aplikojn sur Red Hat OpenShift Uzante la OpenShift Maven Plugin

Por deploji la aplikaĵon de nia ekzemplo sur la platformo Red Hat OpenShift, ni uzas la kromprogramon OpenShift Maven. La nura diferenco estos, ke la taskoprefikso ŝanĝiĝos de k8s al oc. Defaŭlte la kromprogramo Kubernetes Maven faras docker-asembleoj, kaj la aldonaĵo OpenShift Maven - asembleoj S2I. Ni faras neniujn ŝanĝojn al nia projekto krom forigi la posedaĵon jkube.generator.name ĉar ĝi ne estas bezonata dum puŝado al la registro (OpenShift metas la bildon en ĝian internan registron dum la konstrufazo). Kaj jen kio aperos sur la ekrano kiam ni prizorgos nian ekzemplon, en kiu, cetere, ni plenumas celajn taskojn ne unuope, sed ĉiuj samtempe:

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

Videoleciono

Por lerni pli pri kiel faciligi la disvolviĝon de Kubernetes kun Eclipse JKube, spektu ĉi tiun videolerniilon pri kiel rapide deploji simplan Spring Boot-aplikaĵon sur Minikube:

konkludo

En ĉi tiu artikolo, ni montris kiel Eclipse JKube faciligas la vivon al Java-programisto kiam laboras kun Kubernetes. Pliaj informoj pri Eclipse JKube troveblas ĉe retejo de la projekto kaj plu GitHub.

fonto: www.habr.com

Aldoni komenton