Pagpalambo sa mga Aplikasyon sa Java alang sa Kubernetes Gamit ang Eclipse JKube

25 ka tuig na ang milabay, ang Java misulod sa mainstream sa programming ug sa kadugayan nahimong usa sa mga kinauyokan nga elemento sa palibot diin ang mga application stacks gitukod. Karon, bisan pa, daghang mga tawo ug mga organisasyon nga maunongon sa Java sa daghang mga tuig ang nagkapuliki sa paglalin o naghunahuna sa paglalin sa plataporma. Kubernetes o ang mga gigikanan niini sama sa Red Hat OpenShift o Amazon EKS.

Pagpalambo sa mga Aplikasyon sa Java alang sa Kubernetes Gamit ang Eclipse JKube

Ikasubo, ang Kubernetes adunay usa ka taas nga kurba sa pagkat-on ug gipaila ang lain nga layer sa operasyon sa proseso sa pag-uswag nga naandan sa mga programmer sa Java. Karon isulti namon kanimo kung giunsa ang paggamit Eclipse JKube, aron pasimplehon kining mga dugang nga operasyon nga nalangkit sa Kubernetes ug mga sudlanan, ug pagsiguro sa walay sakit nga paglalin ngadto sa cloud platform samtang gimintinar ang pamilyar nga Java ecosystem. Dugang pa, ipakita namon kung giunsa ang pag-deploy sa mga aplikasyon sa Java sa OpenShift platform gamit ang OpenShift Maven plugin.

Tradisyonal nga Proseso sa Pag-uswag sa Java

Tradisyonal nga proseso sa pag-uswag Java (Figure 1) naglakip sa developer sa pagsulat code, unya paghimo sa deployment unit sa porma sa JAR o WAR files, ug dayon deploy ug pagpadagan niini nga mga files sa usa ka web o aplikasyon server. Ang nag-unang paagi sa pagbuhat niini mao ang paggamit sa Maven gikan sa command line o paggamit og IDE sama sa IntelliJ o Eclipse sa pag-code ug pag-package sa mga aplikasyon. Naanad na ang mga developers sa paghimo og mga pagbag-o sa code ug pag-testing sa tanan sa dili pa i-commit ang code ug isumite kini sa version control.

Pagpalambo sa mga Aplikasyon sa Java alang sa Kubernetes Gamit ang Eclipse JKube

bugas. 1. Tradisyonal nga proseso sa pagpalambo sa Java.

Proseso sa Pag-uswag sa Java alang sa Cloud

Kung mobalhin sa mga aplikasyon sa panganod, ang Kubernetes ug mga sudlanan. Busa, karon kinahanglan nga i-package sa developer ang mga aplikasyon sa Java mga hulagway sa sudlanan ug paghimo sa mga Kubernetes manifests nga naghulagway niini nga mga hulagway. Kini nga mga pagpakita kay gipadapat sa production server nga nagpadagan sa Kubernetes. Sa baylo, gikuha sa Kubernetes kini nga mga imahe gikan sa rehistro ug nag-deploy sa mga aplikasyon sumala sa mga pag-configure nga among gisulat sa mga pagpakita, nga kasagaran mga file sa YAML.

Ang metamorphosis sa tradisyonal nga proseso sa pagpalambo sa Java sa transisyon ngadto sa panganod gipakita sa Fig. 2.

Pagpalambo sa mga Aplikasyon sa Java alang sa Kubernetes Gamit ang Eclipse JKube

bugas. 2. Proseso sa pagpalambo sa Java alang sa panganod.

Eclipse JKube

Ang paglalin ngadto sa Kubernetes nagdugang og laing operational layer sa proseso sa pag-uswag, ug daghang developers ang nakulbaan bahin niini tungod kay gusto nila nga mag-focus sa ilang kinauyokan nga trabahoβ€”ang application logicβ€”kaysa unsaon kini pag-deploy. Ug kini diin kini moabut sa pagdula. Eclipse JKube, nga nagtugot sa mga developers sa paggamit sa ilang mga librarya ug mga plugins (JKube Kit kuyog ang Kubernetes Maven Plugin o OpenShift Maven Plugin) nga walay kahago sa paghimo sa container ug mga operasyon nga may kalabotan sa Kubernetes pinaagi sa pagsunod sa diagram sa Figure. 2.

Sa nahabilin niining artikuloha, ipakita namo kanimo kung unsaon pagpayano ang proseso sa pagpalambo sa Java sa Kubernetes environment pinaagi sa paggamit sa Eclipse JKube uban sa Kubernetes Maven Plugin.

Proseso sa Cloud Development Gamit ang Eclipse JKube

Atong tagdon ang usa ka gamay nga giusab nga Java development scheme alang sa panganod gikan sa Fig. 2, pagpaila sa Eclipse JKube ug Kubernetes Maven Plugin niini, ingon sa gipakita sa Fig. 3.

Pagpalambo sa mga Aplikasyon sa Java alang sa Kubernetes Gamit ang Eclipse JKube

bugas. 3. Proseso sa pagpalambo sa Java alang sa panganod gamit ang Eclipse JKube.

