Mengembangkan Aplikasi Java untuk Kubernetes Menggunakan Eclipse JKube

25 tahun yang lalu, Java memasuki arus utama pemrograman dan akhirnya menjadi salah satu elemen inti di mana tumpukan aplikasi dibangun. Namun saat ini, banyak orang dan organisasi yang telah setia pada Java selama bertahun-tahun sibuk bermigrasi atau mempertimbangkan untuk bermigrasi ke platform tersebut. Kubernetes atau turunannya seperti Red Hat OpenShift или Amazon EKS.

Mengembangkan Aplikasi Java untuk Kubernetes Menggunakan Eclipse JKube

Sayangnya, Kubernetes memiliki kurva pembelajaran yang curam dan memperkenalkan lapisan operasional lain ke dalam proses pengembangan yang biasa dilakukan oleh pemrogram Java. Hari ini kami akan memberi tahu Anda cara menggunakannya Gerhana JKube, untuk menyederhanakan operasi tambahan yang terkait dengan Kubernetes dan container, dan memastikan migrasi tanpa kesulitan ke platform cloud sambil mempertahankan ekosistem Java yang sudah dikenal. Selain itu, kami akan menunjukkan cara menerapkan aplikasi Java pada platform OpenShift menggunakan plugin OpenShift Maven.

Proses Pengembangan Jawa Tradisional

Proses pembangunan tradisional Jawa (Gambar 1) melibatkan pengembang yang menulis kode, kemudian membuat unit penerapan dalam bentuk file JAR atau WAR, dan kemudian menyebarkan dan menjalankan file tersebut di server web atau aplikasi. Cara utama untuk melakukan ini adalah dengan menggunakan Maven dari baris perintah atau menggunakan IDE seperti IntelliJ atau Eclipse untuk membuat kode dan mengemas aplikasi. Pengembang terbiasa membuat perubahan kode dan menguji semuanya secara menyeluruh sebelum melakukan kode dan mengirimkannya ke kontrol versi.

Mengembangkan Aplikasi Java untuk Kubernetes Menggunakan Eclipse JKube

Beras. 1. Proses pengembangan tradisional Jawa.

Proses Pengembangan Java untuk Cloud

Saat berpindah ke aplikasi cloud, Kubernetes dan Wadah. Oleh karena itu, kini pengembang perlu mengemas aplikasi Java di dalamnya gambar kontainer dan membuat manifes Kubernetes yang mendeskripsikan gambar-gambar ini. Manifes ini kemudian diterapkan ke server produksi yang menjalankan Kubernetes. Pada gilirannya, Kubernetes mengambil gambar-gambar ini dari registri dan menyebarkan aplikasi sesuai dengan konfigurasi yang telah kami tulis dalam manifes, yang biasanya berupa file YAML.

Metamorfosis proses pengembangan tradisional Java dalam transisi ke cloud ditunjukkan pada Gambar. 2.

Mengembangkan Aplikasi Java untuk Kubernetes Menggunakan Eclipse JKube

Beras. 2. Proses pengembangan Java untuk cloud.

Gerhana JKube

Migrasi ke Kubernetes menambahkan lapisan operasional lain ke dalam proses pengembangan, dan banyak pengembang merasa gugup karena mereka ingin fokus pada pekerjaan inti mereka—logika aplikasi—daripada cara menerapkannya. Dan di sinilah hal itu berperan. Gerhana JKube, yang memungkinkan pengembang menggunakan perpustakaan dan plugin mereka (Kit JKube dengan Plugin Kubernetes Maven или Plugin OpenShift Maven) untuk dengan mudah melakukan operasi terkait container dan Kubernetes dengan mengikuti diagram pada Gambar. 2.

Di sisa artikel ini, kami akan menunjukkan cara menyederhanakan proses pengembangan Java di lingkungan Kubernetes dengan menggunakan Eclipse JKube dengan Plugin Kubernetes Maven.

Proses Pengembangan Cloud Menggunakan Eclipse JKube

Mari kita pertimbangkan skema pengembangan Java yang sedikit dimodifikasi untuk cloud dari Gambar 2, dengan memperkenalkan Plugin Eclipse JKube dan Kubernetes Maven ke dalamnya, seperti yang ditunjukkan pada Gambar. 3.

Mengembangkan Aplikasi Java untuk Kubernetes Menggunakan Eclipse JKube

Beras. 3. Proses pengembangan Java untuk cloud menggunakan Eclipse JKube.

Seperti yang bisa kita lihat, di sini semua operasi untuk berinteraksi dengan Kubernetes dan container (disorot dengan warna merah pada diagram) digantikan oleh tugas tujuan Eclipse JKube default, yang tercantum dalam Tabel. 1.

Meja 1. Tugas default Eclipse JKube.

Tugas
Panggung
Описание

k8s:membangun
PRE_INTEGRATION_TEST
Membangun gambar buruh pelabuhan

k8s: dorong
INSTALL
Mengunggah gambar buruh pelabuhan ke registri

k8s: sumber daya
PROCESS_RESOURCES
Menghasilkan manifes K8

k8s: melamar
MENYUSUN
Menerapkan manifes yang dihasilkan ke K8

k8s: membatalkan penerapan
TIDAK MENYEDIAKAN
Menghapus sumber daya K8 yang disebarkan menggunakan k8s:apply dan k8s:deploy

Catatan: Jika Anda tidak ingin tugas menggunakan default yang berpendirian ini, Anda dapat mengonfigurasi sendiri Eclipse JKube secara manual, karena ini mendukung konfigurasi melalui XML и ресурсы.

Sekarang mari kita lihat contoh penggunaan Plugin Eclipse JKube dan Kubernetes Maven saat bekerja dengan aplikasi.

Men-deploy Aplikasi Java di Kubernetes Menggunakan Eclipse JKube

Dalam contoh ini kita akan menyebarkan aplikasi Java sederhana pada sebuah cluster Minikube menggunakan Eclipse JKube. Dengan menggunakan Plugin Kubernetes Maven, kita dapat mengatur parameter penerapan tanpa harus menulis konfigurasi apa pun.

Sebagai contoh aplikasi yang kami gunakan generator nomor acak sederhana, yang menghasilkan keluaran JSON di 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. Unduh Plugin Kubernetes Maven

Plugin Kubernetes Maven ada di repositori Repositori Sentral Maven. Untuk menggunakan Eclipse JKube Anda perlu menambahkan Plugin Kubernetes Maven ke pom.xml Anda sebagai dependensi:

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

Jika OpenShift digunakan sebagai pengganti Kubernetes murni, maka pom.xml akan dimodifikasi sebagai berikut:

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

Langkah 2. Bangun image buruh pelabuhan

File JAR aplikasi dapat dibuat dengan perintah paket mvn, dan kemudian tugas tujuan mvn k8s:build dapat digunakan untuk membuat image buruh pelabuhan aplikasi. Perhatikan bahwa kami telah mengganti nama gambar default dengan properti ini:

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

Sebelum membuat image, Anda perlu memastikan bahwa daemon buruh pelabuhan diekspos dengan benar. Hal ini dapat dilakukan dengan perintah berikut:

$ eval $(minikube docker-env)

Kemudian kita masukkan perintah mvn k8s:build, dan inilah yang akan kita lihat di layar saat membuat image buruh pelabuhan menggunakan tugas build 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. Unggah gambar ke registri buruh pelabuhan

Setelah kita membuat image buruh pelabuhan dengan registri push yang dikonfigurasi (dalam kasus kita ini adalah docker.io), kita dapat mengirimkan gambar ini ke registri. Inilah yang akan ditampilkan setelah kita meminta Eclipse JKube untuk melakukan 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 : $ 

Setelah mengirim gambar, Anda perlu memeriksa apakah gambar tersebut termasuk dalam registri. Dalam kasus kami, kami cukup melihatnya di Docker Hub, seperti yang ditunjukkan pada Gambar. 4.

Mengembangkan Aplikasi Java untuk Kubernetes Menggunakan Eclipse JKube

Beras. 4. Gambar yang dikirim ke registri muncul di Docker Hub.

Langkah 4. Buat manifes sumber daya Kubernetes untuk aplikasi

Jadi, kita sudah mengumpulkan gambar aplikasinya, sekarang kita perlu menulis manifes Kubernetes. Untuk melakukan hal ini, Eclipse JKube memiliki tugas yang menghasilkan manifes sumber daya yang kaku berdasarkan kerangka kerja Java yang mendasarinya (Sepatu bot musim semi, kuarkus, Vert.x atau lainnya). Anda juga dapat mengkustomisasi manifes dengan menggunakan file konfigurasi XML dan menempatkan fragmen mentah (fragmen manifes sumber daya yang diperlukan) di folder aplikasi src/main/jkube. Dalam hal ini, konfigurasi Anda akan diunggah ke manifes yang dihasilkan.

Dalam contoh kami, kami membiarkan semuanya apa adanya, dan oleh karena itu Eclipse JKube menghasilkan manifes untuk penerapan default dan untuk layanan dengan tipe ClusterIP. Dan baru kemudian kita memodifikasi manifes layanan untuk mengubah jenis layanan menjadi NodePort. Anda dapat mengganti perilaku default menggunakan properti berikut:

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

Ini adalah tampilan keluaran layar setelah kita meminta Eclipse JKube untuk melakukan 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. Deploy aplikasi ke cluster Kubernetes

Sekarang kita siap untuk menyebarkan aplikasi: kita telah membuat gambarnya dan kemudian secara otomatis membuat manifes sumber daya. Sekarang yang tersisa hanyalah menerapkan semua ini pada cluster Kubernetes. Untuk men-deploy aplikasi, tentu saja Anda dapat menggunakan perintah kubectl apply -f, namun plugin dapat melakukannya untuk kita. Inilah yang akan muncul di layar setelah kita meminta Eclipse JKube untuk menjalankan 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. Batalkan penerapan aplikasi dari cluster Kubernetes

Untuk melakukan ini, gunakan tugas undeploy, yang hanya menghapus semua sumber daya yang diterapkan pada langkah sebelumnya, yaitu saat tugas penerapan dijalankan. Inilah yang akan kita lihat di layar setelah kita meminta Eclipse JKube untuk melakukan 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 dapat Anda lakukan dengan Eclipse JKube

Jadi, kami melihat tujuan utama dari plugin Eclipse JKube dan Kubernetes Maven, yang memfasilitasi pengembangan aplikasi Java untuk platform Kubernetes. Jika Anda tidak ingin terus-menerus memasukkan tugas-tugas ini dari keyboard, Anda dapat menuliskannya di konfigurasi plugin, misalnya 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>

Harus dikatakan bahwa dalam artikel ini kami belum mempertimbangkan semua tugas tujuan yang ada di Plugin Eclipse JKube dan Kubernetes Maven, jadi kami menyediakan di Tabel 2 daftar tugas tambahan yang mungkin juga berguna bagi Anda.

Meja 2. Tugas tujuan Eclipse JKube tambahan.

Tugas
Panggung
Описание

k8s:log
MENGESAHKAN
Menerima log dari aplikasi yang berjalan di Kubernetes.

k8s:debug
PAKET
Buka port debug sehingga Anda dapat men-debug aplikasi yang berjalan di Kubernetes langsung dari IDE.

k8s: dikerahkan
INSTALL
Membuat fork untuk tugas Instal dan menerapkan manifes yang dihasilkan ke cluster Kubernetes dengan cara yang sama seperti dalam kasus tugas penerapan.

k8s: tonton
PAKET
Penerapan aplikasi secara otomatis dengan melacak namespace-nya.

Menerapkan Aplikasi Java di Red Hat OpenShift Menggunakan Plugin OpenShift Maven

Untuk menerapkan aplikasi dari contoh kami pada platform Red Hat OpenShift, kami menggunakan plugin OpenShift Maven. Satu-satunya perbedaan adalah awalan tugas akan berubah dari k8s menjadi oc. Secara default, plugin Kubernetes Maven melakukannya buruh pelabuhan-assemblies, dan plugin OpenShift Maven - rakitan S2I. Kami tidak melakukan perubahan apa pun pada proyek kami selain menghapus properti jkube.generator.name karena tidak diperlukan saat memasukkan ke registri (OpenShift menempatkan gambar di registri internalnya selama fase pembuatan). Dan inilah yang akan muncul di layar ketika kita menjalankan contoh kita, di mana, omong-omong, kita melakukan tugas tujuan tidak satu per 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 mempelajari lebih lanjut tentang cara membuat pengembangan Kubernetes lebih mudah dengan Eclipse JKube, tonton video tutorial tentang cara cepat men-deploy aplikasi Spring Boot sederhana di Minikube:

Kesimpulan

Pada artikel ini, kami menunjukkan bagaimana Eclipse JKube membuat hidup lebih mudah bagi pengembang Java saat bekerja dengan Kubernetes. Informasi lebih lanjut tentang Eclipse JKube dapat ditemukan di situs web proyek dan GitHub.

Sumber: www.habr.com

Tambah komentar