Java հավելվածների մշակում Kubernetes-ի համար՝ օգտագործելով Eclipse JKube

25 տարի առաջ Java-ն մտավ ծրագրավորման հիմնական հոսք և ի վերջո դարձավ այն հիմնական տարրերից մեկը, որի շուրջ կառուցվում են հավելվածների կույտերը: Այսօր, սակայն, շատ մարդիկ և կազմակերպություններ, որոնք երկար տարիներ հավատարիմ են Java-ին, զբաղված են միգրացիայով կամ մտածում են հարթակ միգրացիայի մասին: Կուբերնետես կամ դրա ածանցյալները, ինչպիսիք են Red Hat OpenShift- ը կամ Amazon EKS.

Java հավելվածների մշակում Kubernetes-ի համար՝ օգտագործելով Eclipse JKube

Ցավոք, Kubernetes-ն ունի կտրուկ ուսուցման կոր և ներմուծում է մեկ այլ գործառնական շերտ զարգացման գործընթացում, որին սովոր են Java ծրագրավորողները: Այսօր մենք ձեզ կասենք, թե ինչպես օգտագործել Eclipse JKube, պարզեցնելու այս լրացուցիչ գործողությունները՝ կապված Kubernetes-ի և կոնտեյներների հետ, և ապահովելու ցավազուրկ միգրացիա դեպի ամպային հարթակ՝ պահպանելով Java-ի ծանոթ էկոհամակարգը: Ավելին, մենք ցույց կտանք, թե ինչպես տեղադրել Java հավելվածները OpenShift հարթակում՝ օգտագործելով OpenShift Maven հավելվածը:

Ավանդական Java-ի զարգացման գործընթաց

Ավանդական զարգացման գործընթաց Java (Նկար 1) ներառում է ծրագրավորողը գրում է կոդը, այնուհետև ստեղծում է տեղակայման միավորներ JAR կամ WAR ֆայլերի տեսքով, այնուհետև տեղադրում և գործարկում է այս ֆայլերը վեբ կամ հավելվածի սերվերի վրա: Դա անելու հիմնական միջոցն է օգտագործել Maven-ը հրամանի տողից կամ օգտագործել IDE, ինչպիսին է IntelliJ-ը կամ Eclipse-ը՝ հավելվածները կոդավորելու և փաթեթավորելու համար: Մշակողները սովոր են կոդի փոփոխությունները կատարել և ամեն ինչ մանրակրկիտ ստուգել՝ նախքան կոդը մուտքագրելը և այն տարբերակի հսկողության հանձնելը:

Java հավելվածների մշակում Kubernetes-ի համար՝ օգտագործելով Eclipse JKube

Բրինձ. 1. Ավանդական Java-ի մշակման գործընթաց:

Java-ի մշակման գործընթաց ամպի համար

Ամպային հավելվածներին անցնելիս Kubernetes և տարաներ. Հետևաբար, այժմ մշակողը պետք է փաթեթավորի Java հավելվածները կոնտեյների պատկերներ և ստեղծել Kubernetes մանիֆեստներ, որոնք նկարագրում են այս պատկերները: Այս մանիֆեստներն այնուհետև կիրառվում են արտադրական սերվերի վրա, որն աշխատում է Kubernetes-ում: Իր հերթին, Kubernetes-ը վերցնում է այս պատկերները գրանցամատյանից և տեղադրում հավելվածներ՝ ըստ այն կոնֆիգուրացիաների, որոնք մենք գրել ենք մանիֆեստներում, որոնք սովորաբար YAML ֆայլեր են։

Ավանդական Java-ի մշակման գործընթացի փոխակերպումը ամպին անցնելու ժամանակ ցույց է տրված Նկ. 2.

Java հավելվածների մշակում Kubernetes-ի համար՝ օգտագործելով Eclipse JKube

Բրինձ. 2. Java-ի մշակման գործընթաց ամպի համար:

Eclipse JKube

