توسعه برنامه های کاربردی جاوا برای Kubernetes با استفاده از Eclipse JKube

25 سال پیش، جاوا وارد جریان اصلی برنامه نویسی شد و در نهایت به یکی از عناصر اصلی تبدیل شد که پشته برنامه ها بر اساس آن ساخته می شوند. اما امروزه بسیاری از افراد و سازمان‌هایی که سال‌ها به جاوا وفادار بوده‌اند، مشغول مهاجرت یا مهاجرت به این پلتفرم هستند. کوبرنیتس یا مشتقات آن مانند سرخپوش OpenShift یا آمازون EKS.

توسعه برنامه های کاربردی جاوا برای Kubernetes با استفاده از Eclipse JKube

متأسفانه، Kubernetes منحنی یادگیری تند دارد و یک لایه عملیاتی دیگر را وارد فرآیند توسعه می کند که برنامه نویسان جاوا به آن عادت دارند. امروز نحوه استفاده را به شما خواهیم گفت Eclipse JKube، برای ساده کردن این عملیات اضافی مرتبط با Kubernetes و کانتینرها و اطمینان از مهاجرت بدون درد به پلتفرم ابری و در عین حال حفظ اکوسیستم آشنای جاوا. علاوه بر این، نحوه استقرار برنامه های جاوا بر روی پلت فرم OpenShift را با استفاده از افزونه OpenShift Maven نشان خواهیم داد.

فرآیند توسعه سنتی جاوا

فرآیند توسعه سنتی جاوه (شکل 1) توسعه دهنده را شامل می شود که کد می نویسد، سپس واحدهای استقرار را در قالب فایل های JAR یا WAR ایجاد می کند و سپس این فایل ها را روی یک وب یا سرور برنامه اجرا و اجرا می کند. راه اصلی برای انجام این کار استفاده از Maven از خط فرمان یا استفاده از یک IDE مانند IntelliJ یا Eclipse برای کدنویسی و بسته بندی برنامه ها است. توسعه دهندگان عادت دارند قبل از اجرای کد و ارسال آن به کنترل نسخه، تغییرات کد را ایجاد کنند و همه چیز را به طور کامل آزمایش کنند.

توسعه برنامه های کاربردی جاوا برای Kubernetes با استفاده از Eclipse JKube

برنج. 1. فرآیند توسعه سنتی جاوا.

فرآیند توسعه جاوا برای ابر

هنگام انتقال به برنامه های ابری، Kubernetes و ظروف. بنابراین، اکنون توسعه دهنده باید برنامه های جاوا را در آن بسته بندی کند تصاویر ظرف و مانیفست های Kubernetes را ایجاد کنید که این تصاویر را توصیف می کند. سپس این مانیفست ها به سرور تولیدی که Kubernetes را اجرا می کند اعمال می شود. به نوبه خود، Kubernetes این تصاویر را از رجیستری می گیرد و برنامه ها را با توجه به تنظیماتی که در مانیفست ها نوشته ایم، که معمولاً فایل های YAML هستند، اجرا می کند.

دگردیسی فرآیند توسعه سنتی جاوا در انتقال به ابر در شکل 2 نشان داده شده است. XNUMX.

توسعه برنامه های کاربردی جاوا برای Kubernetes با استفاده از Eclipse JKube

برنج. 2. فرآیند توسعه جاوا برای ابر.

Eclipse JKube

مهاجرت به Kubernetes یک لایه عملیاتی دیگر را به فرآیند توسعه اضافه می کند و بسیاری از توسعه دهندگان در مورد آن عصبی هستند زیرا می خواهند به جای اینکه چگونه آنها را به کار گیرند، روی کار اصلی خود - منطق برنامه - تمرکز کنند. و اینجاست که به کار می آید. Eclipse JKube، که به توسعه دهندگان اجازه می دهد از کتابخانه ها و افزونه های خود استفاده کنند (کیت JKube با افزونه Kubernetes Maven یا پلاگین OpenShift Maven) با پیروی از نمودار در شکل، عملیات مربوط به کانتینر و Kubernetes را بدون زحمت انجام دهید. 2.

در ادامه این مقاله، به شما نشان خواهیم داد که چگونه فرآیند توسعه جاوا را در محیط Kubernetes با استفاده از Eclipse JKube با افزونه Kubernetes Maven ساده کنید.

فرآیند توسعه ابر با استفاده از Eclipse JKube

بیایید یک طرح توسعه کمی جاوا را برای ابر از شکل 2 در نظر بگیریم و Eclipse JKube و Kubernetes Maven Plugin را در آن معرفی کنیم، همانطور که در شکل نشان داده شده است. 3.

توسعه برنامه های کاربردی جاوا برای Kubernetes با استفاده از Eclipse JKube

برنج. 3. فرآیند توسعه جاوا برای ابر با استفاده از Eclipse JKube.

همانطور که می بینیم، در اینجا همه عملیات برای تعامل با Kubernetes و کانتینرها (که در نمودار با رنگ قرمز مشخص شده اند) با وظایف هدف Eclipse JKube پیش فرض جایگزین می شوند که در جدول فهرست شده اند. 1.

جدول 1. وظایف پیش فرض JKube را Eclipse کنید.

کار
صحنه
شرح

k8s:build
PRE_INTEGRATION_TEST
ساخت تصاویر داکر

k8s: فشار
نصب
بارگذاری تصاویر داکر در رجیستری

k8s: منبع
PROCESS_RESOURCES
ایجاد نمایش K8s

