تطوير تطبيقات Java لـ Kubernetes باستخدام Eclipse JKube

قبل 25 عامًا ، دخلت Java إلى المبرمجين الرئيسيين لتصبح في النهاية أحد الركائز التي يتم بناء مجموعات التطبيقات حولها. ومع ذلك ، فإن العديد من الأشخاص والمؤسسات الذين كانوا مخلصين لجافا لسنوات مشغولون اليوم بالترحيل أو التفكير في الهجرة إلى Kubernetes أو مشتقاته مثل Red Hat OpenShift أو Amazon EKS .







للأسف ، يتمتع Kubernetes بمنحنى تعليمي حاد ويقدم طبقة تشغيلية أخرى في عملية تطوير Java. اليوم سوف نوضح لك كيفية استخدام Eclipse JKubeلتبسيط هذه العمليات الإضافية المتعلقة بـ Kubernetes والحاويات ، بالإضافة إلى توفير ترحيل غير مؤلم إلى النظام الأساسي السحابي مع الحفاظ على نظام Java البيئي المألوف. علاوة على ذلك ، سوف نعرض كيفية نشر تطبيقات Java على منصة OpenShift باستخدام المكون الإضافي OpenShift Maven.



عملية تطوير جافا التقليدية



تعني عملية تطوير Java التقليدية (الشكل 1) أن المطور يكتب التعليمات البرمجية ، ثم يقوم بإنشاء وحدات نشر كملفات JAR أو WAR ، ثم يقوم بنشر وتشغيل هذه الملفات على خادم ويب أو تطبيق. في الغالب يستخدمون Maven من سطر الأوامر أو يستخدمون IDE مثل IntelliJ أو Eclipse لتشفير التطبيقات وحزمها. اعتاد المطورون على إجراء تغييرات على الكود واختبار كل شيء بدقة قبل الالتزام بالكود وإرساله إلى التحكم في المصدر.







الشكل: 1. عملية تطوير جافا التقليدية.



عملية تطوير Java للسحابة



يؤدي الانتقال إلى التطبيقات السحابية إلى إضافة Kubernetes والحاويات إلى المخطط أعلاه . لذلك ، يحتاج المطور الآن إلى تجميع تطبيقات Java في صور حاوية وإنشاء بيانات Kubernetes تصف هذه الصور. ثم يتم تطبيق هذه البيانات على خادم الإنتاج الذي يعمل عليه Kubernetes. بدوره ، يأخذ Kubernetes هذه الصور من السجل وينشر التطبيقات وفقًا للتكوينات التي كتبناها في القوائم ، والتي تكون عادةً ملفات YAML.



يظهر تحول تطوير Java التقليدي في الانتقال إلى السحابة في الشكل. 2.







الشكل: 2. عملية تطوير Java للسحابة.



كسوف JKube



يضيف الانتقال إلى Kubernetes طبقة تشغيلية أخرى إلى عملية التطوير ، وهذا أمر يثير قلق العديد من المطورين لأنهم يريدون القيام بعملهم الرئيسي - منطق التطبيقات - وليس كيفية نشرها. هذا هو المكان الذي يتم فيه تشغيل Eclipse JKube ، والذي يسمح للمطورين باستخدام مكتباتهم ومكوناتهم الإضافية ( JKube Kit جنبًا إلى جنب مع Kubernetes Maven Plugin أو OpenShift Maven Plugin ) لأداء العمليات المتعلقة بالحاوية و Kubernetes بسهولة باتباع الرسم التخطيطي في الشكل. 2.



في الجزء المتبقي من هذه المقالة ، سنوضح لك كيفية تبسيط عملية تطوير Java على Kubernetes باستخدام Eclipse JKube مع البرنامج المساعد Kubernetes Maven.



عملية تطوير السحابة باستخدام Eclipse JKube



لنلقِ نظرة على إطار عمل تطوير Java المعدل قليلاً للسحابة من الشكل 2 ، مع إدخال Eclipse JKube و Kubernetes Maven Plugin ، كما هو موضح في الشكل 2. 3.







الشكل: 3. عملية تطوير Java للسحابة باستخدام Eclipse JKube.



كما نرى ، يتم هنا استبدال جميع العمليات الخاصة بالتفاعل مع Kubernetes والحاويات (المميزة باللون الأحمر في الرسم التخطيطي) بمهام هدف Eclipse JKube الافتراضية ، والتي يتم سردها في الجدول. 1.



علامة التبويب. 1. مهام Eclipse JKube الافتراضية.



مهمة المسرح وصف
k8s: بناء PRE_INTEGRATION_TEST بناء صور عامل ميناء
k8s: دفع تثبيت تحميل صور عامل ميناء إلى التسجيل
k8s: مورد PROCESS_RESOURCES توليد بيانات K8s
k8s: تطبيق تجميع تطبيق Manifests المُنشأة على K8s
k8s: إلغاء النشر غير مؤمن إزالة أصول K8s التي تم نشرها باستخدام k8s: تطبيق و k8s: النشر


