使用 Eclipse JKube 為 Kubernetes 開發 Java 應用程式

25 年前,Java 進入了程式設計主流,並最終成為建立應用程式堆疊的核心元素之一。 然而如今,許多多年來一直忠於 Java 的個人和組織正忙於遷移或考慮遷移到該平台。 Kubernetes 或其衍生物,例如 紅帽OpenShift亞馬遜EKS.

使用 Eclipse JKube 為 Kubernetes 開發 Java 應用程式

不幸的是,Kubernetes 的學習曲線很陡峭,並且在 Java 程式設計師習慣的開發過程中引入了另一個操作層。 今天我們就來告訴大家如何使用 Eclipse JKube,簡化這些與 Kubernetes 和容器相關的額外操作,並確保輕鬆遷移到雲端平台,同時保持熟悉的 Java 生態系統。 此外,我們將展示如何使用 OpenShift Maven 插件在 OpenShift 平台上部署 Java 應用程式。

傳統Java開發流程

傳統開發流程 Java的 (圖 1)涉及開發人員編寫程式碼,然後以 JAR 或 WAR 檔案的形式建立部署單元,然後在 Web 或應用程式伺服器上部署和執行這些檔案。 執行此操作的主要方法是從命令列使用 Maven 或使用 IntelliJ 或 Eclipse 等 IDE 來編碼和打包應用程式。 開發人員習慣在提交程式碼並將其提交給版本控制之前進行程式碼變更並徹底測試所有內容。

使用 Eclipse JKube 為 Kubernetes 開發 Java 應用程式

米。 1.傳統Java開發流程。

雲端 Java 開發流程

當遷移到雲端應用程式時,Kubernetes 和 集裝箱。 因此,現在開發者需要將Java應用程式打包在 容器 圖片 並建立描述這些鏡像的 Kubernetes 清單。 然後,這些清單將會套用到執行 Kubernetes 的生產伺服器。 反過來,Kubernetes 從註冊表中取得這些鏡像,並根據我們在清單(通常是 YAML 檔案)中編寫的配置來部署應用程式。

傳統Java開發流程向雲端轉型的蛻變如圖2所示。 XNUMX.

使用 Eclipse JKube 為 Kubernetes 開發 Java 應用程式

米。 2. 雲端Java開發流程。

Eclipse JKube

遷移到 Kubernetes 為開發過程增加了另一個操作層,許多開發人員對此感到緊張,因為他們希望專注於核心工作(應用程式邏輯),而不是如何部署它們。 這就是它發揮作用的地方。 Eclipse JKube,它允許開發人員使用他們的庫和插件(JKube套件 與...一起 Kubernetes Maven 插件OpenShift Maven 插件)依照圖中的示意圖輕鬆執行容器和 Kubernetes 相關操作。 2.

在本文的其餘部分中,我們將向您展示如何透過使用 Eclipse JKube 和 Kubernetes Maven 外掛程式來簡化 Kubernetes 環境中的 Java 開發流程。

使用 Eclipse JKube 的雲端開發流程

我們考慮圖2中稍微修改一下的雲端Java開發方案,引進Eclipse JKube和Kubernetes Maven Plugin,如圖3所示。 XNUMX.

使用 Eclipse JKube 為 Kubernetes 開發 Java 應用程式

米。 3. 使用Eclipse JKube進行雲端Java開發流程。

正如我們所看到的,這裡所有與 Kubernetes 和容器互動的操作(圖中以紅色突出顯示)都被預設的 Eclipse JKube 目標任務替換,這些任務在表中列出。 1.

桌子1. Eclipse JKube預設任務。

任務
階段
描述

k8s:構建
預整合測試
建置 docker 映像

k8s:推
下載與安裝
將docker映像上傳到registry

k8s:資源
PROCESS_RESOURCES
產生 K8s 清單

k8s:申請
編譯
將產生的清單套用到 K8s

k8s:取消部署
取消部署
刪除使用 k8s:apply 和 k8s:deploy 部署的 K8s 資源

注: 如果您不希望任務使用這些固執己見的預設值,您可以自行手動配置 Eclipse JKube,因為它支援透過以下方式進行配置 XML的 и ресурсы.

現在讓我們來看看在處理應用程式時使用 Eclipse JKube 和 Kubernetes Maven 插件的範例。

使用 Eclipse JKube 在 Kubernetes 上部署 Java 應用程式

在此範例中,我們將在叢集上部署一個簡單的 Java 應用程式 迷你酷 使用 Eclipse JKube。 使用 Kubernetes Maven Plugin,我們可以設定部署參數,而無需編寫任何設定。

作為範例應用程序,我們使用 簡單的隨機數產生器,它在 /random 端點產生 JSON 輸出:

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

步驟1.下載 Kubernetes Maven 插件

Kubernetes Maven 插件位於儲存庫中 Maven中央存儲庫。 要使用 Eclipse JKube,您需要將 Kubernetes Maven 插件作為依賴項新增至 pom.xml 中:

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

如果使用OpenShift而不是純Kubernetes,則pom.xml修改如下:

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

步驟2.建置docker映像

可以使用 mvn package 命令建立應用程式的 JAR 文件,然後使用 mvn 目標任務 k8s:build 建立應用程式的 docker 映像。 請注意,我們已使用此屬性覆蓋預設圖像名稱:

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

在建置映像之前,您需要確保 docker 守護程式已正確暴露。 這可以透過以下命令來完成:

$ eval $(minikube docker-env)

然後我們輸入 mvn k8s:build 命令,這就是使用 Eclipse JKube 建置任務建置 docker 映像時我們將在螢幕上看到的內容:

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

步驟3.將映像上傳到docker註冊表

在我們建立了配置了推送註冊表的 docker 映像後(在我們的範例中是 docker.io),我們可以將該映像傳送到註冊表。 這是我們要求 Eclipse JKube 執行 mvn k8s: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 : $ 

發送圖像後,您需要檢查它是否包含在註冊表中。 在我們的例子中,我們只是在 Docker Hub 中看到它,如圖 4 所示。 XNUMX.

使用 Eclipse JKube 為 Kubernetes 開發 Java 應用程式

米。 4.發送到registry的映像出現在Docker Hub。

步驟 4. 為應用程式產生 Kubernetes 資源清單

所以,我們已經收集了應用程式鏡像,現在我們需要編寫 Kubernetes 清單。 為此,Eclipse JKube 有一項任務,即根據底層 Java 框架產生嚴格的資源清單(春季靴, 誇庫斯、Vert.x 或其他)。 您也可以透過使用 XML 設定檔並將原始片段(所需資源清單的片段)放在應用程式資料夾 src/main/jkube 中來自訂清單。 在這種情況下,您的配置將上傳到產生的清單中。

在我們的範例中,我們保留一切原樣,因此 Eclipse JKube 為預設部署和 ClusterIP 類型的服務產生清單。 然後我們修改服務清單,將服務類型變更為 NodePort。 您可以使用下列屬性覆寫預設行為:

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

這就是我們要求 Eclipse JKube 執行 mvn k8s:resource 資源任務後螢幕輸出的樣子。

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:resource
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Building random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:resource (default-cli) @ random-generator ---
[INFO] k8s: Running generator spring-boot
[INFO] k8s: spring-boot: Using Docker image quay.io/jkube/jkube-java-binary-s2i:0.0.7 as base / builder
[INFO] k8s: jkube-controller: Adding a default Deployment
[INFO] k8s: jkube-service: Adding a default service 'random-generator' with ports [8080]
[INFO] k8s: jkube-healthcheck-spring-boot: Adding readiness probe on port 8080, path='/actuator/health', scheme='HTTP', with initial delay 10 seconds
[INFO] k8s: jkube-healthcheck-spring-boot: Adding liveness probe on port 8080, path='/actuator/health', scheme='HTTP', with initial delay 180 seconds
[INFO] k8s: jkube-revision-history: Adding revision history limit to 2
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.344 s
[INFO] Finished at: 2020-08-10T11:38:11+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $ ls target/classes/META-INF/jkube/kubernetes
random-generator-deployment.yml  random-generator-service.yml
~/work/repos/eclipse-jkube-demo-project : $ cat target/classes/META-INF/jkube/kubernetes/random-generator-deployment.yml | head -n10
---
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    jkube.io/git-url: [email protected]:rohanKanojia/eclipse-jkube-demo-project.git
    jkube.io/git-commit: 1ef9ef2ef7a6fcbf8eb64c293f26f9c42d026512
    jkube.io/git-branch: master
    jkube.io/scm-url: https://github.com/spring-projects/spring-boot/spring-boot-starter-parent/random-generator
    jkube.io/scm-tag: HEAD
~/work/repos/eclipse-jkube-demo-project : $

步驟 5. 將應用程式部署到 Kubernetes 集群

現在我們已經準備好部署應用程式:我們已經產生了它的映像,然後自動產生了資源清單。 現在剩下的就是將這一切應用到 Kubernetes 叢集上。 要部署應用程序,您當然可以使用 kubectl apply -f 命令,但插件可以為我們執行此操作。 這是我們要求 Eclipse JKube 執行 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"
}

步驟 6. 從 Kubernetes 叢集中取消部署應用程式

為此,需要使用取消部署任務,該任務只是刪除上一步驟(即執行應用程式任務時)所應用的所有資源。 這是我們要求 Eclipse JKube 執行 mvn k8s: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 : $

使用 Eclipse JKube 還可以做什麼

因此,我們研究了 Eclipse JKube 和 Kubernetes Maven Plugin 的主要目標任務,它們促進了 Kubernetes 平台的 Java 應用程式的開發。 如果你不想不斷地從鍵盤輸入這些任務,你可以將它們寫在插件配置中,例如,像這樣:

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

必須指出的是,在本文中,我們沒有考慮 Eclipse JKube 和 Kubernetes Maven 插件中的所有目標任務,因此我們在表 2 中提供了可能對您也有用的其他任務清單。

桌子2. 其他 Eclipse JKube 目標任務。

任務
階段
描述

k8s:日誌
VALIDATE
從 Kubernetes 上執行的應用程式接收日誌。

k8s:調試
包裝
打開調試端口,以便您可以直接從 IDE 調試在 Kubernetes 上運行的應用程式。

k8s:部署
下載與安裝
為 Install 任務建立一個分支,並以與 apply 任務相同的方式將產生的清單套用到 Kubernetes 叢集。

k8s:手錶
包裝
透過追蹤應用程式的命名空間來自動熱部署應用程式。

使用 OpenShift Maven 外掛程式在 Red Hat OpenShift 上部署 Java 應用程式

為了在 Red Hat OpenShift 平台上部署範例中的應用程序,我們使用插件 OpenShift Maven。 唯一的區別是任務前綴將從 k8s 更改為 oc。 預設情況下,Kubernetes Maven 插件會 搬運工人- 組件和 OpenShift Maven 插件 - 組件 S2I。 除了刪除 jkube.generator.name 屬性之外,我們沒有對項目進行任何更改,因為推送到註冊表時不需要它(OpenShift 在建置階段將映像放置在其內部註冊表中)。 這就是我們運行範例時螢幕上顯示的內容,順便說一句,我們不是一次執行一個目標任務,而是一次執行所有目標任務:

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

視訊課程

要詳細了解如何使用 Eclipse JKube 簡化 Kubernetes 開發,請觀看此影片教程,了解如何在 Minikube 上快速部署簡單的 Spring Boot 應用程式:

結論

在本文中,我們展示了 Eclipse JKube 如何讓 Java 開發人員在使用 Kubernetes 時變得更輕鬆。 有關 Eclipse JKube 的更多信息,請訪問 項目網站GitHub上.

來源: www.habr.com

添加評論