Pagbuo ng mga Java Application para sa Kubernetes Gamit ang Eclipse JKube

25 taon na ang nakalilipas, pumasok ang Java sa mainstream ng programming at kalaunan ay naging isa sa mga pangunahing elemento sa paligid kung saan binuo ang mga stack ng application. Ngayon, gayunpaman, maraming mga tao at organisasyon na naging tapat sa Java sa loob ng maraming taon ay abala sa paglipat o isinasaalang-alang ang paglipat sa platform. Kubernetes o mga derivatives nito tulad ng Red Hat OpenShift o Amazon EKS.

Pagbuo ng mga Java Application para sa Kubernetes Gamit ang Eclipse JKube

Sa kasamaang palad, ang Kubernetes ay may isang matarik na curve sa pag-aaral at nagpapakilala ng isa pang operational layer sa proseso ng pag-develop na nakasanayan ng mga Java programmer. Ngayon sasabihin namin sa iyo kung paano gamitin Eclipse JKube, upang pasimplehin ang mga karagdagang operasyong ito na nauugnay sa Kubernetes at mga container, at tiyakin ang walang sakit na paglipat sa cloud platform habang pinapanatili ang pamilyar na Java ecosystem. Bukod dito, ipapakita namin kung paano mag-deploy ng mga Java application sa OpenShift platform gamit ang OpenShift Maven plugin.

Tradisyunal na Proseso ng Pag-unlad ng Java

Tradisyonal na proseso ng pag-unlad Java Ang (Figure 1) ay kinabibilangan ng developer sa pagsusulat ng code, pagkatapos ay paggawa ng mga deployment unit sa anyo ng mga JAR o WAR file, at pagkatapos ay i-deploy at patakbuhin ang mga file na ito sa isang web o application server. Ang pangunahing paraan upang gawin ito ay ang paggamit ng Maven mula sa command line o gumamit ng IDE tulad ng IntelliJ o Eclipse para i-code at i-package ang mga application. Nakasanayan na ng mga developer na gumawa ng mga pagbabago sa code at masuri ang lahat ng bagay bago ibigay ang code at isumite ito sa kontrol ng bersyon.

Pagbuo ng mga Java Application para sa Kubernetes Gamit ang Eclipse JKube

kanin. 1. Tradisyunal na proseso ng pagbuo ng Java.

Proseso ng Pag-develop ng Java para sa Cloud

Kapag lumilipat sa mga cloud application, Kubernetes at Lalagyan. Samakatuwid, ngayon kailangan ng developer na i-package ang mga application ng Java mga larawan ng lalagyan at lumikha ng mga Kubernetes manifest na naglalarawan sa mga larawang ito. Ilalapat ang mga manifest na ito sa production server na nagpapatakbo ng Kubernetes. Sa turn, kinukuha ng Kubernetes ang mga larawang ito mula sa registry at nagde-deploy ng mga application ayon sa mga configuration na isinulat namin sa mga manifest, na karaniwang mga YAML file.

Ang metamorphosis ng tradisyonal na proseso ng pag-unlad ng Java sa paglipat sa ulap ay ipinapakita sa Fig. 2.

Pagbuo ng mga Java Application para sa Kubernetes Gamit ang Eclipse JKube

kanin. 2. Proseso ng pagbuo ng Java para sa cloud.

Eclipse JKube

Ang paglipat sa Kubernetes ay nagdaragdag ng isa pang operational layer sa proseso ng pag-develop, at maraming developer ang kinakabahan tungkol dito dahil gusto nilang tumuon sa kanilang pangunahing gawainβ€”ang application logicβ€”sa halip na kung paano i-deploy ang mga ito. At dito ito pumapasok. Eclipse JKube, na nagpapahintulot sa mga developer na gamitin ang kanilang mga library at plugin (JKube Kit may Kubernetes Maven Plugin o OpenShift Maven Plugin) upang walang kahirap-hirap na magsagawa ng container at mga operasyong nauugnay sa Kubernetes sa pamamagitan ng pagsunod sa diagram sa Figure. 2.

Sa natitirang bahagi ng artikulong ito, ipapakita namin sa iyo kung paano gawing simple ang proseso ng pagbuo ng Java sa kapaligiran ng Kubernetes sa pamamagitan ng paggamit ng Eclipse JKube kasama ang Kubernetes Maven Plugin.

Proseso ng Cloud Development Gamit ang Eclipse JKube

Isaalang-alang natin ang bahagyang binagong Java development scheme para sa cloud mula sa Fig. 2, na ipinapasok dito ang Eclipse JKube at Kubernetes Maven Plugin, tulad ng ipinapakita sa Fig. 3.

Pagbuo ng mga Java Application para sa Kubernetes Gamit ang Eclipse JKube

