Java lietojumprogrammu izstrāde Kubernetes, izmantojot Eclipse JKube

Pirms 25 gadiem Java ieguva plašu programmētāju auditoriju, kļūstot par vienu no balstiem, ap kuriem veidojas lietojumprogrammu steki. Tomēr šodien daudzi cilvēki un organizācijas, kas daudzus gadus ir bijuši uzticīgi Java, ir aizņemti ar pāreju uz platformu Kubernetes vai tās atvasinājumiem, piemēram, Red Hat OpenShift vai Amazon EKS.

Java lietojumprogrammu izstrāde Kubernetes, izmantojot Eclipse JKube

Diemžēl Kubernetes atšķiras ar strauju mācību līkni un ievieš vēl vienu operāciju līmeni ierastajā Java programmētājiem izstrādes procesā. Šodien mēs pastāstīsim, kā izmantot Eclipse JKube, lai vienkāršotu papildu darbības, kas saistītas ar Kubernetes un konteineriem, kā arī nodrošinātu nesāpīgu migrāciju uz mākoņplatformu, saglabājot ierasto Java ekosistēmu. Turklāt mēs parādīsim, kā izvietot Java lietojumprogrammas OpenShift platformā, izmantojot OpenShift Maven spraudni.

Tradicionālais Java izstrādes process

Tradicionālais izstrādes process Java (Att. 1) paredz, ka izstrādātājs raksta kodu, pēc tam izveido izvēršanas vienības kā JAR vai WAR failus un galu galā izvieto un palaiž šos failus tīmekļa serverī vai lietojumserverī. Galvenokārt tam tiek izmantots Maven no komandrindas vai tiek izmantots IDE, piemēram, IntelliJ vai Eclipse, lai kodētu un iepakotu lietojumprogrammas. Izstrādātāji ir pieraduši veikt izmaiņas kodā un rūpīgi testēt visu, pirms nosaka kodu un nosūta to uz versiju kontroles sistēmu.

Java lietojumprogrammu izstrāde Kubernetes, izmantojot Eclipse JKube

Att. 1. Tradicionālais Java izstrādes process.

Java izstrādes process mākoņiem

Pārejot uz mākoņu lietojumprogrammām, iepriekš aprakstītajai shēmai pievienojas Kubernetes un konteineri. Tādēļ izstrādātājam tagad jāiepako Java lietojumprogrammas konteineru attēlos un jāsagatavo Kubernetes manifesti, kas apraksta šos attēlus. Pēc tam šie manifesti tiek piemēroti produkcijas serverim, uz kura darbojas Kubernetes. Savukārt Kubernetes iegūst šos attēlus no reģistra un izvieto lietojumprogrammas saskaņā ar tām konfigurācijām, kuras mēs esam noteikuši manifestos, kas parasti ir YAML faili.

Tradicionālā Java izstrādes procesa metamorfose pārejot uz mākoņiem ir parādīta Att. 2.

Java lietojumprogrammu izstrāde Kubernetes, izmantojot Eclipse JKube

Att. 2. Java izstrādes process mākoņiem.

Eclipse JKube

Pāreja uz Kubernetes pievieno vēl vienu operatīvo slāni izstrādes procesam, un daudzi izstrādātāji ir satraukti, jo viņi vēlas nodarboties ar savu galveno darbu – lietojumprogrammu loģiku, nevis to, kā tās izvietot. Un šeit spēlē iejaucas Eclipse JKube, kas ļauj izstrādātājiem izmantot savas bibliotēkas un spraudņus (JKube Kit kopā ar Kubernetes Maven Plugin vai OpenShift Maven Plugin), lai bez liekām pūlēm veiktu operācijas, kas saistītas ar konteineriem un Kubernetes, sekojot shēmai uz Att. 2.

Atlikušajā šī raksta daļā mēs parādīsim, kā atvieglot Java izstrādes procesu Kubernetes vidē, izmantojot Eclipse JKube ar Kubernetes Maven Plugin.

Izstrādes process mākonim, izmantojot Eclipse JKube

Apskatīsim nedaudz modificētu Java izstrādes shēmu mākonī ar Att. 2, ieviešot tajā Eclipse JKube un Kubernetes Maven Plugin, kā parādīts uz Att. 3.