Kubernetes-ի միգրացիան զարգացման գործընթացին ավելացնում է ևս մեկ գործառնական շերտ, և շատ մշակողներ նյարդայնանում են դրանից, քանի որ նրանք ցանկանում են կենտրոնանալ իրենց հիմնական աշխատանքի վրա՝ հավելվածի տրամաբանության վրա, այլ ոչ թե ինչպես դրանք տեղակայել: Եվ սա այն տեղն է, որտեղ այն հայտնվում է խաղի մեջ: Eclipse JKube, որը թույլ է տալիս ծրագրավորողներին օգտագործել իրենց գրադարաններն ու պլագինները (JKube հավաքածու հետ Kubernetes Maven Plugin կամ OpenShift Maven Plugin) առանց ջանք գործադրելու կոնտեյների և Kubernetes-ի հետ կապված գործողություններ՝ հետևելով Նկարի գծապատկերին: 2.

Այս հոդվածի մնացած մասում մենք ձեզ ցույց կտանք, թե ինչպես պարզեցնել Java-ի մշակման գործընթացը Kubernetes միջավայրում՝ օգտագործելով Eclipse JKube-ը Kubernetes Maven Plugin-ի հետ:

Cloud-ի մշակման գործընթացը Eclipse JKube-ի միջոցով

Եկեք դիտարկենք ամպի համար Java-ի մշակման մի փոքր փոփոխված սխեման Նկար 2-ից՝ դրանում ներկայացնելով Eclipse JKube և Kubernetes Maven Plugin, ինչպես ցույց է տրված Նկ. 3.

Java հավելվածների մշակում Kubernetes-ի համար՝ օգտագործելով Eclipse JKube

Բրինձ. 3. Java-ի մշակման գործընթաց ամպի համար՝ օգտագործելով Eclipse JKube:

Ինչպես տեսնում ենք, այստեղ Kubernetes-ի և բեռնարկղերի հետ փոխազդեցության բոլոր գործողությունները (կարմիր գույնով ընդգծված դիագրամում) փոխարինվում են լռելյայն Eclipse JKube նպատակային առաջադրանքներով, որոնք նշված են Աղյուսակում։ 1.

Աղյուսակ 1. Eclipse JKube լռելյայն առաջադրանքները:

Առաջադրանք
Փուլ
Նկարագրություն

k8s:կառուցել
PRE_INTEGRATION_TEST
Դոկերի պատկերների կառուցում

k8s: հրում
ՏԵՂԱԴՐԵԼ
Դոկերի պատկերների վերբեռնում գրանցամատյանում

k8s:ռեսուրս
PROCESS_RESOURCES
K8-ների գեներացում

k8s:դիմել
ԿԱԶՄԵԼ
Ստեղծված մանիֆեստների կիրառում K8-ների վրա

k8s: undeploy
ՉԳՈՐԾԱՐԿԵԼ
K8s ռեսուրսների հեռացում, որոնք տեղակայվել են k8s:apply և k8s:deploy միջոցով

Նշում: Եթե ​​դուք չեք ցանկանում, որ առաջադրանքները օգտագործեն այս կանխադրված կանխադրվածները, կարող եք ձեռքով կարգավորել Eclipse JKube-ը ձեզ համար, քանի որ այն աջակցում է կազմաձևման միջոցով: XML и ռեսուրսներ.

Այժմ դիտարկենք Eclipse JKube-ի և Kubernetes Maven Plugin-ի օգտագործման օրինակները հավելվածների հետ աշխատելիս:

Java հավելվածի տեղակայում Kubernetes-ում Eclipse JKube-ի միջոցով

Այս օրինակում մենք կտեղակայենք պարզ Java հավելված կլաստերի վրա Մինիկուբե օգտագործելով Eclipse JKube-ը: Օգտագործելով Kubernetes Maven Plugin-ը, մենք կարող ենք սահմանել տեղակայման պարամետրեր՝ առանց որևէ կոնֆիգուրացիա գրելու:

Որպես հավելվածի օրինակ մենք օգտագործում ենք պարզ պատահական թվերի գեներատոր, որն արտադրում է 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 Plugin-ը

Kubernetes Maven Plugin-ը պահոցում է Maven կենտրոնական պահեստ. Eclipse JKube-ն օգտագործելու համար դուք պետք է ավելացնեք Kubernetes Maven Plugin-ը ձեր 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 նպատակային առաջադրանքը k8s:build կարող է օգտագործվել հավելվածի դոկերի պատկեր ստեղծելու համար։ Նկատի ունեցեք, որ մենք վերացրել ենք լռելյայն պատկերի անունը այս հատկությամբ.

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

