Eclipse JKube کا استعمال کرتے ہوئے Kubernetes کے لیے جاوا ایپلی کیشنز تیار کرنا

25 سال پہلے، جاوا پروگرامنگ کے مرکزی دھارے میں داخل ہوا اور آخر کار ان بنیادی عناصر میں سے ایک بن گیا جس کے ارد گرد ایپلیکیشن اسٹیک بنائے جاتے ہیں۔ تاہم، آج، بہت سے لوگ اور تنظیمیں جو کئی سالوں سے جاوا کے وفادار ہیں، ہجرت کرنے میں مصروف ہیں یا پلیٹ فارم پر ہجرت کرنے پر غور کر رہے ہیں۔ Kubernetes یا اس کے مشتقات جیسے ریڈ ہاٹ اوپن شفٹ یا ایمیزون ای کے ایس.

Eclipse JKube کا استعمال کرتے ہوئے Kubernetes کے لیے جاوا ایپلی کیشنز تیار کرنا

بدقسمتی سے، Kubernetes میں سیکھنے کا ایک بہت بڑا منحنی خطوط ہے اور اس نے ترقی کے عمل میں ایک اور آپریشنل پرت متعارف کرائی ہے جس کے جاوا پروگرامرز عادی ہیں۔ آج ہم آپ کو استعمال کرنے کا طریقہ بتائیں گے۔ Eclipse JKube, Kubernetes اور کنٹینرز کے ساتھ منسلک ان اضافی کارروائیوں کو آسان بنانے کے لیے، اور واقف جاوا ایکو سسٹم کو برقرار رکھتے ہوئے کلاؤڈ پلیٹ فارم پر بغیر تکلیف کے منتقلی کو یقینی بنانا۔ مزید برآں، ہم یہ دکھائیں گے کہ OpenShift Maven پلگ ان کا استعمال کرتے ہوئے OpenShift پلیٹ فارم پر جاوا ایپلیکیشنز کو کیسے تعینات کیا جائے۔

روایتی جاوا کی ترقی کا عمل

روایتی ترقی کا عمل اعلی درجے کا Java (شکل 1) میں ڈویلپر کوڈ لکھنا، پھر JAR یا WAR فائلوں کی شکل میں تعیناتی یونٹ بنانا، اور پھر ان فائلوں کو ویب یا ایپلیکیشن سرور پر تعینات کرنا اور چلانا شامل ہے۔ ایسا کرنے کا بنیادی طریقہ یہ ہے کہ کمانڈ لائن سے Maven کا استعمال کریں یا ایپلی کیشنز کو کوڈ اور پیکج کرنے کے لیے IntelliJ یا Eclipse جیسے IDE کا استعمال کریں۔ ڈویلپرز کوڈ میں تبدیلی کرنے اور کوڈ کو ارتکاب کرنے اور اسے ورژن کنٹرول میں جمع کرانے سے پہلے ہر چیز کی اچھی طرح جانچ کرنے کے عادی ہیں۔

Eclipse JKube کا استعمال کرتے ہوئے Kubernetes کے لیے جاوا ایپلی کیشنز تیار کرنا

چاول۔ 1. روایتی جاوا کی ترقی کا عمل۔

کلاؤڈ کے لیے جاوا کی ترقی کا عمل

جب کلاؤڈ ایپلی کیشنز میں منتقل ہوتے ہیں، Kubernetes اور کنٹینرز. لہذا، اب ڈویلپر کو جاوا ایپلی کیشنز کو پیکیج کرنے کی ضرورت ہے۔ کنٹینر کی تصاویر اور Kubernetes مینی فیسٹ بنائیں جو ان تصاویر کو بیان کرتے ہیں۔ یہ مینی فیسٹس پھر Kubernetes چلانے والے پروڈکشن سرور پر لاگو ہوتے ہیں۔ بدلے میں، Kubernetes ان تصاویر کو رجسٹری سے لیتا ہے اور ایپلی کیشنز کو ان کنفیگریشنز کے مطابق لگاتا ہے جو ہم نے مینی فیسٹ میں لکھی ہیں، جو عام طور پر YAML فائلیں ہوتی ہیں۔