Java lietojumprogrammu izstrāde Kubernetes, izmantojot Eclipse JKube

Att. 3. Java izstrādes process mākonim, izmantojot Eclipse JKube.

Kā redzam, šeit visas operācijas, kas saistītas ar mijiedarbību ar Kubernetes un konteineriem (shēmā izcelts sarkanā krāsā), tiek aizstātas ar Eclipse JKube noklusējuma uzdevumiem, kas uzskaitī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 nosūtīšana reģistrā

k8s:resource
PROCESS_RESOURCES
K8s manifestu ģenerēšana

k8s:apply
COMPILE
Izmainīto manifestu piemērošana K8s

k8s:undeploy
UNDEPLOY
K8s resursu dzēšana, kas tika izvietoti ar k8s:apply un k8s:deploy

Piezīme: Ja nevēlaties, lai uzdevumi izmantotu šos stingros noklusējumus (opinionated defaults), varat manuāli pielāgot Eclipse JKube savām vajadzībām, jo tas atbalsta konfigurēšanu caur XML un resursiem.

Tagad aplūkosim piemērus par Eclipse JKube un Kubernetes Maven Plugin izmantošanu, strādājot ar lietojumprogrammām.

Izvietojam Java lietojumprogrammu Kubernetes vidē, izmantojot Eclipse JKube

Šajā piemērā mēs izvietosim vienkāršu Java lietojumprogrammu klasterī Minikube izmantojot Eclipse JKube. Izmantojot Kubernetes Maven Plugin, mums ir iespēja noteikt izvietošanas parametrus, neizrakstot nekādu konfigurāciju.

Kā lietojumprogrammas piemēru mēs izmantosim vienkāršu nejaušu skaitļu ģeneratoru, kas ģenerē JSON-izeju uz galapunktu /random:

~\/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. Solis kubernetes Maven plugin

Kubernetes Maven plugin atrodas repozitorijā Maven Central Repository. Lai izmantotu Eclipse JKube, jāpievieno Kubernetes Maven plugin savam pom.xml kā atkarību:

org.eclipse.jkube
     kubernetes-maven-plugin
     ${jkube.version}

Ja tiek izmantots OpenShift, nevis tīrs Kubernetes, tad pom.xml modificē šādi:

org.eclipse.jkube
     openshift-maven-plugin
     ${jkube.version}

2. Veidojam docker attēlu

Lai izveidotu lietojumprogrammas JAR failu, var izmantot komandu mvn package, pēc tam varat izmantot mērķa uzdevumu mvn k8s:build, lai izveidotu šīs lietojumprogrammas docker attēlu. Ņemiet vērā, ka mēs pārrakstījām noklusējuma attēla nosaukumu, izmantojot šo īpašību:

docker.io/rohankanojia/random-generator:${project.version}

Pirms attēla izveidošanas jāpārliecinās, ka docker demons ir pareizi ekspozīts. To var izdarīt ar sekojošo komandu:

$ eval $(minikube docker-env)

Pēc tam ievadām komandu mvn k8s:build, un šādi izskatīsies ekrāna izvadīšana, veidojot docker attēlu ar Eclipse JKube build uzdevumu:

~ /work/repos/eclipse-jkube-demo-project : $ mvn k8s:build
[INFO] Projektu skenēšana...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Izveido random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] k8s: Darbojas Kubernetes režīmā
[INFO] k8s: Veido Docker attēlu Kubernetes režīmā
[INFO] k8s: Darbojas ģenerators spring-boot
[INFO] k8s: spring-boot: Izmanto Docker attēlu quay.io/jkube/jkube-java-binary-s2i:0.0.7 kā pamatu / būvētāju
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Izveidots docker-build.tar 251 milisekundēs
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Izveidots attēls sha256:a20e5
[INFO] ------------------------------------------------------------------------
[INFO] BŪVĒŠANA VEIKSMĪGA
[INFO] ------------------------------------------------------------------------
[INFO] Kopējais laiks: 5.053 s
[INFO] Beigts: 2020-08-10T11:28:23+05:30
[INFO] ------------------------------------------------------------------------
~ /work/repos/eclipse-jkube-demo-project : $

3. Nosūtām attēlu uz docker reģistru

