Membangunkan Aplikasi Java untuk Kubernetes Menggunakan Eclipse JKube

25 tahun yang lalu, Java memasuki arus perdana pengaturcaraan dan akhirnya menjadi salah satu elemen teras di mana susunan aplikasi dibina. Walau bagaimanapun, hari ini, ramai orang dan organisasi yang telah setia kepada Java selama bertahun-tahun sibuk berhijrah atau mempertimbangkan untuk berhijrah ke platform. Kubernetes atau derivatifnya seperti Red Hat OpenShift atau Amazon EKS.

Membangunkan Aplikasi Java untuk Kubernetes Menggunakan Eclipse JKube

Malangnya, Kubernetes mempunyai keluk pembelajaran yang curam dan memperkenalkan satu lagi lapisan operasi ke dalam proses pembangunan yang biasa dilakukan oleh pengaturcara Java. Hari ini kami akan memberitahu anda cara menggunakannya Gerhana JKube, untuk memudahkan operasi tambahan yang dikaitkan dengan Kubernetes dan bekas ini, dan memastikan pemindahan yang tidak menyakitkan ke platform awan sambil mengekalkan ekosistem Java yang biasa. Selain itu, kami akan menunjukkan cara untuk menggunakan aplikasi Java pada platform OpenShift menggunakan pemalam OpenShift Maven.

Proses Pembangunan Java Tradisional

Proses pembangunan tradisional Java (Rajah 1) melibatkan kod penulisan pembangun, kemudian mencipta unit penempatan dalam bentuk fail JAR atau WAR, dan kemudian menggunakan dan menjalankan fail ini pada pelayan web atau aplikasi. Cara utama untuk melakukan ini ialah menggunakan Maven dari baris arahan atau menggunakan IDE seperti IntelliJ atau Eclipse untuk mengekod dan membungkus aplikasi. Pembangun digunakan untuk membuat perubahan kod dan menguji segala-galanya dengan teliti sebelum melakukan kod dan menyerahkannya kepada kawalan versi.

Membangunkan Aplikasi Java untuk Kubernetes Menggunakan Eclipse JKube

nasi. 1. Proses pembangunan Java tradisional.

Proses Pembangunan Java untuk Awan

Apabila beralih ke aplikasi awan, Kubernetes dan bekas. Oleh itu, kini pembangun perlu membungkus aplikasi Java imej bekas dan buat manifes Kubernetes yang menerangkan imej ini. Manifes ini kemudiannya digunakan pada pelayan pengeluaran yang menjalankan Kubernetes. Sebaliknya, Kubernetes mengambil imej ini daripada pendaftaran dan menggunakan aplikasi mengikut konfigurasi yang telah kami tulis dalam manifes, yang biasanya fail YAML.

Metamorfosis proses pembangunan Java tradisional dalam peralihan kepada awan ditunjukkan dalam Rajah. 2.

Membangunkan Aplikasi Java untuk Kubernetes Menggunakan Eclipse JKube

nasi. 2. Proses pembangunan Java untuk awan.

Gerhana JKube

Berhijrah ke Kubernetes menambah satu lagi lapisan operasi pada proses pembangunan, dan ramai pembangun gugup mengenainya kerana mereka mahu menumpukan pada kerja teras mereka—logik aplikasi—dan bukannya cara mengaturnya. Dan di sinilah ia memainkan peranan. Gerhana JKube, yang membolehkan pembangun menggunakan perpustakaan dan pemalam mereka (Kit JKube dengan Pemalam Kubernetes Maven atau Pemalam OpenShift Maven) untuk melakukan operasi berkaitan kontena dan Kubernetes dengan mudah dengan mengikut rajah dalam Rajah. 2.

Dalam artikel yang lain ini, kami akan menunjukkan kepada anda cara untuk memudahkan proses pembangunan Java dalam persekitaran Kubernetes dengan menggunakan Eclipse JKube dengan Pemalam Kubernetes Maven.

Proses Pembangunan Awan Menggunakan Eclipse JKube

Mari kita pertimbangkan skim pembangunan Java yang diubah suai sedikit untuk awan daripada Rajah 2, memperkenalkan Eclipse JKube dan Kubernetes Maven Plugin ke dalamnya, seperti yang ditunjukkan dalam Rajah. 3.

Membangunkan Aplikasi Java untuk Kubernetes Menggunakan Eclipse JKube

nasi. 3. Proses pembangunan Java untuk awan menggunakan Eclipse JKube.