کلاؤڈ میں منتقلی میں روایتی جاوا کی نشوونما کے عمل کی میٹامورفوسس تصویر میں دکھایا گیا ہے۔ 2.

Eclipse JKube کا استعمال کرتے ہوئے Kubernetes کے لیے جاوا ایپلی کیشنز تیار کرنا

چاول۔ 2. کلاؤڈ کے لیے جاوا کی ترقی کا عمل۔

Eclipse JKube

Kubernetes میں ہجرت کرنے سے ترقی کے عمل میں ایک اور آپریشنل پرت شامل ہوتی ہے، اور بہت سے ڈویلپرز اس سے گھبراتے ہیں کیونکہ وہ اپنے بنیادی کام پر توجہ مرکوز کرنا چاہتے ہیں — ایپلی کیشن کی منطق — بجائے اس کے کہ انہیں کیسے تعینات کیا جائے۔ اور یہ وہ جگہ ہے جہاں یہ کھیل میں آتا ہے۔ Eclipse JKube، جو ڈویلپرز کو ان کی لائبریریوں اور پلگ انز کو استعمال کرنے کی اجازت دیتا ہے (جے کیوب کٹ ساتھ مل کر کبرنیٹس ماون پلگ ان یا اوپن شفٹ ماون پلگ ان) کنٹینر اور کبرنیٹس سے متعلقہ آپریشنز کو آسانی سے انجام دینے کے لیے تصویر میں دیے گئے خاکے کی پیروی کرنا۔ 2.

اس مضمون کے بقیہ حصے میں، ہم آپ کو دکھائیں گے کہ کبرنیٹس ماون پلگ ان کے ساتھ Eclipse JKube کا استعمال کرکے کبرنیٹس ماحول میں جاوا کی ترقی کے عمل کو کس طرح آسان بنایا جائے۔

Eclipse JKube کا استعمال کرتے ہوئے کلاؤڈ ڈویلپمنٹ کا عمل

آئیے تصویر 2 سے کلاؤڈ کے لیے ایک قدرے تبدیل شدہ جاوا ڈویلپمنٹ اسکیم پر غور کریں، اس میں Eclipse JKube اور Kubernetes Maven Plugin کو متعارف کراتے ہیں، جیسا کہ تصویر 3 میں دکھایا گیا ہے۔ XNUMX.

Eclipse JKube کا استعمال کرتے ہوئے Kubernetes کے لیے جاوا ایپلی کیشنز تیار کرنا

چاول۔ 3. Eclipse JKube کا استعمال کرتے ہوئے کلاؤڈ کے لیے جاوا کی ترقی کا عمل۔

جیسا کہ ہم دیکھ سکتے ہیں، یہاں Kubernetes اور کنٹینرز کے ساتھ تعامل کے لیے تمام آپریشنز (ڈائیگرام میں سرخ رنگ میں نمایاں کیے گئے ہیں) کو ڈیفالٹ Eclipse JKube گول ٹاسک سے بدل دیا گیا ہے، جو ٹیبل میں درج ہیں۔ 1۔

ٹیبل 1. Eclipse JKube ڈیفالٹ ٹاسکس۔

ٹاسک
اسٹیج
تفصیل

k8s: تعمیر
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 کے استعمال کی مثالیں دیکھتے ہیں۔

Eclipse JKube کا استعمال کرتے ہوئے Kubernetes پر جاوا ایپلیکیشن تعینات کرنا

اس مثال میں ہم ایک سادہ جاوا ایپلیکیشن کو کلسٹر پر تعینات کریں گے۔ منیکوب Eclipse JKube کا استعمال کرتے ہوئے. Kubernetes Maven پلگ ان کا استعمال کرتے ہوئے، ہم کسی بھی ترتیب کو لکھے بغیر تعیناتی کے پیرامیٹرز سیٹ کر سکتے ہیں۔