Pēc tam, kad esam izveidojuši docker attēlu, pie iespējota push reģistra (mūsu gadījumā tas ir docker.io), varam nosūtīt šo attēlu reģistram. Šādi izskatīsies ekrāna izvade, kad lūgsim Eclipse JKube izpildīt push uzdevumu mvn k8s:push:

~\/darba\/repos\/eclipse-jkube-demo-projekts : $ mvn k8s:push
[INFO] Projekta skenēšana...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Izveido random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:push (default-cli) @ random-generator ---
[INFO] k8s: Darbojas Kubernetes režīmā
[INFO] k8s: Izveido Docker attēlu Kubernetes režīmā
[INFO] k8s: Izpilda ģeneratoru spring-boot
[INFO] k8s: spring-boot: Izmanto Docker attēlu quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 kā pamatu \/ veidotāju
[INFO] k8s: Izstrādātais attēls atsaucas uz repozitoriju [docker.io\/rohankanojia\/random-generator]
5dcd9556710f: Slānis jau pastāv 
b7139ad07aa8: Slānis jau pastāv 
b6f081e4b2b6: Slānis jau pastāv 
d8e1f35641ac: Slānis jau pastāv 
[INFO] k8s: 0.0.1: kopsavilkums: sha256:9f9eda2a13b8cab1d2c9e474248500145fc09e2922fe3735692f9bda4c76002d izmērs: 1162
[INFO] k8s: Pārsūtīts docker.io\/rohankanojia\/random-generator:0.0.1 7 sekunžu laikā 
[INFO] ------------------------------------------------------------------------
[INFO] VEIDOŠANA VEIKSMĪGA
[INFO] ------------------------------------------------------------------------
[INFO] Kopējais laiks:  11.222 s
[INFO] Pabeigts: 2020-08-10T11:35:37+05:30
[INFO] ------------------------------------------------------------------------
~\/darba\/repos\/eclipse-jkube-demo-projekts : $ 

Pēc attēla nosūtīšanas ir 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 4. attēlā.

Java lietojumprogrammu izstrāde Kubernetes, izmantojot Eclipse JKube

Attēls 4. Nosūtītais attēls reģistrā parādījās Docker Hub.

Soli 4. Ģenerējam Kubernetes resursu manifestus lietojumprogrammām

Tātad, mēs esam izveidojuši lietojumprogrammas attēlu, tagad ir jāraksta Kubernetes manifesti. Tam Eclipse JKube ir uzdevums, kas ģenerē stingrus resursu manifestus, pamatojoties uz apakšējo Java ietvaru (Spring Boot, Quarkus, Vert.x vai kādu citu). Tāpat varat konfigurēt manifestu, izmantojot konfigurācijas XML failu un ievietojot raw fragmentus (nepieciešamo resursu manifestu fragmentus) lietojumprogrammas src\/main\/jkube mapē. Šādā gadījumā jūsu konfigurācija tiks iekļauta ģenerētajos manifestos.

Mūsu piemērā mēs atstājam visu kā ir, un tāpēc Eclipse JKube ģenerē manifestu noklusējuma ieviešanai un pakalpojumam ar ClusterIP tipu. Un pēc tam mēs modificējam pakalpojuma manifestu, lai mainītu pakalpojuma tipu uz NodePort. Noklusējuma uzvedību var pārpārrakstīt, izmantojot šādu rekvizītu:

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

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

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:resource
[INFO] Skenē projektiem...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Veido random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:resource (default-cli) @ random-generator ---
[INFO] k8s: Palaiž ģeneratoru spring-boot
[INFO] k8s: spring-boot: Izmanto Docker attēlu quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 kā pamatu \/ būvētāju
[INFO] k8s: jkube-controller: Pievieno noklusējuma izvietojumu
[INFO] k8s: jkube-service: Pievieno noklusējuma pakalpojumu 'random-generator' ar portiem [8080]
[INFO] k8s: jkube-healthcheck-spring-boot: Pievieno gatavības pārbaudi uz porta 8080, ceļš='\/actuator\/health', shēma='HTTP', sākotnējais aizkavējums 10 sekundes
[INFO] k8s: jkube-healthcheck-spring-boot: Pievieno dzīvotspējas pārbaudi uz porta 8080, ceļš='\/actuator\/health', shēma='HTTP', sākotnējais aizkavējums 180 sekundes
[INFO] k8s: jkube-revision-history: Pievieno revīzijas vēstures ierobežojumu līdz 2
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Kopējais laiks:  3.344 s
[INFO] Pabeigts: 2020-08-10T11:38:11+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ ls target\/classes\/META-INF\/jkube\/kubernetes
random-generator-deployment.yml  random-generator-service.yml
~\/work\/repos\/eclipse-jkube-demo-project : $ cat target\/classes\/META-INF\/jkube\/kubernetes\/random-generator-deployment.yml | head -n10
---
apiVersion: apps\/v1
kind: Deployment
metadata:
  annotations:
    jkube.io\/git-url: git@github.com:rohanKanojia\/eclipse-jkube-demo-project.git
    jkube.io\/git-commit: 1ef9ef2ef7a6fcbf8eb64c293f26f9c42d026512
    jkube.io\/git-branch: master
    jkube.io\/scm-url: https:\/\/github.com\/spring-projects\/spring-boot\/spring-boot-starter-parent\/random-generator
    jkube.io\/scm-tag: HEAD