Sama sa atong makita, dinhi ang tanan nga mga operasyon alang sa pagpakig-uban sa Kubernetes ug mga sudlanan (gi-highlight sa pula sa diagram) gipulihan sa default Eclipse JKube tumong buluhaton, nga gilista sa Table. 1.

Lamesa 1. Eclipse JKube default nga mga buluhaton.

Tumong
Stage
paghulagway

k8s:pagtukod
PRE_INTEGRATION_TEST
Pagtukod og mga imahe sa docker

k8s: iduso
instalar
Pag-upload sa mga imahe sa docker sa rehistro

k8s: kapanguhaan
PROCESS_RESOURCES
Pagmugna og K8s manifests

k8s:aplay
PAGTIPON
Pagpadapat sa namugna nga mga manifest sa K8s

k8s: i-undeploy
UNDEPLOY
Pagtangtang sa mga kapanguhaan sa K8 nga gipakatap gamit ang k8s:apply ug k8s:deploy

Mubo nga sulat: Kung dili nimo gusto ang mga buluhaton nga gamiton kini nga mga opinyon nga default, mahimo nimo nga mano-mano nga i-configure ang Eclipse JKube alang sa imong kaugalingon, tungod kay gisuportahan niini ang pag-configure pinaagi sa XML ΠΈ kahinguhaan.

Karon atong tan-awon ang mga pananglitan sa paggamit sa Eclipse JKube ug Kubernetes Maven Plugin sa pagtrabaho uban sa mga aplikasyon.

Pag-deploy og Java Application sa Kubernetes Gamit ang Eclipse JKube

Sa kini nga pananglitan mag-deploy kami usa ka yano nga aplikasyon sa Java sa usa ka cluster Minikube gamit ang Eclipse JKube. Gamit ang Kubernetes Maven Plugin, mahimo namong itakda ang mga parametro sa pag-deploy nga dili na kinahanglang magsulat og bisan unsang configuration.

Ingon usa ka pananglitan nga aplikasyon nga among gigamit simple nga random number generator, nga nagpatunghag JSON output sa / random endpoint:

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

Lakang 1. I-download ang Kubernetes Maven Plugin

Ang Kubernetes Maven Plugin naa sa repositoryo Maven Central Repository. Aron magamit ang Eclipse JKube kinahanglan nimong idugang ang Kubernetes Maven Plugin sa imong pom.xml isip dependency:

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

Kung ang OpenShift gigamit imbes nga puro Kubernetes, unya ang pom.xml giusab ingon sa mosunod:

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

Lakang 2. Pagtukod sa docker nga imahe

Ang JAR file sa aplikasyon mahimong matukod gamit ang mvn package command, ug dayon ang mvn goal task k8s:build mahimong magamit sa paghimo ug docker image sa aplikasyon. Timan-i nga among gi-override ang default nga ngalan sa imahe sa kini nga kabtangan:

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

Sa wala pa magtukod sa imahe, kinahanglan nimo nga sigurohon nga ang docker daemon nahayag sa husto. Mahimo kini pinaagi sa mosunod nga sugo:

$ eval $(minikube docker-env)

Dayon atong isulod ang mvn k8s:build command, ug mao kini ang atong makita sa screen sa pagtukod sa docker image gamit ang Eclipse JKube build task:

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

Lakang 3. I-upload ang hulagway sa rehistro sa docker

Pagkahuman namon matukod ang imahe sa docker nga na-configure ang push registry (sa among kaso kini docker.io), mahimo namon ipadala kini nga imahe sa registry. Mao kini ang ipakita human namo hangyoa ang Eclipse JKube sa pagbuhat sa mvn k8s:push push task:

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

Human ipadala ang imahe, kinahanglan nimo nga susihon nga kini gilakip sa rehistro. Sa among kaso, makita ra namon kini sa Docker Hub, ingon sa gipakita sa Fig. 4.

Pagpalambo sa mga Aplikasyon sa Java alang sa Kubernetes Gamit ang Eclipse JKube

bugas. 4. Ang hulagway nga gipadala sa registry nagpakita sa Docker Hub.

Lakang 4. Paghimo Kubernetes resource manifests alang sa aplikasyon

Mao nga, nakolekta namon ang imahe sa aplikasyon, karon kinahanglan namon nga isulat ang mga pagpakita sa Kubernetes. Aron mahimo kini, ang Eclipse JKube adunay usa ka buluhaton nga nagpatunghag estrikto nga resource manifests base sa nagpahiping Java framework (Spring boot, quarkus, Vert.x o uban pa). Mahimo usab nimo ipasibo ang manifest pinaagi sa paggamit sa XML configuration file ug pagbutang sa mga hilaw nga tipik (mga tipik sa gikinahanglan nga resource manifest) sa application folder src/main/jkube. Sa kini nga kaso, ang imong configuration i-upload sa mga namugna nga mga manifest.

Sa among panig-ingnan, gibiyaan namon ang tanan kung unsa, ug busa ang Eclipse JKube nagmugna usa ka pagpakita alang sa default nga pag-deploy ug alang sa serbisyo nga adunay tipo nga ClusterIP. Ug pagkahuman lang namo usbon ang service manifest aron usbon ang tipo sa serbisyo sa NodePort. Mahimo nimong i-override ang default nga pamatasan gamit ang mosunod nga kabtangan:

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

Mao kini ang hitsura sa output sa screen human namo hangyoa ang Eclipse JKube sa paghimo sa mvn k8s:resource resource task.

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

Lakang 5. I-deploy ang aplikasyon sa Kubernetes cluster

Karon andam na kaming tanan sa pag-deploy sa aplikasyon: namugna namo ang imahe niini ug dayon nagmugna og mga resource manifest. Karon ang nahabilin mao ang paggamit sa tanan niini sa Kubernetes cluster. Aron ma-deploy ang aplikasyon, mahimo nimo, siyempre, gamiton ang kubectl apply -f command, apan ang plugin makahimo niini alang kanamo. Mao kini ang makita sa screen human namo hangyoa ang Eclipse JKube nga ipatuman ang mvn k8s:apply apply task:

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

Lakang 6. I-undeploy ang mga aplikasyon gikan sa Kubernetes cluster

Aron mahimo kini, ang undeploy nga buluhaton gigamit, nga yano nga nagtangtang sa tanan nga mga kahinguhaan nga gipadapat sa miaging lakang, nga mao, kung ang aplikasyon nga buluhaton gipatuman. Mao kini ang atong makita sa screen human nato hangyoon ang Eclipse JKube sa paghimo sa mvn k8s: undeploy undeploy task:

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

Unsa pa ang imong mahimo sa Eclipse JKube

Busa, among gitan-aw ang mga nag-unang tumong nga mga buluhaton sa Eclipse JKube ug Kubernetes Maven Plugin, nga nagpadali sa pagpalambo sa mga aplikasyon sa Java alang sa Kubernetes nga plataporma. Kung dili nimo gusto nga kanunay nga mosulod niini nga mga buluhaton gikan sa keyboard, mahimo nimong isulat kini sa pag-configure sa plugin, pananglitan, sama niini:

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

Kinahanglang isulti nga sa kini nga artikulo wala namon gikonsiderar ang tanan nga mga buluhaton sa katuyoan nga naa sa Eclipse JKube ug Kubernetes Maven Plugin, busa naghatag kami sa Talaan 2 usa ka lista sa dugang nga mga buluhaton nga mahimo usab nga mapuslanon kanimo.

Lamesa 2. Dugang nga mga buluhaton sa tumong sa Eclipse JKube.

Tumong
Stage
paghulagway

k8s: log
BALIDATE
Pagdawat og mga log gikan sa aplikasyon nga nagdagan sa Kubernetes.

k8s: debug
nga package
Ablihi ang debug port aron imong ma-debug ang imong aplikasyon nga nagdagan sa Kubernetes direkta gikan sa IDE.

k8s: ipakaylap
instalar
Paghimo ug tinidor alang sa buluhaton sa Pag-install ug pag-aplay sa mga namugna nga mga pagpakita sa pundok sa Kubernetes sa parehas nga paagi sama sa kaso sa buluhaton nga magamit.

k8s:tan-aw
nga package
Awtomatikong init nga pag-deploy sa usa ka aplikasyon pinaagi sa pagsubay sa namespace niini.

Pag-deploy sa Java Applications sa Red Hat OpenShift Gamit ang OpenShift Maven Plugin

Aron i-deploy ang aplikasyon gikan sa among panig-ingnan sa Red Hat OpenShift nga plataporma, among gigamit ang plugin OpenShift Maven. Ang bugtong kalainan mao nga ang prefix sa buluhaton mausab gikan sa k8s ngadto sa oc. Sa kasagaran ang Kubernetes Maven plugin gibuhat docker-assemblies, ug ang OpenShift Maven plugin - assemblies S2I. Wala kami maghimo ug bisan unsang mga pagbag-o sa among proyekto gawas sa pagtangtang sa kabtangan sa jkube.generator.name tungod kay wala kini kinahanglan kung magduso sa rehistro (Gibutang sa OpenShift ang imahe sa internal nga rehistro niini sa panahon sa pagtukod). Ug kini ang makita sa screen kung gipadagan namon ang among panig-ingnan, diin, sa tinuud, gihimo namon ang mga buluhaton sa katuyoan dili usa sa usa ka higayon, apan tanan sa usa ka higayon:

~/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 nga leksyon

Aron makakat-on og dugang mahitungod sa kung unsaon paghimo sa Kubernetes nga mas sayon ​​​​nga pag-uswag sa Eclipse JKube, tan-awa kini nga video tutorial kung unsaon pag-deploy dayon sa usa ka yano nga Spring Boot nga aplikasyon sa Minikube:

konklusyon

Sa kini nga artikulo, gipakita namon kung giunsa ang Eclipse JKube nagpadali sa kinabuhi alang sa usa ka developer sa Java kung nagtrabaho kauban ang Kubernetes. Dugang nga impormasyon sa Eclipse JKube makita sa website sa proyekto ug padayon GitHub.

Source: www.habr.com

Idugang sa usa ka comment