ملاحظة: إذا كنت لا تريد المهام لاستخدام هذه الافتراضات برأيه، يمكنك تخصيص يدويا الكسوف JKube لنفسك، لأنه يدعم التكوين عبر XML و الموارد .



الآن دعونا نلقي نظرة على أمثلة لاستخدام Eclipse JKube و Kubernetes Maven Plugin عند العمل مع التطبيقات.



انشر تطبيق Java على Kubernetes باستخدام Eclipse JKube



في هذا المثال ، سنقوم بنشر تطبيق Java بسيط على مجموعة Minikube باستخدام Eclipse JKube. باستخدام البرنامج المساعد Kubernetes Maven ، يمكننا تعيين خيارات النشر دون الحاجة إلى كتابة أي تكوين.



كتطبيق مثال ، نستخدم مولد رقم عشوائي بسيط ينتج JSON-output عند نقطة النهاية / العشوائية:



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


الخطوة الأولى: تنزيل البرنامج المساعد



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>


الخطوة الثانية: إنشاء صورة عامل



الإرساء يمكن إنشاء ملف JAR للتطبيق باستخدام الأمر mvn package ، وبعد ذلك يمكنك استخدام mvn k8s: build target task لبناء صورة عامل ميناء لهذا التطبيق. لاحظ أننا تجاوزنا اسم الصورة الافتراضي بهذه الخاصية:



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


قبل إنشاء الصورة ، تحتاج إلى التأكد من أن برنامج Docker daemon مكشوف بشكل صحيح. يمكن القيام بذلك باستخدام الأمر التالي:



$ eval $(minikube docker-env)


ثم ندخل الأمر mvn k8s: 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 : $


الخطوة الثالثة. تحميل الصورة إلى سجل عامل الإرساء



بعد أن قمنا ببناء صورة عامل الإرساء باستخدام سجل الدفع الذي تم تكوينه (في حالتنا ، هو docker.io) ، يمكننا دفع هذه الصورة إلى التسجيل. هذا ما يتم عرضه بعد أن نطلب من Eclipse JKube تنفيذ mvn k8s: دفع مهمة الدفع:



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







الشكل: 4. ظهرت الصورة التي تم تحميلها على السجل في Docker Hub.



الخطوة الرابعة: إنشاء بيانات موارد Kubernetes للتطبيق



لذلك ، قمنا بتجميع صورة التطبيق ، والآن نحتاج إلى كتابة بيانات Kubernetes. للقيام بذلك ، يحتوي Eclipse JKube على مهمة تقوم بإنشاء بيانات موارد صلبة بناءً على إطار عمل Java الأساسي ( Spring Boot أو Quarkus أو 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: مهمة مورد الموارد.



~/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: git@github.com: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 application -f ، لكن الملحق يمكنه فعل ذلك لنا. هذا ما يظهر على الشاشة بعد أن نطلب من Eclipse JKube تنفيذ mvn k8s: تطبيق المهمة:



~/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 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 ، والتي تجعل من السهل تطوير تطبيقات Java لمنصة Kubernetes. إذا كنت لا تريد إدخال هذه المهام باستمرار من لوحة المفاتيح ، فيمكنك كتابتها في تكوين المكون الإضافي ، على سبيل المثال ، مثل هذا:



<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: سجل تحقق استلام السجلات من تطبيق يعمل على Kubernetes.
k8s: تصحيح صفقة فتح منفذ تصحيح الأخطاء لتصحيح أخطاء تطبيق Kubernetes مباشرةً من IDE.
k8s: نشر تثبيت إن تنفيذ مهمة التثبيت وتطبيق البيانات التي تم إنشاؤها على مجموعة Kubernetes هو نفسه تمامًا لمهمة التطبيق.
k8s: مشاهدة صفقة النشر التلقائي السريع للتطبيق عن طريق تتبع مساحة الاسم الخاصة به.


نشر تطبيقات Java على Red Hat OpenShift باستخدام البرنامج المساعد OpenShift Maven



لنشر التطبيق من مثالنا إلى منصة Red Hat OpenShift ، سنستخدم المكون الإضافي OpenShift Maven . الفرق الوحيد هو أن بادئة المهمة ستتغير من k8s إلى oc. بشكل افتراضي ، يجعل المكون الإضافي Kubernetes Maven عامل إرساء -sborki وقابس 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 : $


فيديو تعليمي



لمعرفة المزيد حول كيفية تبسيط تطوير Kubernetes باستخدام Eclipse JKube ، شاهد الفيديو التعليمي حول كيفية نشر تطبيق Spring Boot بسيط على Minikube بسرعة:





خاتمة



في هذه المقالة ، أوضحنا كيف أن Eclipse JKube يجعل الحياة أسهل لمطور Java عند العمل مع Kubernetes. يمكن العثور على مزيد من المعلومات حول Eclipse JKube في موقع المشروع وعلى GitHub .



All Articles