مثال کے طور پر ہم استعمال کرتے ہیں۔ سادہ بے ترتیب نمبر جنریٹر، جو /random اختتامی نقطہ پر JSON آؤٹ پٹ تیار کرتا ہے:

~/work/repos/eclipse-jkube-demo-project : $ curl localhost:8080/random | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    45    0    45    0     0    818      0 --:--:-- --:--:-- --:--:--   818
{
  "id": "e80a4d10-c79b-4b9a-aaac-7c286cb37f3c"
}

مرحلہ 1۔ Kubernetes Maven پلگ ان ڈاؤن لوڈ کریں۔

Kubernetes Maven پلگ ان مخزن میں ہے۔ ماون سینٹرل ریپوزٹری. Eclipse JKube استعمال کرنے کے لیے آپ کو اپنے pom.xml میں Kubernetes Maven پلگ ان کو بطور انحصار شامل کرنا ہوگا۔

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

اگر خالص Kubernetes کے بجائے OpenShift استعمال کیا جاتا ہے، تو 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 کمانڈ داخل کرتے ہیں، اور یہ وہی ہے جو ہم ایکلیپس 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.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 میں دکھایا گیا ہے۔ XNUMX.

Eclipse JKube کا استعمال کرتے ہوئے Kubernetes کے لیے جاوا ایپلی کیشنز تیار کرنا

چاول۔ 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 ریسورس ٹاسک انجام دینے کے لیے کہتے ہیں تو اسکرین آؤٹ پٹ ایسا ہی نظر آتا ہے۔

~/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۔ ایپلیکیشن کوبرنیٹس کلسٹر میں تعینات کریں۔

اب ہم ایپلیکیشن کو تعینات کرنے کے لیے بالکل تیار ہیں: ہم نے اس کی تصویر بنائی ہے اور پھر خود بخود ریسورس مینی فیسٹس تیار کیے ہیں۔ اب جو کچھ باقی ہے وہ یہ سب کوبرنیٹس کلسٹر پر لاگو کرنا ہے۔ ایپلیکیشن کو تعینات کرنے کے لیے، آپ یقیناً kubectl apply -f کمانڈ استعمال کر سکتے ہیں، لیکن پلگ ان ہمارے لیے ایسا کر سکتا ہے۔ یہ وہی ہے جو اسکرین پر ظاہر ہوگا جب ہم Eclipse JKube سے mvn k8s:apply apply ٹاسک کو انجام دینے کے لیے کہیں گے۔

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:apply
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Building random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] k8s: Using Kubernetes at https://192.168.39.145:8443/ in namespace default with manifest /home/rohaan/work/repos/eclipse-jkube-demo-project/target/classes/META-INF/jkube/kubernetes.yml 
[INFO] k8s: Using namespace: default
[INFO] k8s: Creating a Service from kubernetes.yml namespace default name random-generator
[INFO] k8s: Created Service: target/jkube/applyJson/default/service-random-generator.json
[INFO] k8s: Creating a Deployment from kubernetes.yml namespace default name random-generator
[INFO] k8s: Created Deployment: target/jkube/applyJson/default/deployment-random-generator.json
[INFO] k8s: HINT: Use the command `kubectl get pods -w` to watch your pods start up
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  7.306 s
[INFO] Finished at: 2020-08-10T11:40:57+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $ kubectl get pods -w
NAME                                                     READY   STATUS             RESTARTS   AGE
random-generator-58b7847d7f-9m9df                        0/1     Running            0          7s
random-generator-58b7847d7f-9m9df                        1/1     Running            0          17s
^C~/work/repos/eclipse-jkube-demo-project : $ kubectl get svc
NAME                                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
io-openliberty-sample-getting-started   NodePort    10.110.4.104    <none>        9080:30570/TCP    44h
kubernetes                              ClusterIP   10.96.0.1       <none>        443/TCP           18d
random-generator                        NodePort    10.97.172.147   <none>        8080:32186/TCP    22s
~/work/repos/eclipse-jkube-demo-project : $ curl `minikube ip`:32186/random | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    45    0    45    0     0   1800      0 --:--:-- --:--:-- --:--:--  1875
{
  "id": "42e5571f-a20f-44b3-8184-370356581d10"
}