~\/work\/repos\/eclipse-jkube-demo-project : $

Sol 5. Ieviešam lietojumprogrammu Kubernetes klasterī

Tātad, tagad viss ir gatavs, lai veiktu lietojumprogrammas izvietošanu: mēs esam ģenerējuši tās attēlu un pēc tam automātiski ģenerējuši resursu manifestus. Tagad atliek tikai pielietot visu to Kubernetes klasterī. Lietojumprogrammas izvietošanai, protams, var izmantot komandu kubectl apply -f, bet spraudnis to var izdarīt mūsu vietā. Lūk, kas tiks parādīts ekrānā pēc tam, kad lūgsim Eclipse JKube veikt apply uzdevumu mvn k8s:apply:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:apply
[INFO] Tiek veikta projektu skenēšana...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Izveido random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] k8s: Izmanto Kubernetes adresi https:\/\/192.168.39.145:8443\/ pēc noklusējuma telpas ar manifestu \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/classes\/META-INF\/jkube\/kubernetes.yml 
[INFO] k8s: Izmanto telpu: default
[INFO] k8s: Izveido pakalpojumu no kubernetes.yml telpā default nosaukums random-generator
[INFO] k8s: Izveidots pakalpojums: target\/jkube\/applyJson\/default\/service-random-generator.json
[INFO] k8s: Izveido papildinājumu no kubernetes.yml telpā default nosaukums random-generator
[INFO] k8s: Izveidots papildinājums: target\/jkube\/applyJson\/default\/deployment-random-generator.json
[INFO] k8s: IETEIKUMS: Izmantojiet komandu `kubectl get pods -w`, lai sekotu, kā jūsu podi sāk darboties
[INFO] ------------------------------------------------------------------------
[INFO] IZBŪVE SEKME
[INFO] ------------------------------------------------------------------------
[INFO] Kopējais laiks:  7.306 s
[INFO] Pabeigts: 2020-08-10T11:40:57+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ kubectl get pods -w
NOSAUKUMS                                             GATAVS   STATUSS           ATJAUNOJUMI   VECUMS
random-generator-58b7847d7f-9m9df                    0\/1     Darbojas           0          7s
random-generator-58b7847d7f-9m9df                    1\/1     Darbojas           0          17s
^C~\/work\/repos\/eclipse-jkube-demo-project : $ kubectl get svc
NOSAUKUMS                               TIPS        KLIENDA-IP        EKSTERNĀS-IP   PORT(S)           VECUMS
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 .
  % Kopējais    % Saņemts % Pārnests  Vidējs ātrums   Laiks    Laiks     Laiks  Pašreizējais
                                 Lejupielādēt  Augšupielādēt   Kopā   Pavadīts    Kreiss  Ātrums
100    45    0    45    0     0   1800      0 --:--:-- --:--:-- --:--:--  1875
{
  "id": "42e5571f-a20f-44b3-8184-370356581d10"
}

6. solis. Veicam undeploy aplikācijas no Kubernetes klastera

