25 năm trước, Java đã trở thành xu hướng phổ biến của các lập trình viên và cuối cùng trở thành một trong những yếu tố cốt lõi để xây dựng các ngăn xếp ứng dụng. Tuy nhiên, ngày nay, nhiều cá nhân và tổ chức đã trung thành với Java trong nhiều năm đang bận rộn di chuyển hoặc cân nhắc việc di chuyển sang nền tảng này.
Thật không may, Kubernetes có đường cong học tập khó khăn và đưa một lớp vận hành khác vào quy trình phát triển mà các lập trình viên Java đã quen thuộc. Hôm nay chúng tôi sẽ hướng dẫn bạn cách sử dụng
Quy trình phát triển Java truyền thống
Quá trình phát triển truyền thống
Cơm. 1. Quy trình phát triển Java truyền thống.
Quy trình phát triển Java cho đám mây
Khi chuyển sang các ứng dụng đám mây, Kubernetes và
Sự biến đổi của quy trình phát triển Java truyền thống trong quá trình chuyển đổi sang đám mây được thể hiện trong Hình 2. XNUMX.
Cơm. 2. Quá trình phát triển Java cho đám mây.
Eclipse JKube
Việc di chuyển sang Kubernetes sẽ bổ sung thêm một lớp vận hành khác vào quá trình phát triển và nhiều nhà phát triển lo lắng về điều đó vì họ muốn tập trung vào công việc cốt lõi của mình—logic ứng dụng—hơn là cách triển khai chúng. Và đây là lúc nó phát huy tác dụng.
Trong phần còn lại của bài viết này, chúng tôi sẽ hướng dẫn bạn cách đơn giản hóa quy trình phát triển Java trong môi trường Kubernetes bằng cách sử dụng Eclipse JKube với Plugin Kubernetes Maven.
Quy trình phát triển đám mây bằng Eclipse JKube
Chúng ta hãy xem xét một sơ đồ phát triển Java được sửa đổi một chút cho đám mây từ Hình 2, giới thiệu Eclipse JKube và Kubernetes Maven Plugin vào đó, như trong Hình 3. XNUMX.
Cơm. 3. Quá trình phát triển Java cho đám mây bằng Eclipse JKube.
Như chúng ta có thể thấy, ở đây tất cả các hoạt động tương tác với Kubernetes và các thùng chứa (được đánh dấu màu đỏ trong sơ đồ) được thay thế bằng các nhiệm vụ mục tiêu JKube Eclipse mặc định, được liệt kê trong Bảng. 1.
Bàn 1. Các tác vụ mặc định của Eclipse JKube.
Nhiệm vụ
Sân khấu
Описание
PRE_INTEGration_TEST
Xây dựng hình ảnh docker
INSTALL
Tải hình ảnh docker lên sổ đăng ký
PROCESS_RESOURCES
Tạo bảng kê khai K8
SO SÁNH
Áp dụng các bảng kê khai đã tạo cho K8
KHÔNG TRIỂN KHAI
Xóa tài nguyên K8 đã được triển khai bằng k8s:apply và k8s:deploy
Lưu ý: Nếu bạn không muốn các tác vụ sử dụng các giá trị mặc định có ý kiến này, bạn có thể tự cấu hình Eclipse JKube theo cách thủ công vì nó hỗ trợ cấu hình thông qua
Bây giờ chúng ta hãy xem các ví dụ về cách sử dụng Eclipse JKube và Kubernetes Maven Plugin khi làm việc với các ứng dụng.
Triển khai ứng dụng Java trên Kubernetes bằng Eclipse JKube
Trong ví dụ này, chúng tôi sẽ triển khai một ứng dụng Java đơn giản trên một cụm
Là một ứng dụng ví dụ chúng tôi sử dụng
~/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"
}
Bước 1. Tải xuống Plugin Kubernetes Maven
Plugin Kubernetes Maven có trong kho lưu trữ
<plugin>
<groupId>org.eclipse.jkube</groupId>
<artifactId>kubernetes-maven-plugin</artifactId>
<version>${jkube.version}</version>
</plugin>
Nếu OpenShift được sử dụng thay vì Kubernetes thuần túy thì pom.xml sẽ được sửa đổi như sau:
<plugin>
<groupId>org.eclipse.jkube</groupId>
<artifactId>openshift-maven-plugin</artifactId>
<version>${jkube.version}</version>
</plugin>
Bước 2. Xây dựng hình ảnh docker
Tệp JAR của ứng dụng có thể được xây dựng bằng lệnh mvn package và sau đó tác vụ mvn target k8s:build có thể được sử dụng để xây dựng hình ảnh docker của ứng dụng. Lưu ý rằng chúng tôi đã ghi đè tên hình ảnh mặc định bằng thuộc tính này:
<jkube.generator.name>docker.io/rohankanojia/random-generator:${project.version}</jkube.generator.name>
Trước khi xây dựng hình ảnh, bạn cần đảm bảo rằng trình nền của docker được hiển thị chính xác. Điều này có thể được thực hiện bằng lệnh sau:
$ eval $(minikube docker-env)
Sau đó, chúng ta nhập lệnh mvn k8s:build và đây là những gì chúng ta sẽ thấy trên màn hình khi xây dựng hình ảnh docker bằng cách sử dụng tác vụ xây dựng 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 : $
Bước 3. Tải hình ảnh lên sổ đăng ký docker
Sau khi chúng tôi đã xây dựng hình ảnh docker với sổ đăng ký đẩy được định cấu hình (trong trường hợp của chúng tôi là docker.io), chúng tôi có thể gửi hình ảnh này đến sổ đăng ký. Đây là những gì sẽ được hiển thị sau khi chúng ta yêu cầu Eclipse JKube thực hiện tác vụ 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 : $
Sau khi gửi hình ảnh, bạn cần kiểm tra xem nó có được đưa vào sổ đăng ký hay không. Trong trường hợp của chúng tôi, chúng tôi chỉ nhìn thấy nó trong Docker Hub, như trong Hình. 4.
Cơm. 4. Hình ảnh được gửi tới sổ đăng ký xuất hiện trong Docker Hub.
Bước 4. Tạo bảng kê khai tài nguyên Kubernetes cho ứng dụng
Vì vậy, chúng ta đã thu thập được hình ảnh ứng dụng, bây giờ chúng ta cần viết các bảng kê khai Kubernetes. Để thực hiện điều này, Eclipse JKube có nhiệm vụ tạo ra các tệp kê khai tài nguyên cứng nhắc dựa trên khung công tác Java cơ bản (
Trong ví dụ của chúng tôi, chúng tôi giữ nguyên mọi thứ và do đó Eclipse JKube tạo ra một tệp kê khai cho hoạt động triển khai mặc định và cho dịch vụ có loại ClusterIP. Và chỉ sau đó chúng tôi sửa đổi bảng kê khai dịch vụ để thay đổi loại dịch vụ thành NodePort. Bạn có thể ghi đè hành vi mặc định bằng thuộc tính sau:
<jkube.enricher.jkube-service.type>NodePort</jkube.enricher.jkube-service.type>
Đây là giao diện đầu ra của màn hình sau khi chúng ta yêu cầu Eclipse JKube thực hiện tác vụ tài nguyên 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 : $
Bước 5. Triển khai ứng dụng vào cụm Kubernetes
Bây giờ chúng ta đã sẵn sàng triển khai ứng dụng: chúng ta đã tạo hình ảnh của ứng dụng và sau đó tự động tạo các bản kê khai tài nguyên. Bây giờ tất cả những gì còn lại là áp dụng tất cả những điều này cho cụm Kubernetes. Tất nhiên, để triển khai ứng dụng, bạn có thể sử dụng lệnh kubectl apply -f, nhưng plugin có thể thực hiện việc này cho chúng ta. Đây là những gì sẽ xuất hiện trên màn hình sau khi chúng ta yêu cầu Eclipse JKube thực thi tác vụ 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"
}
Bước 6. Hủy triển khai các ứng dụng từ cụm Kubernetes
Để thực hiện việc này, tác vụ không triển khai được sử dụng, tác vụ này chỉ đơn giản loại bỏ tất cả các tài nguyên đã được áp dụng ở bước trước, tức là khi tác vụ áp dụng được thực thi. Đây là những gì chúng ta sẽ thấy trên màn hình sau khi yêu cầu Eclipse JKube thực hiện tác vụ 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 : $
Bạn có thể làm gì khác với Eclipse JKube
Vì vậy, chúng ta đã xem xét các nhiệm vụ mục tiêu chính của Eclipse JKube và Kubernetes Maven Plugin, giúp tạo điều kiện thuận lợi cho việc phát triển các ứng dụng Java cho nền tảng Kubernetes. Nếu bạn không muốn liên tục nhập các tác vụ này từ bàn phím, bạn có thể viết chúng trong cấu hình plugin, chẳng hạn như sau:
<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>
Phải nói rằng trong bài viết này, chúng tôi chưa xem xét tất cả các nhiệm vụ mục tiêu có trong Eclipse JKube và Kubernetes Maven Plugin, vì vậy chúng tôi cung cấp trong Bảng 2 danh sách các nhiệm vụ bổ sung cũng có thể hữu ích cho bạn.
Bàn 2. Nhiệm vụ mục tiêu JKube Eclipse bổ sung.
Nhiệm vụ
Sân khấu
Описание
HIỆU LỰC
Nhận nhật ký từ ứng dụng chạy trên Kubernetes.
GÓI
Mở một cổng gỡ lỗi để bạn có thể gỡ lỗi ứng dụng chạy trên Kubernetes trực tiếp từ IDE.
INSTALL
Tạo một nhánh cho tác vụ Cài đặt và áp dụng các tệp kê khai đã tạo vào cụm Kubernetes theo cách tương tự như trong trường hợp tác vụ áp dụng.
GÓI
Tự động triển khai nóng một ứng dụng bằng cách theo dõi không gian tên của nó.
Triển khai các ứng dụng Java trên Red Hat OpenShift bằng Plugin OpenShift Maven
Để triển khai ứng dụng từ ví dụ của chúng tôi trên nền tảng Red Hat OpenShift, chúng tôi sử dụng plugin
~/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 : $
bài học video
Để tìm hiểu thêm về cách giúp việc phát triển Kubernetes dễ dàng hơn với Eclipse JKube, hãy xem video hướng dẫn này về cách triển khai nhanh chóng một ứng dụng Spring Boot đơn giản trên Minikube:
Kết luận
Trong bài viết này, chúng tôi đã chỉ ra cách Eclipse JKube giúp nhà phát triển Java dễ dàng hơn khi làm việc với Kubernetes. Thông tin thêm về Eclipse JKube có thể được tìm thấy tại
Nguồn: www.habr.com