Նախքան պատկերը կառուցելը, դուք պետք է համոզվեք, որ դոկեր դեյմոնը ճիշտ է ենթարկվում: Դա կարելի է անել հետևյալ հրամանով.

$ eval $(minikube docker-env)

Այնուհետև մենք մուտքագրում ենք mvn k8s:build հրամանը, և սա այն է, ինչ մենք կտեսնենք էկրանին, երբ կառուցում ենք դոկերի պատկերը՝ օգտագործելով Eclipse JKube build առաջադրանքը.

~/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. Վերբեռնեք պատկերը դոկերի ռեեստրում

Այն բանից հետո, երբ մենք կառուցեցինք դոկերի պատկերը՝ կազմաձևված push ռեեստրի միջոցով (մեր դեպքում դա 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.

Java հավելվածների մշակում Kubernetes-ի համար՝ օգտագործելով Eclipse JKube

Բրինձ. 4. Ռեեստր ուղարկված պատկերը հայտնվել է Docker Hub-ում:

Քայլ 4. Ստեղծեք Kubernetes ռեսուրսի մանիֆեստներ հավելվածի համար

Այսպիսով, մենք հավաքել ենք հավելվածի պատկերը, այժմ պետք է գրել Kubernetes մանիֆեստներ։ Դա անելու համար Eclipse JKube-ն ունի խնդիր, որը ստեղծում է կոշտ ռեսուրսների մանիֆեստներ՝ հիմնված Java-ի հիմքում ընկած շրջանակի վրա (Գարնանային կոշիկ, Քվարկուս, 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. Տեղադրեք հավելվածը Kubernetes կլաստերում

Այժմ մենք բոլորս պատրաստ ենք հավելվածը տեղակայելու համար. մենք ստեղծել ենք դրա պատկերը, այնուհետև ավտոմատ կերպով ստեղծել ենք ռեսուրսի մանիֆեստները: Այժմ մնում է այս ամենը կիրառել Kubernetes կլաստերի վրա։ Հավելվածը տեղակայելու համար, իհարկե, կարող եք օգտագործել kubectl apply -f հրամանը, բայց plugin-ը կարող է դա անել մեզ համար: Սա այն է, ինչ կհայտնվի էկրանին այն բանից հետո, երբ մենք խնդրենք 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 առաջադրանքը, որը պարզապես հեռացնում է բոլոր ռեսուրսները, որոնք կիրառվել են նախորդ քայլում, այսինքն, երբ կիրառվում է առաջադրանքը: Սա այն է, ինչ մենք կտեսնենք էկրանին այն բանից հետո, երբ խնդրենք 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-ի կազմաձևում, օրինակ՝ այսպես.

<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
ՎԱՎԵՐԱԳՐԵԼ
Կուբերնետեսով աշխատող հավելվածից տեղեկամատյանների ստացում:

k8s:վրիպազերծում
Փաթեթի
Բացեք վրիպազերծման պորտ, որպեսզի կարողանաք վրիպազերծել Kubernetes-ում աշխատող ձեր հավելվածը անմիջապես IDE-ից:

k8s:տեղակայել
ՏԵՂԱԴՐԵԼ
Install առաջադրանքի համար պատառաքաղի ստեղծում և ստեղծվող մանիֆեստների կիրառում Kubernetes կլաստերի վրա այնպես, ինչպես կիրառել առաջադրանքի դեպքում:

k8s:ժամացույց
Փաթեթի
Հավելվածի ավտոմատ տաք տեղակայում՝ հետևելով դրա անվանատարածքին:

Java հավելվածների տեղակայում Red Hat OpenShift-ում, օգտագործելով OpenShift Maven Plugin-ը

Մեր օրինակից հավելվածը 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-ն հեշտացնում Java ծրագրավորողի կյանքը Kubernetes-ի հետ աշխատելիս: Eclipse JKube-ի մասին լրացուցիչ տեղեկություններ կարելի է գտնել այստեղ նախագծի կայքը իսկ GitHub.

Source: www.habr.com

Добавить комментарий