مرحلہ 6۔ کبرنیٹس کلسٹر سے ایپلیکیشنز کو غیر تعینات کریں۔

ایسا کرنے کے لیے، undeploy ٹاسک کا استعمال کیا جاتا ہے، جو صرف ان تمام وسائل کو ہٹاتا ہے جو پچھلے مرحلے میں لاگو کیے گئے تھے، یعنی جب اپلائی ٹاسک کو انجام دیا جاتا ہے۔ 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>

یہ کہنا ضروری ہے کہ اس مضمون میں ہم نے ایکلیپس JKube اور Kubernetes Maven Plugin میں موجود تمام اہداف کے کاموں پر غور نہیں کیا ہے، اس لیے ہم ٹیبل 2 میں اضافی کاموں کی فہرست فراہم کرتے ہیں جو آپ کے لیے مفید بھی ہو سکتے ہیں۔

ٹیبل 2. اضافی Eclipse JKube گول ٹاسکس۔

ٹاسک
اسٹیج
تفصیل

k8s:log
تصدیق کریں۔
Kubernetes پر چلنے والی ایپلیکیشن سے لاگ وصول کرنا۔

k8s: ڈیبگ
پیکیج
ڈیبگ پورٹ کھولیں تاکہ آپ کوبرنیٹس پر چلنے والی اپنی ایپلیکیشن کو براہ راست IDE سے ڈیبگ کر سکیں۔

k8s: تعینات کریں۔
انسٹال کریں
انسٹال ٹاسک کے لیے ایک کانٹا بنانا اور تیار کردہ مینی فیسٹس کو اسی طرح سے Kubernetes کلسٹر پر لاگو کرنا جس طرح اپلائی ٹاسک کے معاملے میں ہوتا ہے۔

k8s: گھڑی
پیکیج
کسی ایپلیکیشن کے نام کی جگہ کو ٹریک کرکے اس کی خودکار گرم تعیناتی۔

OpenShift Maven پلگ ان کا استعمال کرتے ہوئے Red Hat OpenShift پر جاوا ایپلیکیشنز کی تعیناتی

ہماری مثال سے ایپلی کیشن کو Red Hat OpenShift پلیٹ فارم پر تعینات کرنے کے لیے، ہم پلگ ان کا استعمال کرتے ہیں۔ اوپن شفٹ ماون. فرق صرف اتنا ہوگا کہ ٹاسک کا سابقہ ​​k8s سے oc میں بدل جائے گا۔ بطور ڈیفالٹ Kubernetes Maven پلگ ان کرتا ہے۔ ڈاکراسمبلیاں، اور اوپن شفٹ ماون پلگ ان - اسمبلیاں S2I۔. ہم اپنے پراجیکٹ میں کوئی تبدیلی نہیں کر رہے ہیں، سوائے jkube.generator.name پراپرٹی کو ہٹانے کے، کیونکہ رجسٹری کو آگے بڑھاتے وقت اس کی ضرورت نہیں ہوتی ہے (تعمیر کے مرحلے کے دوران، OpenShift تصویر کو اپنی اندرونی رجسٹری میں رکھتا ہے)۔ اور یہ وہی ہے جو اسکرین پر ظاہر ہوگا جب ہم اپنی مثال چلاتے ہیں، جس میں، ویسے، ہم ایک وقت میں ایک نہیں بلکہ تمام کام ایک ساتھ انجام دیتے ہیں:

~/work/repos/eclipse-jkube-demo-project : $ mvn oc:build oc:resource oc:apply
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Building random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] oc: Using OpenShift build with strategy S2I
[INFO] oc: Running in OpenShift mode
[INFO] oc: Running generator spring-boot
[INFO] oc: spring-boot: Using Docker image quay.io/jkube/jkube-java-binary-s2i:0.0.7 as base / builder
[INFO] oc: [random-generator:0.0.1] "spring-boot": Created docker source tar /home/rohaan/work/repos/eclipse-jkube-demo-project/target/docker/random-generator/0.0.1/tmp/docker-build.tar
[INFO] oc: Adding to Secret pullsecret-jkube
[INFO] oc: Using Secret pullsecret-jkube
[INFO] oc: Creating BuildServiceConfig random-generator-s2i for Source build
[INFO] oc: Creating ImageStream random-generator
[INFO] oc: Starting Build random-generator-s2i
[INFO] oc: Waiting for build random-generator-s2i-1 to complete...
[INFO] oc: Caching blobs under "/var/cache/blobs".
[INFO] oc: Getting image source signatures
[INFO] oc: Copying blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Copying blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Copying blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Copying config sha256:52d6788fcfdd39595264d34a3959464a5dabc1d4ef0ae188802b20fc2d6a857b
[INFO] oc: Writing manifest to image destination
[INFO] oc: Storing signatures
[INFO] oc: Generating dockerfile with builder image quay.io/jkube/jkube-java-binary-s2i:0.0.7
[INFO] oc: STEP 1: FROM quay.io/jkube/jkube-java-binary-s2i:0.0.7
[INFO] oc: STEP 2: LABEL "io.openshift.build.source-location"="/tmp/build/inputs"       "io.openshift.build.image"="quay.io/jkube/jkube-java-binary-s2i:0.0.7"
[INFO] oc: STEP 3: ENV JAVA_APP_DIR="/deployments"     OPENSHIFT_BUILD_NAME="random-generator-s2i-1"     OPENSHIFT_BUILD_NAMESPACE="default"
[INFO] oc: STEP 4: USER root
[INFO] oc: STEP 5: COPY upload/src /tmp/src
[INFO] oc: STEP 6: RUN chown -R 1000:0 /tmp/src
[INFO] oc: STEP 7: USER 1000
[INFO] oc: STEP 8: RUN /usr/local/s2i/assemble
[INFO] oc: INFO S2I source build with plain binaries detected
[INFO] oc: INFO S2I binary build from fabric8-maven-plugin detected
[INFO] oc: INFO Copying binaries from /tmp/src/deployments to /deployments ...
[INFO] oc: random-generator-0.0.1.jar
[INFO] oc: INFO Copying deployments from deployments to /deployments...
[INFO] oc: '/tmp/src/deployments/random-generator-0.0.1.jar' -> '/deployments/random-generator-0.0.1.jar'
[INFO] oc: STEP 9: CMD /usr/local/s2i/run
[INFO] oc: STEP 10: COMMIT temp.builder.openshift.io/default/random-generator-s2i-1:48795e41
[INFO] oc: time="2020-08-10T06:37:49Z" level=info msg="Image operating system mismatch: image uses "", expecting "linux""
[INFO] oc: time="2020-08-10T06:37:49Z" level=info msg="Image architecture mismatch: image uses "", expecting "amd64""
[INFO] oc: Getting image source signatures
[INFO] oc: Copying blob sha256:d8e1f35641acb80b562f70cf49911341dfbe8c86f4d522b18efbf3732aa74223
[INFO] oc: Copying blob sha256:b6f081e4b2b6de8be4b1dec132043d14c121e968384dd624fb69c2c07b482edb
[INFO] oc: Copying blob sha256:b7139ad07aa8ce4ed5a132f7c5cc9f1de0f5099b5e155027a23d57f7fbe78b16
[INFO] oc: Copying blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Copying config sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Writing manifest to image destination
[INFO] oc: Storing signatures
[INFO] oc: --> 27aaadaf28e
[INFO] oc: 27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Getting image source signatures
[INFO] oc: 
[INFO] oc: Pushing image image-registry.openshift-image-registry.svc:5000/default/random-generator:0.0.1 ...
[INFO] oc: Copying blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Copying blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Copying blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Copying blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Copying config sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Writing manifest to image destination
[INFO] oc: Storing signatures
[INFO] oc: Successfully pushed image-registry.openshift-image-registry.svc:5000/default/random-generator@sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: Push successful
[INFO] oc: Build random-generator-s2i-1 in status Complete
[INFO] oc: Found tag on ImageStream random-generator tag: sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: ImageStream random-generator written to /home/rohaan/work/repos/eclipse-jkube-demo-project/target/random-generator-is.yml
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:resource (default-cli) @ random-generator ---
[INFO] oc: Using docker image name of namespace: default
[INFO] oc: Running generator spring-boot
[INFO] oc: spring-boot: Using Docker image quay.io/jkube/jkube-java-binary-s2i:0.0.7 as base / builder
[INFO] oc: jkube-controller: Adding a default DeploymentConfig
[INFO] oc: jkube-service: Adding a default service 'random-generator' with ports [8080]
[INFO] oc: jkube-healthcheck-spring-boot: Adding readiness probe on port 8080, path='/actuator/health', scheme='HTTP', with initial delay 10 seconds
[INFO] oc: jkube-healthcheck-spring-boot: Adding liveness probe on port 8080, path='/actuator/health', scheme='HTTP', with initial delay 180 seconds
[INFO] oc: jkube-revision-history: Adding revision history limit to 2
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] oc: Using OpenShift at https://api.crc.testing:6443/ in namespace default with manifest /home/rohaan/work/repos/eclipse-jkube-demo-project/target/classes/META-INF/jkube/openshift.yml 
[INFO] oc: OpenShift platform detected
[INFO] oc: Using project: default
[INFO] oc: Creating a Service from openshift.yml namespace default name random-generator
[INFO] oc: Created Service: target/jkube/applyJson/default/service-random-generator.json
[INFO] oc: Creating a DeploymentConfig from openshift.yml namespace default name random-generator
[INFO] oc: Created DeploymentConfig: target/jkube/applyJson/default/deploymentconfig-random-generator.json
[INFO] oc: Creating Route default:random-generator host: null
[INFO] oc: HINT: Use the command `oc get pods -w` to watch your pods start up
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:07 min
[INFO] Finished at: 2020-08-10T12:08:00+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $ oc get pods -w
NAME                           READY     STATUS      RESTARTS   AGE
random-generator-1-deploy      1/1       Running     0          14s
random-generator-1-vnrm9       0/1       Running     0          11s
random-generator-s2i-1-build   0/1       Completed   0          1m
random-generator-1-vnrm9   1/1       Running   0         24s
random-generator-1-deploy   0/1       Completed   0         28s
~/work/repos/eclipse-jkube-demo-project : $ oc get routes
NAME                HOST/PORT                                    PATH      SERVICES            PORT      TERMINATION   WILDCARD
random-generator    random-generator-default.apps-crc.testing              random-generator    8080                    None
~/work/repos/eclipse-jkube-demo-project : $ curl random-generator-default.apps-crc.testing/random 
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100    45    0    45    0     0   1666      0 --:--:-- --:--:-- --:--:--  1730
{
"id": "d80052d9-2f92-43cb-b9eb-d7cffb879798"
}
~/work/repos/eclipse-jkube-demo-project : $

ویڈیو سبق

Eclipse JKube کے ساتھ کبرنیٹس کی ترقی کو آسان بنانے کے بارے میں مزید جاننے کے لیے، یہ ویڈیو ٹیوٹوریل دیکھیں کہ منی کیوب پر ایک سادہ اسپرنگ بوٹ ایپلیکیشن کو تیزی سے کیسے تعینات کیا جائے:

حاصل يہ ہوا

اس مضمون میں، ہم نے دکھایا کہ کس طرح Eclipse JKube جاوا ڈویلپر کے لیے کبرنیٹس کے ساتھ کام کرتے ہوئے زندگی کو آسان بناتا ہے۔ Eclipse JKube کے بارے میں مزید معلومات یہاں پر مل سکتی ہیں۔ منصوبے کی ویب سائٹ اور پر GitHub کے.

ماخذ: www.habr.com

نیا تبصرہ شامل کریں