Phát triển ứng dụng Java cho Kubernetes bằng Eclipse JKube

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. Kubernetes hoặc các dẫn xuất của nó như Red Hat OpenShift hoặc Amazon EKS.

Phát triển ứng dụng Java cho Kubernetes bằng Eclipse JKube

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 Eclipse JKube, để đơn giản hóa các hoạt động bổ sung này được liên kết với Kubernetes và vùng chứa, đồng thời đảm bảo việc di chuyển dễ dàng sang nền tảng đám mây trong khi vẫn duy trì hệ sinh thái Java quen thuộc. Hơn nữa, chúng tôi sẽ hướng dẫn cách triển khai các ứng dụng Java trên nền tảng OpenShift bằng cách sử dụng plugin OpenShift Maven.

Quy trình phát triển Java truyền thống

Quá trình phát triển truyền thống Java (Hình 1) liên quan đến việc nhà phát triển viết mã, sau đó tạo các đơn vị triển khai dưới dạng tệp JAR hoặc WAR, sau đó triển khai và chạy các tệp này trên máy chủ web hoặc ứng dụng. Cách chính để thực hiện việc này là sử dụng Maven từ dòng lệnh hoặc sử dụng IDE như IntelliJ hoặc Eclipse để mã hóa và đóng gói các ứng dụng. Các nhà phát triển đã quen với việc thực hiện các thay đổi mã và kiểm tra mọi thứ kỹ lưỡng trước khi đưa mã và gửi mã đó đến cơ quan kiểm soát phiên bản.

Phát triển ứng dụng Java cho Kubernetes bằng Eclipse JKube

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à container. Do đó, bây giờ nhà phát triển cần đóng gói các ứng dụng Java trong hình ảnh container và tạo các bảng kê khai Kubernetes mô tả những hình ảnh này. Sau đó, những bảng kê khai này được áp dụng cho máy chủ sản xuất chạy Kubernetes. Đổi lại, Kubernetes lấy những hình ảnh này từ sổ đăng ký và triển khai các ứng dụng theo cấu hình mà chúng tôi đã viết trong tệp kê khai, thường là các tệp YAML.

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.

Phát triển ứng dụng Java cho Kubernetes bằng Eclipse JKube

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. Eclipse JKube, cho phép các nhà phát triển sử dụng thư viện và plugin của họ (Bộ JKube cùng với Plugin Kubernetes Maven hoặc Plugin OpenShift Maven) để dễ dàng thực hiện các hoạt động liên quan đến vùng chứa và Kubernetes bằng cách làm theo sơ đồ trong Hình. 2.

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.

Phát triển ứng dụng Java cho Kubernetes bằng Eclipse JKube

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
Описание

k8s: xây dựng
PRE_INTEGration_TEST
Xây dựng hình ảnh docker

k8s:đẩy
INSTALL
Tải hình ảnh docker lên sổ đăng ký

k8s: tài nguyên
PROCESS_RESOURCES
Tạo bảng kê khai K8

k8s: áp dụng
SO SÁNH
Áp dụng các bảng kê khai đã tạo cho K8

k8s: không triển khai
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 XML и ресурсы.

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 minikube sử dụng Eclipse JKube. Sử dụng Kubernetes Maven Plugin, chúng ta có thể thiết lập các tham số triển khai mà không cần phải ghi bất kỳ cấu hình nào.

Là một ứng dụng ví dụ chúng tôi sử dụng Trình tạo số ngẫu nhiên đơn giản, tạo ra đầu ra JSON tại điểm cuối/ngẫu nhiên:

~/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ữ Kho lưu trữ trung tâm Maven. Để sử dụng Eclipse JKube, bạn cần thêm Plugin Kubernetes Maven vào pom.xml của mình dưới dạng phần phụ thuộc:

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

Phát triển ứng dụng Java cho Kubernetes bằng Eclipse JKube

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 (Khởi động mùa xuân, quarkus, Vert.x hoặc một số khác). Bạn cũng có thể tùy chỉnh tệp kê khai bằng cách sử dụng tệp cấu hình XML và đặt các đoạn thô (các đoạn của tệp kê khai tài nguyên bắt buộc) vào thư mục ứng dụng src/main/jkube. Trong trường hợp này, cấu hình của bạn sẽ được tải lên tệp kê khai đã tạo.

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
Описание

k8s:nhật ký
HIỆU LỰC
Nhận nhật ký từ ứng dụng chạy trên Kubernetes.

k8s: gỡ lỗi
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.

k8s: triển khai
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.

k8s:đồng hồ
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 OpenShift Maven. Sự khác biệt duy nhất là tiền tố nhiệm vụ sẽ thay đổi từ k8s thành oc. Theo mặc định, plugin Kubernetes Maven thực hiện docker-assemblies và plugin OpenShift Maven - hội đồng S2I. Chúng tôi không thực hiện bất kỳ thay đổi nào đối với dự án của mình ngoài việc xóa thuộc tính jkube.generator.name vì nó không bắt buộc khi đẩy vào sổ đăng ký (OpenShift đặt hình ảnh vào sổ đăng ký nội bộ của nó trong giai đoạn xây dựng). Và đây là những gì sẽ xuất hiện trên màn hình khi chúng ta chạy ví dụ của mình, trong đó, nhân tiện, chúng ta thực hiện các nhiệm vụ mục tiêu không phải từng nhiệm vụ một mà tất cả cùng một lúc:

~/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 trang web dự ánGitHub.

Nguồn: www.habr.com

Thêm một lời nhận xét