Šim tiek izmantota undeploy uzdevums, kas vienkārši dzēš visus resursus, kas tika piemēroti iepriekšējā solī, proti, kad tika izpildīts apply uzdevums. Šādi izskatīsies ekrāns pēc tam, kad lūgsim Eclipse JKube izpildīt undeploy uzdevumu mvn k8s: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               443\/TCP          18d
service\/random-generator   NodePort    10.97.172.147           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] ---------------------------------------------
[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            443\/TCP   18d
~\/work\/repos\/eclipse-jkube-demo-project : $

Ko vēl var izdarīt ar Eclipse JKube

Tātad, mēs apskatījām galvenās mērķu uzdevumu Eclipse JKube un Kubernetes Maven Plugin, kas atvieglo Java lietojumprogrammu izstrādi Kubernetes platformā. Ja jums negribas nemitīgi ievadīt šos uzdevumus ar taustiņiem, tos varat ierakstīt pie plūgēna konfigurācijas, piemēram, šādi:

org.eclipse.jkube
     kubernetes-maven-plugin
     ${project.version}
     
         
             
                  build
                  resource
                  apply

Jāteic, ka šajā rakstā mēs aplūkojām tālu ne visus mērķu uzdevumus, kas ir pieejami Eclipse JKube un Kubernetes Maven Plugin, tādēļ sniedzam 2. tabulā papildu uzdevumu sarakstu, kas jums var noderēt.

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

Uzdevums
Posms
Apraksts

k8s:log
VALIDATE
Pieteikuma žurnālu iegūšana, kas darbojas Kubernetes.

k8s:debug
PACKAGE
Atveriet debuggers portu, lai veiktu lietojumprogrammas, kas darbojas Kubernetes, atkļūdošanu tieši no IDE.

k8s:deploy
INSTALL
Izveidojiet forku Install-uzdevumam un lietojiet ģenerētos manifestus klasterī Kubernetes tieši tāpat kā ar apply-uzdevumu.

k8s:watch
PACKAGE
Automātiska karstā izvietošana, izsekojot lietojumprogrammas namespaces.

Java lietojumprogrammu izvietošana Red Hat OpenShift, izmantojot OpenShift Maven Plugin

Lai izvietotu lietojumprogrammu no mūsu piemēra Red Hat OpenShift platformā, izmantojam spraudni OpenShift Maven. Vienīgā atšķirība būs tā, ka uzdevumu prefikss mainīsies no k8s uz oc. Pēc noklusējuma Kubernetes Maven plugina veic docker-būves, savukārt OpenShift Maven spraudnis – būves S2I. Mēs neizdarām izmaiņas mūsu projektā, izņemot jēdziena jkube.generator.name dzēšanu, jo tas nav nepieciešams, kad nosūtīsim uz reģistru (OpenShift posmā izvieto attēlu savā iekšējā reģistrā). Un šeit ir tas, kas parādīsies ekrānā, kad mēs palaidīsim mūsu piemēru, kur, starp citu, mēs veicam goal-uzdevumus ne pa vienam, bet visus uzreiz:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn oc:build oc:resource oc:apply
[INFO] Skenē projekti...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Veido random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] oc: Izmanto OpenShift veidošanu ar stratēģiju S2I
[INFO] oc: Darbojas OpenShift režīmā
[INFO] oc: Izmanto ģeneratoru spring-boot
[INFO] oc: spring-boot: Izmanto Docker attēlu quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 kā bāzes \/ veidotāju
[INFO] oc: [random-generator:0.0.1] "spring-boot": Izveidots Docker avota tar \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/docker\/random-generator\/0.0.1\/tmp\/docker-build.tar
[INFO] oc: Pievienojot noslēpumu pullsecret-jkube
[INFO] oc: Izmanto noslēpumu pullsecret-jkube
[INFO] oc: Izveido BuildServiceConfig random-generator-s2i avota veidošanai
[INFO] oc: Izveido ImageStream random-generator
[INFO] oc: Uzsāk Build random-generator-s2i
[INFO] oc: Gaida, kad veidošana random-generator-s2i-1 pabeigsies...
[INFO] oc: Kešēšanas blobs zem "\/var\/cache\/blobs".
[INFO] oc: Saņemot attēla avota parakstus
[INFO] oc: Kopējot blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Kopējot blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Kopējot blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Kopējot konfigurāciju sha256:52d6788fcfdd39595264d34a3959464a5dabc1d4ef0ae188802b20fc2d6a857b
[INFO] oc: Rakstot manifestu attēla galamērķī
[INFO] oc: Uzglabājot parakstus
[INFO] oc: Radīšana dockerfile ar veidotāja attēlu quay.io\/jkube\/jkube-java-binary-s2i:0.0.7
[INFO] oc: SOLIS 1: NO quay.io\/jkube\/jkube-java-binary-s2i:0.0.7
[INFO] oc: SOLIS 2: ETIKETE "io.openshift.build.source-location"="\/tmp\/build\/inputs"       "io.openshift.build.image"="quay.io\/jkube\/jkube-java-binary-s2i:0.0.7"
[INFO] oc: SOLIS 3: ENV JAVA_APP_DIR="\/deployments"     OPENSHIFT_BUILD_NAME="random-generator-s2i-1"     OPENSHIFT_BUILD_NAMESPACE="default"
[INFO] oc: SOLIS 4: LIETOTĀJS root
[INFO] oc: SOLIS 5: KOPĒT upload\/src \/tmp\/src
[INFO] oc: SOLIS 6: IZPILDĪT chown -R 1000:0 \/tmp\/src
[INFO] oc: SOLIS 7: LIETOTĀJS 1000
[INFO] oc: SOLIS 8: IZPILDĪT \/usr\/local\/s2i\/assemble
[INFO] oc: INFO S2I avota veidošana ar parastajiem bināriem konstatēta
[INFO] oc: INFO S2I binārā veidošana no fabric8-maven-plugin konstatēta
[INFO] oc: INFO Kopējot bināros no \/tmp\/src\/deployments uz \/deployments ...
[INFO] oc: random-generator-0.0.1.jar
[INFO] oc: INFO Kopējot izvietojumus no deployments uz \/deployments...
[INFO] oc: '\/tmp\/src\/deployments\/random-generator-0.0.1.jar' -> '\/deployments\/random-generator-0.0.1.jar'
[INFO] oc: SOLIS 9: CMD \/usr\/local\/s2i\/run
[INFO] oc: SOLIS 10: KOMITĒT temp.builder.openshift.io\/default\/random-generator-s2i-1:48795e41
[INFO] oc: time="2020-08-10T06:37:49Z" level=info msg="Attēla operētājsistēmas nesakritība: attēls izmanto "", gaidot "linux""
[INFO] oc: time="2020-08-10T06:37:49Z" level=info msg="Attēla arhitektūras nesakritība: attēls izmanto "", gaidot "amd64""
[INFO] oc: Saņemot attēla avota parakstus
[INFO] oc: Kopējot blob sha256:d8e1f35641acb80b562f70cf49911341dfbe8c86f4d522b18efbf3732aa74223
[INFO] oc: Kopējot blob sha256:b6f081e4b2b6de8be4b1dec132043d14c121e968384dd624fb69c2c07b482edb
[INFO] oc: Kopējot blob sha256:b7139ad07aa8ce4ed5a132f7c5cc9f1de0f5099b5e155027a23d57f7fbe78b16
[INFO] oc: Kopējot blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Kopējot konfigurāciju sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Rakstot manifestu attēla galamērķī
[INFO] oc: Uzglabājot parakstus
[INFO] oc: --> 27aaadaf28e
[INFO] oc: 27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Saņemot attēla avota parakstus
[INFO] oc: 
[INFO] oc: Sūtot attēlu image-registry.openshift-image-registry.svc:5000\/default\/random-generator:0.0.1 ...
[INFO] oc: Kopējot blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Kopējot blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Kopējot blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Kopējot blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Kopējot konfigurāciju sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Rakstot manifestu attēla galamērķī
[INFO] oc: Uzglabājot parakstus
[INFO] oc: Sekmīga attēla sūtīšana uz image-registry.openshift-image-registry.svc:5000\/default\/random-generator@sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: Sūtīšana veiksmīga
[INFO] oc: Veidošanas random-generator-s2i-1 statuss Pabeigts
[INFO] oc: Atrasts tag ImageStream random-generator tag: sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: ImageStream random-generator uzrakstīts uz \/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: Izmanto docker attēla nosaukumu noslēpumā: default
[INFO] oc: Darbojas ģenerators spring-boot
[INFO] oc: spring-boot: Izmanto Docker attēlu quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 kā bāzes \/ veidotāju
[INFO] oc: jkube-controller: Pievieno noklusējuma DeploymentConfig
[INFO] oc: jkube-service: Pievieno noklusējuma servisu 'random-generator' ar portiem [8080]
[INFO] oc: jkube-healthcheck-spring-boot: Pievieno gatavības pārbaudi uz porta 8080, ceļš='\/actuator\/health', shēma='HTTP', ar sākotnēju aizkavi 10 sekundes
[INFO] oc: jkube-healthcheck-spring-boot: Pievieno dzīvības pārbaudi uz porta 8080, ceļš='\/actuator\/health', shēma='HTTP', ar sākotnēju aizkavi 180 sekundes
[INFO] oc: jkube-revision-history: Pievieno revīzijas vēstures ierobežojumu uz 2
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] oc: Izmanto OpenShift adresē https:\/\/api.crc.testing:6443\/ noslēpuma default ar manifestu \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/classes\/META-INF\/jkube\/openshift.yml 
[INFO] oc: Atklāta OpenShift platforma
[INFO] oc: Izmanto projektu: default
[INFO] oc: Izveido Servisu no openshift.yml noslēpumā default nosaukums random-generator
[INFO] oc: Izveidots serviss: target\/jkube\/applyJson\/default\/service-random-generator.json
[INFO] oc: Izveido DeploymentConfig no openshift.yml noslēpumā default nosaukums random-generator
[INFO] oc: Izveidots DeploymentConfig: target\/jkube\/applyJson\/default\/deploymentconfig-random-generator.json
[INFO] oc: Izveido Maršrutu default:random-generator hosts: null
[INFO] oc: IETEIKUMS: Izmantojiet komandu `oc get pods -w`, lai skatītu jūsu podu palaišanu
[INFO] ------------------------------------------------------------------------
[INFO] VEIDOŠANA VEIKSMĪGA
[INFO] ------------------------------------------------------------------------
[INFO] Kopējais laiks:  01:07 min
[INFO] Pabeigts: 2020-08-10T12:08:00+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ oc get pods -w
NOSAUKUMS                           GATAVS     STATUSS      ATJAUNOJUMI   VECUMS
random-generator-1-deploy      1\/1       Darbojas     0          14s
random-generator-1-vnrm9       0\/1       Darbojas     0          11s
random-generator-s2i-1-build   0\/1       Pabeigts   0          1m
random-generator-1-vnrm9   1\/1       Darbojas   0         24s
random-generator-1-deploy   0\/1       Pabeigts   0         28s
~\/work\/repos\/eclipse-jkube-demo-project : $ oc get routes
NOSAUKUMS                HOST\/PORT                                    CEĻŠ      SERVISI            PORTS      TERMINĀCIJA   SAVILKUMS
random-generator    random-generator-default.apps-crc.testing              random-generator    8080                    Nav
~\/work\/repos\/eclipse-jkube-demo-project : $ curl random-generator-default.apps-crc.testing\/random 
  % Kopējais    % Saņemts % Pārsūtījis  Vidējā ātrums   Laiks    Laiks     Laiks  Pašreizējais
                                 Dload  Augšup   Kopā   Iztērēts  Atlikums  Ātrums
100    45    0    45    0     0   1666      0 --:--:-- --:--:-- --:--:--  1730
{
  "id": "d80052d9-2f92-43cb-b9eb-d7cffb879798"
}
~\/work\/repos\/eclipse-jkube-demo-project : $

Video pamācība

Lai uzzinātu vairāk par to, kā vienkāršot Kubernetes izstrādi, izmantojot Eclipse JKube, skatieties video pamācību par ātru vienkārša Spring Boot lietojuma izvietošanu Minikube:

Atskaņot video

Secinājums

Šajā rakstā mēs parādījām, kā Eclipse JKube atvieglo dzīvi Java izstrādātājam, strādājot ar Kubernetes. Papildu informāciju par Eclipse JKube var atrast projekta vietne un uz GitHub.

Avots: habr.com

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster