Java lietojumprogrammu izstrāde Kubernetes, izmantojot Eclipse JKube

Pirms 25 gadiem Java ienāca galvenajā programmÄ“Å”anas virzienā un galu galā kļuva par vienu no galvenajiem elementiem, ap kuru tiek veidotas lietojumprogrammu kopas. Tomēr Å”odien daudzi cilvēki un organizācijas, kas ir bijuÅ”i uzticÄ«gi Java daudzus gadus, ir aizņemti ar migrāciju vai apsver migrÄ“Å”anu uz platformu. Kubernetes vai tā atvasinājumi, piemēram, Red Hat OpenShift vai Amazon EX.

Java lietojumprogrammu izstrāde Kubernetes, izmantojot Eclipse JKube

Diemžēl Kubernetes ir strauja mācÄ«Å”anās lÄ«kne, un tā izstrādes procesā ievieÅ” vēl vienu darbÄ«bas slāni, pie kura Java programmētāji ir pieraduÅ”i. Å odien mēs jums pateiksim, kā to izmantot Eclipse JKube, lai vienkārÅ”otu Ŕīs papildu darbÄ«bas, kas saistÄ«tas ar Kubernetes un konteineriem, un nodroÅ”inātu nesāpÄ«gu migrāciju uz mākoņa platformu, vienlaikus saglabājot pazÄ«stamo Java ekosistēmu. Turklāt mēs parādÄ«sim, kā OpenShift platformā izvietot Java lietojumprogrammas, izmantojot OpenShift Maven spraudni.

Tradicionālais Java izstrādes process

Tradicionālais attÄ«stÄ«bas process Java (1. attēls) ietver izstrādātāju koda rakstÄ«Å”anu, izvietoÅ”anas vienÄ«bu izveidi JAR vai WAR failu veidā un Å”o failu izvietoÅ”anu un palaiÅ”anu tÄ«mekļa vai lietojumprogrammu serverÄ«. Galvenais veids, kā to izdarÄ«t, ir izmantot Maven no komandrindas vai izmantot IDE, piemēram, IntelliJ vai Eclipse, lai kodētu un pakotētu lietojumprogrammas. Izstrādātāji ir pieraduÅ”i veikt koda izmaiņas un visu rÅ«pÄ«gi pārbaudÄ«t pirms koda izmantoÅ”anas un iesniegÅ”anas versiju kontrolei.

Java lietojumprogrammu izstrāde Kubernetes, izmantojot Eclipse JKube

Rīsi. 1. Tradicionālais Java izstrādes process.

Java izstrādes process mākoņam

Pārejot uz mākoņa aplikācijām, Kubernetes un Konteineri. Tāpēc tagad izstrādātājam ir jāiepako Java lietojumprogrammas konteineru attēli un izveidot Kubernetes manifestus, kas apraksta Å”os attēlus. Pēc tam Å”ie manifesti tiek lietoti ražoÅ”anas serverim, kurā darbojas Kubernetes. Savukārt Kubernetes ņem Å”os attēlus no reÄ£istra un izvieto lietojumprogrammas atbilstoÅ”i konfigurācijām, kuras esam ierakstÄ«juÅ”i manifestos, kas parasti ir YAML faili.

Tradicionālā Java izstrādes procesa metamorfoze pārejā uz mākoni ir parādīta attēlā. 2.

Java lietojumprogrammu izstrāde Kubernetes, izmantojot Eclipse JKube

Rīsi. 2. Java izstrādes process mākonim.

Eclipse JKube

MigrÄ“Å”ana uz Kubernetes pievieno izstrādes procesam vēl vienu darbÄ«bas slāni, un daudzi izstrādātāji par to ir satraukti, jo vēlas koncentrēties uz savu pamatdarbu ā€” lietojumprogrammu loÄ£iku ā€”, nevis uz to izvietoÅ”anu. Un Å”eit tas izpaužas. Eclipse JKube, kas ļauj izstrādātājiem izmantot savas bibliotēkas un spraudņus (JKube komplekts ar Kubernetes Maven spraudnis vai OpenShift Maven spraudnis), lai bez piepÅ«les veiktu ar konteineru un Kubernetes saistÄ«tas darbÄ«bas, ievērojot diagrammu attēlā. 2.

Pārējā Ŕī raksta daļā mēs parādÄ«sim, kā vienkārÅ”ot Java izstrādes procesu Kubernetes vidē, izmantojot Eclipse JKube ar Kubernetes Maven spraudni.

Mākoņu izstrādes process, izmantojot Eclipse JKube

ApskatÄ«sim nedaudz modificētu Java izstrādes shēmu mākoņam no 2. att., ievieÅ”ot tajā Eclipse JKube un Kubernetes Maven Plugin, kā parādÄ«ts attēlā. 3.

Java lietojumprogrammu izstrāde Kubernetes, izmantojot Eclipse JKube

Rīsi. 3. Java izstrādes process mākonim, izmantojot Eclipse JKube.

Kā redzam, Å”eit visas darbÄ«bas mijiedarbÄ«bai ar Kubernetes un konteineriem (diagrammā iezÄ«mētas sarkanā krāsā) tiek aizstātas ar noklusējuma Eclipse JKube mērÄ·a uzdevumiem, kas ir norādÄ«ti tabulā. 1.

Tabula 1. Eclipse JKube noklusējuma uzdevumi.

Uzdevums
Posms
Apraksts

k8s:build
PRE_INTEGRATION_TEST
Docker attēlu veidoÅ”ana

k8s:push
INSTALL
Docker attēlu augÅ”upielāde reÄ£istrā

k8s: resurss
PROCESS_RESOURCES
K8s manifestu ģenerēŔana

k8s: pieteikties
SASTĀDÄŖT
Ä¢enerēto manifestu lietoÅ”ana K8s

k8s: undeploy
NEDARBINĀT
K8s resursu noņemÅ”ana, kas tika izvietoti, izmantojot k8s:apply un k8s:deploy

PiezÄ«me: Ja nevēlaties, lai uzdevumos tiktu izmantoti Å”ie noklusētie iestatÄ«jumi, varat manuāli konfigurēt Eclipse JKube pats, jo tas atbalsta konfigurāciju, izmantojot XML Šø resursiem.

Tagad apskatīsim piemērus, kā izmantot Eclipse JKube un Kubernetes Maven Plugin, strādājot ar lietojumprogrammām.

Java lietojumprogrammas izvietoÅ”ana vietnē Kubernetes, izmantojot Eclipse JKube

Å ajā piemērā mēs izvietosim vienkārÅ”u Java lietojumprogrammu klasterÄ« Minikube izmantojot Eclipse JKube. Izmantojot Kubernetes Maven spraudni, mēs varam iestatÄ«t izvietoÅ”anas parametrus, nerakstot nekādas konfigurācijas.

Kā piemēru mēs izmantojam lietojumprogrammu vienkārÅ”s nejauÅ”o skaitļu Ä£enerators, kas rada JSON izvadi /random galapunktā:

~/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. darbÄ«ba. Lejupielādējiet spraudni Kubernetes Maven

Kubernetes Maven spraudnis atrodas repozitorijā Maven centrālā krātuve. Lai izmantotu Eclipse JKube, failam pom.xml ir jāpievieno spraudnis Kubernetes Maven kā atkarība:

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

Ja tÄ«ras Kubernetes vietā tiek izmantots OpenShift, pom.xml tiek modificēts Ŕādi:

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

2. darbÄ«ba. Izveidojiet dokstacijas attēlu

Lietojumprogrammas JAR failu var izveidot, izmantojot komandu mvn pakotne, un pēc tam mvn mērÄ·a uzdevumu k8s:build var izmantot, lai izveidotu lietojumprogrammas docker attēlu. Ņemiet vērā, ka esam ignorējuÅ”i noklusējuma attēla nosaukumu ar Å”o rekvizÄ«tu:

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

Pirms attēla izveides jums jāpārliecinās, vai docker dēmons ir pareizi eksponēts. To var izdarÄ«t ar Ŕādu komandu:

$ eval $(minikube docker-env)

Pēc tam ievadām komandu mvn k8s:build, un tas ir tas, ko mēs redzēsim ekrānā, veidojot docker attēlu, izmantojot Eclipse JKube veidoÅ”anas uzdevumu:

~/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. darbÄ«ba. AugÅ”upielādējiet attēlu docker reÄ£istrā

Kad esam izveidojuÅ”i docker attēlu ar konfigurētu push reÄ£istru (mÅ«su gadÄ«jumā tas ir docker.io), mēs varam nosÅ«tÄ«t Å”o attēlu uz reÄ£istru. Tas tiks parādÄ«ts pēc tam, kad lÅ«gsim Eclipse JKube veikt mvn k8s:push push uzdevumu:

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

Pēc attēla nosÅ«tÄ«Å”anas jums jāpārbauda, ā€‹ā€‹vai tas ir iekļauts reÄ£istrā. MÅ«su gadÄ«jumā mēs to vienkārÅ”i redzam Docker Hub, kā parādÄ«ts attēlā. 4.

Java lietojumprogrammu izstrāde Kubernetes, izmantojot Eclipse JKube

Rīsi. 4. Reģistram nosūtītais attēls parādījās Docker Hub.

4. darbība. Ģenerējiet lietojumprogrammai Kubernetes resursu manifestus

Tātad, esam savākuÅ”i lietojumprogrammas attēlu, tagad mums jāraksta Kubernetes manifesti. Lai to izdarÄ«tu, Eclipse JKube ir uzdevums, kas Ä£enerē stingrus resursu manifestus, pamatojoties uz pamatā esoÅ”o Java ietvaru (Pavasara zābaks, Kvarkuss, Vert.x vai kādu citu). Varat arÄ« pielāgot manifestu, izmantojot XML konfigurācijas failu un ievietojot neapstrādātus fragmentus (vajadzÄ«gā resursa manifesta fragmentus) lietojumprogrammas mapē src/main/jkube. Šādā gadÄ«jumā jÅ«su konfigurācija tiks augÅ”upielādēta Ä£enerētajos manifestos.

MÅ«su piemērā mēs atstājam visu, kā tas ir, un tāpēc Eclipse JKube Ä£enerē manifestu noklusējuma izvietoÅ”anai un pakalpojumam ar tipu ClusterIP. Un tikai pēc tam mēs modificējam pakalpojuma manifestu, lai mainÄ«tu pakalpojuma veidu uz NodePort. Varat ignorēt noklusējuma darbÄ«bu, izmantojot Ŕādu rekvizÄ«tu:

<jkube.enricher.jkube-service.type>NodePort</jkube.enricher.jkube-service.type>

Šādi izskatās ekrāna izvade pēc tam, kad mēs lūdzam Eclipse JKube veikt mvn k8s:resursu resursu uzdevumu.

~/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. darbība. Izvietojiet lietojumprogrammu Kubernetes klasterī

Tagad mēs esam gatavi lietojumprogrammas izvietoÅ”anai: esam Ä£enerējuÅ”i tās attēlu un pēc tam automātiski Ä£enerējuÅ”i resursu manifestus. Tagad atliek tikai to visu piemērot Kubernetes klasterim. Lai izvietotu lietojumprogrammu, jÅ«s, protams, varat izmantot komandu kubectl apply -f, taču spraudnis to var izdarÄ«t mÅ«su vietā. Tas tiks parādÄ«ts ekrānā pēc tam, kad lÅ«gsim Eclipse JKube izpildÄ«t mvn k8s:apply lietot uzdevumu:

~/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. darbība. Atceliet lietojumprogrammu izvietoŔanu no Kubernetes klastera

Lai to izdarÄ«tu, tiek izmantots izvērÅ”anas atcelÅ”anas uzdevums, kas vienkārÅ”i noņem visus resursus, kas tika lietoti iepriekŔējā darbÄ«bā, tas ir, kad tiek izpildÄ«ts piemēroÅ”anas uzdevums. Tas ir tas, ko mēs redzēsim ekrānā pēc tam, kad lÅ«gsim Eclipse JKube veikt mvn k8s:undeploy undeploy uzdevumu:

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

Ko vēl jūs varat darīt ar Eclipse JKube

Tātad, mēs apskatÄ«jām Eclipse JKube un Kubernetes Maven Plugin galvenos mērÄ·us, kas atvieglo Java lietojumprogrammu izstrādi Kubernetes platformai. Ja nevēlaties pastāvÄ«gi ievadÄ«t Å”os uzdevumus no tastatÅ«ras, varat tos ierakstÄ«t spraudņa konfigurācijā, piemēram, Ŕādi:

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

Jāsaka, ka Å”ajā rakstā mēs neesam apskatÄ«juÅ”i visus mērÄ·a uzdevumus, kas ir Eclipse JKube un Kubernetes Maven Plugin, tāpēc 2. tabulā sniedzam sarakstu ar papildu uzdevumiem, kas var noderēt arÄ« jums.

Tabula 2. Papildu Eclipse JKube mērķa uzdevumi.

Uzdevums
Posms
Apraksts

k8s:log
APSTIPRINĀT
Žurnālu saņemÅ”ana no lietojumprogrammas, kas darbojas Kubernetes.

k8s: atkļūdoŔana
LIETOÅ ANAS
Atveriet atkļūdoÅ”anas portu, lai varētu atkļūdot lietojumprogrammu, kas darbojas Kubernetes tieÅ”i no IDE.

k8s:deploy
INSTALL
InstalÄ“Å”anas uzdevuma dakÅ”as izveide un Ä£enerēto manifestu lietoÅ”ana Kubernetes klasterim tāpat kā pielietoÅ”anas uzdevuma gadÄ«jumā.

k8s: skatīties
LIETOÅ ANAS
Lietojumprogrammas automātiska karstā izvietoŔana, izsekojot tās nosaukumvietu.

Java lietojumprogrammu izvietoŔana Red Hat OpenShift, izmantojot OpenShift Maven spraudni

Lai izvietotu lietojumprogrammu no mÅ«su piemēra Red Hat OpenShift platformā, mēs izmantojam spraudni OpenShift Maven. VienÄ«gā atŔķirÄ«ba bÅ«s tāda, ka uzdevuma prefikss mainÄ«sies no k8s uz oc. Pēc noklusējuma spraudnis Kubernetes Maven to dara dokers-assemblies un OpenShift Maven spraudnis - montāžas S2I. Mēs neveicam nekādas izmaiņas mÅ«su projektā, izņemot rekvizÄ«ta jkube.generator.name noņemÅ”anu, jo tas nav nepiecieÅ”ams, pārejot uz reÄ£istru (OpenShift ievieto attēlu savā iekŔējā reÄ£istrā veidoÅ”anas fāzes laikā). Un tas parādÄ«sies ekrānā, kad izpildÄ«sim mÅ«su piemēru, kurā, starp citu, mēs veicam mērÄ·a uzdevumus nevis pa vienam, bet gan visus uzreiz:

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

Video nodarbība

Lai uzzinātu vairāk par to, kā atvieglot Kubernetes izstrādi, izmantojot Eclipse JKube, noskatieties Ŕo video pamācību par to, kā Minikube ātri izvietot vienkārŔu Spring Boot lietojumprogrammu:

Secinājums

Å ajā rakstā mēs parādÄ«jām, kā Eclipse JKube atvieglo Java izstrādātāja dzÄ«vi, strādājot ar Kubernetes. PlaŔāku informāciju par Eclipse JKube var atrast vietnē projekta vietne un GitHub.

Avots: www.habr.com

Pievieno komentāru