Seperti yang kita dapat lihat, di sini semua operasi untuk berinteraksi dengan Kubernetes dan bekas (diserlahkan dengan warna merah dalam rajah) digantikan dengan tugas matlamat Eclipse JKube lalai, yang disenaraikan dalam Jadual. 1.

Jadual 1. Eclipse JKube tugas lalai.

Petugas
Pentas
Описание

k8s:membina
PRE_INTEGRATION_TEST
Membina imej buruh pelabuhan

k8s:tolak
MEMASANG
Memuat naik imej docker ke registri

k8s:sumber
PROCESS_RESOURCES
Menjana manifes K8

k8s:mohon
SELESAI
Menggunakan manifes yang dijana pada K8s

k8s:undeploy
NYANGKAR KERJA
Mengalih keluar sumber K8 yang telah digunakan menggunakan k8s:apply dan k8s:deploy

Nota: Jika anda tidak mahu tugas menggunakan lalai pendapat ini, anda boleh mengkonfigurasi Eclipse JKube secara manual untuk diri sendiri, kerana ia menyokong konfigurasi melalui XML и sumber.

Sekarang mari kita lihat contoh menggunakan Eclipse JKube dan Kubernetes Maven Plugin apabila bekerja dengan aplikasi.

Meletakkan Aplikasi Java pada Kubernetes Menggunakan Eclipse JKube

Dalam contoh ini, kami akan menggunakan aplikasi Java ringkas pada kluster Minikube menggunakan Eclipse JKube. Menggunakan Pemalam Kubernetes Maven, kami boleh menetapkan parameter penggunaan tanpa perlu menulis sebarang konfigurasi.

Sebagai contoh aplikasi yang kami gunakan penjana nombor rawak mudah, yang menghasilkan output JSON pada titik akhir /random:

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

Langkah 1. Muat turun Pemalam Kubernetes Maven

Pemalam Kubernetes Maven berada dalam repositori Repositori Pusat Maven. Untuk menggunakan Eclipse JKube anda perlu menambah Pemalam Kubernetes Maven pada pom.xml anda sebagai kebergantungan:

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

Jika OpenShift digunakan dan bukannya Kubernetes tulen, maka pom.xml diubah suai seperti berikut:

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

Langkah 2. Bina imej docker

Fail JAR aplikasi boleh dibina dengan perintah pakej mvn, dan kemudian tugas matlamat mvn k8s:build boleh digunakan untuk membina imej docker aplikasi. Ambil perhatian bahawa kami telah menggantikan nama imej lalai dengan sifat ini:

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

Sebelum membina imej, anda perlu memastikan bahawa daemon docker didedahkan dengan betul. Ini boleh dilakukan dengan arahan berikut:

$ eval $(minikube docker-env)

Kemudian kita masukkan perintah mvn k8s:build, dan inilah yang akan kita lihat pada skrin apabila membina imej docker menggunakan tugas binaan 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 : $

Langkah 3. Muat naik imej ke pendaftaran docker

Selepas kami membina imej docker dengan pendaftaran push yang dikonfigurasikan (dalam kes kami ia adalah docker.io), kami boleh menghantar imej ini ke pendaftaran. Inilah yang akan dipaparkan selepas kami meminta Eclipse JKube melaksanakan tugas 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 : $ 

Selepas menghantar imej, anda perlu menyemak sama ada ia termasuk dalam pendaftaran. Dalam kes kami, kami hanya melihatnya dalam Docker Hub, seperti yang ditunjukkan dalam Rajah. 4.

Membangunkan Aplikasi Java untuk Kubernetes Menggunakan Eclipse JKube

nasi. 4. Imej yang dihantar ke pendaftaran muncul dalam Docker Hub.

Langkah 4. Jana manifes sumber Kubernetes untuk aplikasi

Jadi, kami telah mengumpulkan imej aplikasi, kini kami perlu menulis manifes Kubernetes. Untuk melakukan ini, Eclipse JKube mempunyai tugas yang menjana manifes sumber tegar berdasarkan rangka kerja Java yang mendasari (Boot musim bunga, quarkus, Vert.x atau yang lain). Anda juga boleh menyesuaikan manifes dengan menggunakan fail konfigurasi XML dan meletakkan serpihan mentah (serpihan manifes sumber yang diperlukan) dalam folder aplikasi src/main/jkube. Dalam kes ini, konfigurasi anda akan dimuat naik ke manifes yang dijana.