kanin. 3. Proseso ng pagbuo ng Java para sa cloud gamit ang Eclipse JKube.

Tulad ng nakikita natin, narito ang lahat ng mga operasyon para sa pakikipag-ugnayan sa mga Kubernetes at mga lalagyan (na naka-highlight sa pula sa diagram) ay pinapalitan ng mga default na gawain sa layunin ng Eclipse JKube, na nakalista sa Talahanayan. 1.

mesa 1. Eclipse JKube default na gawain.

Gawain
Stage
ОписаниС

k8s:build
PRE_INTEGRATION_TEST
Pagbuo ng mga larawan ng docker

k8s: itulak
INSTALL
Pag-upload ng mga larawan ng docker sa registry

k8s: mapagkukunan
PROCESS_RESOURCES
Pagbuo ng mga K8 na manifest

k8s:mag-apply
I-COMPILE
Paglalapat ng mga nabuong manifest sa K8s

k8s:undeploy
UNDEPLOY
Pag-alis ng mga mapagkukunan ng K8 na na-deploy gamit ang k8s:apply at k8s:deploy

Tandaan: Kung hindi mo gustong gamitin ng mga gawain ang mga opinyong default na ito, maaari mong manu-manong i-configure ang Eclipse JKube para sa iyong sarili, dahil sinusuportahan nito ang configuration sa pamamagitan ng XML ΠΈ mapagkukunan.

Ngayon tingnan natin ang mga halimbawa ng paggamit ng Eclipse JKube at Kubernetes Maven Plugin kapag nagtatrabaho sa mga application.

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

Sa halimbawang ito, magde-deploy kami ng simpleng Java application sa isang cluster Minikube gamit ang Eclipse JKube. Gamit ang Kubernetes Maven Plugin, maaari kaming magtakda ng mga parameter ng deployment nang hindi kinakailangang sumulat ng anumang configuration.

Bilang isang halimbawa ng application na ginagamit namin simpleng random number generator, na gumagawa ng 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"
}

Hakbang 1. I-download ang Kubernetes Maven Plugin

Ang Kubernetes Maven Plugin ay nasa repositoryo Maven Central Repository. Upang magamit ang Eclipse JKube kailangan mong idagdag ang Kubernetes Maven Plugin sa iyong pom.xml bilang dependency:

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

Kung OpenShift ang ginagamit sa halip na purong Kubernetes, ang pom.xml ay binago tulad ng sumusunod:

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

Hakbang 2. Buuin ang imahe ng docker

Ang JAR file ng application ay maaaring buuin gamit ang mvn package command, at pagkatapos ay ang mvn goal task na k8s:build ay maaaring gamitin upang bumuo ng docker image ng application. Tandaan na na-override namin ang default na pangalan ng larawan gamit ang property na ito:

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

Bago buuin ang imahe, kailangan mong tiyakin na ang docker daemon ay nakalantad nang tama. Magagawa ito gamit ang sumusunod na utos:

$ eval $(minikube docker-env)

Pagkatapos ay ipinasok natin ang mvn k8s:build command, at ito ang makikita natin sa screen kapag binuo ang 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 : $

Hakbang 3. I-upload ang larawan sa registry ng docker

Pagkatapos naming mabuo ang docker image na may push registry na na-configure (sa aming kaso ito ay docker.io), maaari naming ipadala ang larawang ito sa registry. Ito ang ipapakita pagkatapos naming hilingin sa Eclipse JKube na gawin ang 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 : $ 

Pagkatapos ipadala ang imahe, kailangan mong suriin kung kasama ito sa pagpapatala. Sa aming kaso, nakikita lang namin ito sa Docker Hub, tulad ng ipinapakita sa Fig. 4.

Pagbuo ng mga Java Application para sa Kubernetes Gamit ang Eclipse JKube

kanin. 4. Ang larawang ipinadala sa registry ay lumabas sa Docker Hub.

Hakbang 4. Bumuo ng Kubernetes resource manifests para sa application

Kaya, nakolekta namin ang imahe ng application, ngayon kailangan naming isulat ang mga manifest ng Kubernetes. Upang gawin ito, ang Eclipse JKube ay may isang gawain na bumubuo ng mga matibay na resource manifest batay sa pinagbabatayan na balangkas ng Java (Spring boot, quarkus, Vert.x o iba pa). Maaari mo ring i-customize ang manifest sa pamamagitan ng paggamit ng XML configuration file at paglalagay ng mga raw fragment (mga fragment ng kinakailangang resource manifest) sa application folder na src/main/jkube. Sa kasong ito, ia-upload ang iyong configuration sa mga nabuong manifest.

Sa aming halimbawa, hinahayaan namin ang lahat ng bagay, at samakatuwid ang Eclipse JKube ay bumubuo ng isang manifest para sa default na pag-deploy at para sa serbisyong may uri ng ClusterIP. At pagkatapos lamang namin baguhin ang manifest ng serbisyo upang baguhin ang uri ng serbisyo sa NodePort. Maaari mong i-override ang default na gawi gamit ang sumusunod na property:

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

Ganito ang hitsura ng screen output pagkatapos naming hilingin sa Eclipse JKube na gawin ang 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 : $

Hakbang 5. I-deploy ang application sa Kubernetes cluster

Ngayon ay handa na kaming i-deploy ang application: nabuo namin ang imahe nito at pagkatapos ay awtomatikong nakabuo ng mga resource manifest. Ngayon ang natitira na lang ay ilapat ang lahat ng ito sa cluster ng Kubernetes. Upang i-deploy ang application, maaari mong, siyempre, gamitin ang kubectl apply -f command, ngunit magagawa ito ng plugin para sa amin. Ito ang lalabas sa screen pagkatapos naming hilingin sa Eclipse JKube na isagawa 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"
}

Hakbang 6. I-undeploy ang mga application mula sa Kubernetes cluster

Upang gawin ito, ginagamit ang undeploy na gawain, na nag-aalis lamang ng lahat ng mga mapagkukunan na inilapat sa nakaraang hakbang, iyon ay, kapag naisakatuparan ang pag-apply na gawain. Ito ang makikita natin sa screen pagkatapos naming hilingin sa Eclipse JKube na gawin ang 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 : $

Ano pa ang maaari mong gawin sa Eclipse JKube

Kaya, tiningnan namin ang mga pangunahing layunin na gawain ng Eclipse JKube at Kubernetes Maven Plugin, na nagpapadali sa pagbuo ng mga Java application para sa Kubernetes platform. Kung hindi mo nais na patuloy na ipasok ang mga gawaing ito mula sa keyboard, maaari mong isulat ang mga ito sa pagsasaayos ng plugin, halimbawa, tulad nito:

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

Dapat sabihin na sa artikulong ito ay hindi namin isinasaalang-alang ang lahat ng mga gawain sa layunin na nasa Eclipse JKube at Kubernetes Maven Plugin, kaya nagbibigay kami sa Talahanayan 2 ng isang listahan ng mga karagdagang gawain na maaaring maging kapaki-pakinabang din sa iyo.

mesa 2. Karagdagang mga gawain sa layunin ng Eclipse JKube.

Gawain
Stage
ОписаниС

k8s:log
I-VALIDATE
Pagtanggap ng mga log mula sa isang application na tumatakbo sa Kubernetes.

k8s:debug
PACKAGE
Magbukas ng debug port para ma-debug mo ang iyong application na tumatakbo sa Kubernetes nang direkta mula sa IDE.

k8s:deploy
INSTALL
Paggawa ng fork para sa gawaing Pag-install at paglalapat ng mga nabuong manifest sa cluster ng Kubernetes sa parehong paraan tulad ng sa kaso ng gawaing ilapat.

k8s:manood
PACKAGE
Awtomatikong mainit na pag-deploy ng isang application sa pamamagitan ng pagsubaybay sa namespace nito.

Pag-deploy ng mga Java Application sa Red Hat OpenShift Gamit ang OpenShift Maven Plugin

Upang i-deploy ang application mula sa aming halimbawa sa platform ng Red Hat OpenShift, ginagamit namin ang plugin OpenShift Maven. Ang pagkakaiba lang ay ang task prefix ay magbabago mula k8s hanggang oc. Bilang default, ginagawa ng Kubernetes Maven plugin docker-assemblies, at ang OpenShift Maven plugin - assemblies S2I. Hindi kami gumagawa ng anumang mga pagbabago sa aming proyekto maliban sa pag-alis ng property na jkube.generator.name dahil hindi ito kinakailangan kapag nagtutulak sa registry (inilalagay ng OpenShift ang imahe sa panloob na registry nito sa yugto ng pagbuo). At ito ang lalabas sa screen kapag pinatakbo namin ang aming halimbawa, kung saan, sa pamamagitan ng paraan, nagsasagawa kami ng mga gawain sa layunin hindi nang paisa-isa, ngunit nang sabay-sabay:

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

Upang matuto nang higit pa tungkol sa kung paano gawing mas madali ang pag-develop ng Kubernetes sa Eclipse JKube, panoorin ang video tutorial na ito kung paano mabilis na mag-deploy ng simpleng Spring Boot na application sa Minikube:

Konklusyon

Sa artikulong ito, ipinakita namin kung paano pinapadali ng Eclipse JKube ang buhay para sa isang developer ng Java kapag nagtatrabaho sa Kubernetes. Higit pang impormasyon sa Eclipse JKube ay matatagpuan sa website ng proyekto at GitHub.

Pinagmulan: www.habr.com

Magdagdag ng komento