k8s: اعمال کنید
گردآوری
اعمال مانیفست های تولید شده برای K8s

k8s: undeploy
بیکار کردن
حذف منابع K8s که با استفاده از k8s:apply و k8s:deploy مستقر شده بودند

توجه: اگر نمی‌خواهید وظایف از این پیش‌فرض‌های پیش‌فرض استفاده کنند، می‌توانید به صورت دستی Eclipse JKube را برای خود پیکربندی کنید، زیرا از پیکربندی از طریق پشتیبانی می‌کند. XML и منابع.

حال بیایید نمونه هایی از استفاده از Eclipse JKube و Kubernetes Maven Plugin در هنگام کار با برنامه ها را بررسی کنیم.

استقرار یک برنامه جاوا در Kubernetes با استفاده از Eclipse JKube

در این مثال ما یک برنامه ساده جاوا را روی یک خوشه مستقر خواهیم کرد مینی کوب با استفاده از Eclipse JKube. با استفاده از افزونه Kubernetes Maven، می‌توانیم پارامترهای استقرار را بدون نیاز به نوشتن پیکربندی تنظیم کنیم.

به عنوان یک برنامه کاربردی که ما استفاده می کنیم مولد اعداد تصادفی ساده، که خروجی 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. تصویر داکر را بسازید

فایل JAR برنامه را می توان با دستور بسته mvn ساخت و سپس از mvn goal task k8s:build می توان برای ساخت یک تصویر داکر از برنامه استفاده کرد. توجه داشته باشید که نام تصویر پیش فرض را با این ویژگی لغو کرده ایم:

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

قبل از ساختن تصویر، باید مطمئن شوید که داکر دیمون به درستی در معرض دید قرار گرفته است. این کار با دستور زیر قابل انجام است:

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

مرحله 3. تصویر را در رجیستری docker آپلود کنید

پس از اینکه تصویر داکر را با رجیستری پوش پیکربندی کردیم (در مورد ما docker.io است) ساختیم، می‌توانیم این تصویر را به رجیستری ارسال کنیم. این همان چیزی است که پس از اینکه از Eclipse JKube بخواهیم وظیفه 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 : $ 

پس از ارسال تصویر، باید بررسی کنید که در رجیستری موجود باشد. در مورد ما، همانطور که در شکل نشان داده شده است، به سادگی آن را در Docker Hub می بینیم. 4.

توسعه برنامه های کاربردی جاوا برای Kubernetes با استفاده از Eclipse JKube

برنج. 4. تصویر ارسال شده به رجیستری در Docker Hub ظاهر شد.

مرحله 4. مانیفست های منبع Kubernetes را برای برنامه ایجاد کنید

بنابراین، ما تصویر برنامه را جمع آوری کرده ایم، اکنون باید مانیفست های Kubernetes را بنویسیم. برای انجام این کار، Eclipse JKube وظیفه ای دارد که مانیفست های منبع سفت و سخت را بر اساس چارچوب زیرین جاوا تولید می کند.چکمه بهاری, کوارکوس، 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 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 application -f استفاده کنید، اما افزونه می تواند این کار را برای ما انجام دهد. این چیزی است که بعد از اینکه از Eclipse JKube بخواهیم mvn k8s:apply application task را اجرا کند، روی صفحه ظاهر می شود:

~/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 را بازگشایی کنید

برای این کار از وظیفه undeploy استفاده می شود که به سادگی تمام منابعی را که در مرحله قبل اعمال شده بود حذف می کند، یعنی زمانی که وظیفه application اجرا می شود. این همان چیزی است که بعد از اینکه از 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 نگاه کردیم که توسعه برنامه‌های جاوا را برای پلتفرم 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 Plugin هستند را در نظر نگرفته ایم، بنابراین در جدول 2 لیستی از کارهای اضافی که ممکن است برای شما نیز مفید باشد را ارائه کرده ایم.

جدول 2. وظایف هدف اضافی Eclipse JKube.

کار
صحنه
شرح

k8s:log
تصدیق
دریافت گزارش از یک برنامه در حال اجرا در Kubernetes.

k8s: اشکال زدایی
بسته
یک پورت اشکال زدایی را باز کنید تا بتوانید برنامه خود را که در Kubernetes اجرا می شود مستقیماً از IDE اشکال زدایی کنید.

k8s: استقرار
نصب
ایجاد یک فورک برای وظیفه Install و اعمال مانیفست های تولید شده در خوشه Kubernetes به همان روشی که در مورد تسک اعمال می شود.

k8s: ساعت
بسته
استقرار خودکار یک برنامه با ردیابی فضای نام آن.

استقرار برنامه های جاوا در Red Hat OpenShift با استفاده از پلاگین OpenShift Maven

برای استقرار برنامه از مثال ما در پلتفرم 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 : $

درس تصویری

برای کسب اطلاعات بیشتر در مورد چگونگی آسان‌تر کردن توسعه Kubernetes با Eclipse JKube، این آموزش ویدیویی را در مورد نحوه استقرار سریع یک برنامه ساده Spring Boot در Minikube تماشا کنید:

نتیجه

در این مقاله، ما نشان دادیم که چگونه Eclipse JKube زندگی یک توسعه‌دهنده جاوا را هنگام کار با Kubernetes آسان‌تر می‌کند. اطلاعات بیشتر در مورد Eclipse JKube را می‌توانید در اینجا پیدا کنید وب سایت پروژه و GitHub.

منبع: www.habr.com

اضافه کردن نظر