Dalam contoh kami, kami membiarkan semuanya seperti sedia ada, dan oleh itu Eclipse JKube menjana manifes untuk penggunaan lalai dan untuk perkhidmatan dengan jenis ClusterIP. Dan hanya selepas itu kami mengubah suai manifes perkhidmatan untuk menukar jenis perkhidmatan kepada NodePort. Anda boleh mengatasi tingkah laku lalai menggunakan sifat berikut:

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

Beginilah rupa output skrin selepas kami meminta Eclipse JKube melaksanakan tugas mvn k8s:resource 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 : $

Langkah 5. Sebarkan aplikasi ke gugusan Kubernetes

Kini kami bersedia untuk menggunakan aplikasi: kami telah menjana imejnya dan kemudian menjana manifes sumber secara automatik. Kini yang tinggal hanyalah menggunakan semua ini pada gugusan Kubernetes. Untuk menggunakan aplikasi, anda boleh, sudah tentu, menggunakan perintah kubectl apply -f, tetapi pemalam boleh melakukan ini untuk kami. Inilah yang akan muncul pada skrin selepas kami meminta Eclipse JKube untuk melaksanakan tugas 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"
}

Langkah 6. Nyahletak aplikasi daripada kelompok Kubernetes

Untuk melakukan ini, tugas undeploy digunakan, yang hanya mengalih keluar semua sumber yang digunakan dalam langkah sebelumnya, iaitu, apabila tugas memohon dilaksanakan. Inilah yang akan kita lihat pada skrin selepas kami meminta Eclipse JKube melaksanakan tugas 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 : $

Apa lagi yang boleh anda lakukan dengan Eclipse JKube

Jadi, kami melihat tugas matlamat utama Eclipse JKube dan Kubernetes Maven Plugin, yang memudahkan pembangunan aplikasi Java untuk platform Kubernetes. Jika anda tidak mahu sentiasa memasukkan tugasan ini dari papan kekunci, anda boleh menulisnya dalam konfigurasi pemalam, contohnya, seperti ini:

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

Perlu dikatakan bahawa dalam artikel ini kami tidak mempertimbangkan semua tugas matlamat yang terdapat dalam Eclipse JKube dan Kubernetes Maven Plugin, jadi kami menyediakan dalam Jadual 2 senarai tugas tambahan yang mungkin juga berguna kepada anda.

Jadual 2. Tugasan matlamat Eclipse JKube tambahan.

Petugas
Pentas
Описание

k8s:log
SAHKAN
Menerima log daripada aplikasi yang dijalankan pada Kubernetes.

k8s:nyahpepijat
PAKEJ
Buka port nyahpepijat supaya anda boleh nyahpepijat aplikasi anda yang berjalan pada Kubernetes terus daripada IDE.

k8s:deploy
MEMASANG
Mencipta garpu untuk tugas Pasang dan menggunakan manifes yang dijana pada gugusan Kubernetes dengan cara yang sama seperti dalam kes tugasan guna.

k8s:lihat
PAKEJ
Penggunaan panas automatik aplikasi dengan menjejaki ruang namanya.

Meletakkan Aplikasi Java pada Red Hat OpenShift Menggunakan OpenShift Maven Plugin

Untuk menggunakan aplikasi daripada contoh kami pada platform Red Hat OpenShift, kami menggunakan pemalam OpenShift Maven. Satu-satunya perbezaan ialah awalan tugasan akan berubah daripada k8s kepada oc. Secara lalai, pemalam Kubernetes Maven melakukannya docker-assemblies, dan pemalam OpenShift Maven - assemblies S2I. Kami tidak membuat sebarang perubahan pada projek kami selain mengalih keluar harta jkube.generator.name kerana ia tidak diperlukan semasa menolak ke pendaftaran (OpenShift meletakkan imej dalam pendaftaran dalamannya semasa fasa binaan). Dan inilah yang akan muncul pada skrin apabila kami menjalankan contoh kami, di mana, dengan cara itu, kami melaksanakan tugas matlamat bukan satu demi satu, tetapi sekaligus:

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

Pelajaran video

Untuk mengetahui lebih lanjut tentang cara menjadikan pembangunan Kubernetes lebih mudah dengan Eclipse JKube, tonton tutorial video ini tentang cara menggunakan aplikasi Spring Boot yang ringkas pada Minikube dengan pantas:

Kesimpulan

Dalam artikel ini, kami menunjukkan cara Eclipse JKube menjadikan kehidupan lebih mudah untuk pembangun Java apabila bekerja dengan Kubernetes. Maklumat lanjut tentang Eclipse JKube boleh didapati di laman web projek dan GitHub.

Sumber: www.habr.com

Tambah komen