Razvoj Java aplikacija za Kubernetes koristeći Eclipse JKube

Prije 25 godina Java je započela svoje široko putovanje prema programerima i na kraju postala jedna od osnovnih tehnologija oko kojih se grade aplikacijski setovi. Međutim, danas mnogi ljudi i organizacije, koji su dugo godina bili vjerni Javi, prebacuju se ili razmišljaju o prelasku na platformu Kubernetes ili njenih derivata, poput Red Hat OpenShift ili Amazon EKS.

Razvoj Java aplikacija za Kubernetes koristeći Eclipse JKube

Nažalost, Kubernetes ima strmu krivulju učenja i uvodi još jednu operativnu razinu u poznati proces razvoja za Java programere. Danas ćemo pokazati kako koristiti Eclipse JKube, kako bismo pojednostavili ove dodatne operacije vezane uz Kubernetes i kontejnere, kao i omogućili bezbolnu migraciju na oblačnu platformu uz zadržavanje poznate Java ekosustava. Štoviše, pokazat ćemo kako implementirati Java aplikacije na OpenShift platformi pomoću OpenShift Maven plugina.

Tradicionalni proces Java razvoja

Tradicionalni proces razvoja Java (Slika 1) podrazumijeva da programer piše kod, zatim stvara jedinice implementacije u obliku JAR ili WAR datoteka, a potom ih implementira i pokreće na web serveru ili aplikacijskom serveru. Uglavnom se za to koristi Maven iz naredbene linije ili se koristi IDE, poput IntelliJ ili Eclipse, za kodiranje i pakiranje aplikacija. Programeri su navikli unositi promjene u kod i pažljivo testirati sve prije nego što fiksiraju kod i pošalju ga u sustav za upravljanje verzijama.

Razvoj Java aplikacija za Kubernetes koristeći Eclipse JKube

Slika 1. Tradicionalni proces Java razvoja.

Proces Java razvoja za oblak

Kada se prelazi na oblačne aplikacije, Kubernetes i kontejnerese dodaju u gore opisanu shemu. Stoga programer sada treba pakirati Java aplikacije u kontejnerske slike i stvoriti Kubernetes manifeste koji opisuju te slike. Zatim se ti manifesti primjenjuju na produkcijski poslužitelj na kojem radi Kubernetes. S druge strane, Kubernetes uzima te slike iz registra i implementira aplikacije prema konfiguracijama koje smo definirali u manifestima, koji obično predstavljaju YAML datoteke.

Metamorfoza tradicionalnog procesa Java razvoja prilikom prelaska na oblak prikazana je na Slika 2.

Razvoj Java aplikacija za Kubernetes koristeći Eclipse JKube

Slika 2. Proces Java razvoja za oblak.

Eclipse JKube

Prijelaz na Kubernetes dodaje još jedan operativni nivo u proces razvoja, a mnoge programere to nervira jer se žele fokusirati na svoj osnovni posao – logiku aplikacija, a ne na to kako ih implementirati. I ovdje na scenu stupa Eclipse JKube, koji omogućuje programerima da koriste svoje biblioteke i upravljačke dodatke (JKube Kit zajedno s Kubernetes Maven Plugin ili OpenShift Maven Plugin), kako bi bez dodatnog napora izvršavali operacije povezane s kontejnerima i Kubernetesom, slijedeći shemu na Sl. 2.

U preostalom dijelu ovog članka pokazat ćemo kako pojednostaviti proces Java razvoja u Kubernetes okruženju koristeći Eclipse JKube s Kubernetes Maven Pluginom.

Razvojni proces za oblak koristeći Eclipse JKube

Razmotrimo malo modificiranu shemu Java razvoja za oblak sa Sl. 2, uvodeći u nju Eclipse JKube i Kubernetes Maven Plugin, kao što je prikazano na Sl. 3.

Razvoj Java aplikacija za Kubernetes koristeći Eclipse JKube

Sl. 3. Proces Java razvoja za oblak koristeći Eclipse JKube.

Kao što vidimo, sve operacije interakcije s Kubernetesom i kontejnerima (na shemi označeno crvenom) zamjenjuju se ciljnim zadacima Eclipse JKube prema zadanim postavkama, koji su navedeni u Tab. 1.

Tab. 1. Zadaci Eclipse JKube prema zadanim postavkama.

Zadatak
Faza
Opis

k8s:build
PRE_INTEGRATION_TEST
Izrada docker slika

k8s:push
INSTALL
Slanje docker slika u registar

k8s:resource
PROCESS_RESOURCES
Generiranje K8s manifestacija

k8s:apply
COMPILE
Primjena generiranih manifestacija na K8s

k8s:undeploy
UNDEPLOY
Brisanje K8s resursa koji su implementirani putem k8s:apply i k8s:deploy

Napomena: Ako ne želite da zadaci koriste ove tvrde zadane postavke (opinionated defaults), možete ručno konfigurirati Eclipse JKube prema svojim potrebama, budući da podržava konfiguraciju putem XML i resursa.

Sada razmotrite primjere korištenja Eclipse JKube i Kubernetes Maven Plugina u radu s aplikacijama.

Implementacija Java aplikacije u Kubernetes s Eclipse JKube

U ovom primjeru implementirat ćemo jednostavnu Java aplikaciju u klasteru Minikube uz pomoć Eclipse JKube. Koristeći Kubernetes Maven Plugin, možemo postaviti parametre implementacije bez potrebe za pisanjem ikakve konfiguracije.

Kao primjer aplikacije koristimo jednostavni generator slučajnih brojeva, koji daje JSON output na endpointu /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
{\n  \

Korak 1. Preuzimamo Kubernetes Maven Plugin

Kubernetes Maven Plugin se nalazi u repozitoriju Maven Central Repository. Za korištenje Eclipse JKube potrebno je dodati Kubernetes Maven Plugin u svoj pom.xml kao zavisnost:

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

Ako umjesto čistog Kubernetesa koristimo OpenShift, pom.xml treba modificirati na sljedeći način:

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

Korak 2. Gradimo docker-sliku

JAR datoteku aplikacije možemo sastaviti naredbom mvn package, a zatim možemo koristiti goal-zadatak mvn k8s:build za izgradnju docker-slike te aplikacije. Imajte na umu da smo preimenovali zadanu sliku pomoću ove osobine:

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

Prije nego što sastavimo sliku, potrebno je osigurati da je docker demon ispravno izložen. To se može učiniti sljedećom naredbom:

$ eval $(minikube docker-env)

Zatim unosimo naredbu mvn k8s:build, a evo što ćemo vidjeti na ekranu prilikom izgradnje docker-slike pomoću build-zadatka Eclipse JKube:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:build
[INFO] Skeniranje projekata...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Izrađivanje random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] k8s: Pokreće se u Kubernetes modu
[INFO] k8s: Izrađivanje Docker slike u Kubernetes modu
[INFO] k8s: Pokreće se generator spring-boot
[INFO] k8s: spring-boot: Koristi Docker sliku quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 kao osnovu \/ builder
[INFO] k8s: [docker.io\/rohankanojia\/random-generator:0.0.1] "spring-boot": Stvorena docker-build.tar za 251 milisekundu
[INFO] k8s: [docker.io\/rohankanojia\/random-generator:0.0.1] "spring-boot": Izgrađena slika sha256:a20e5
[INFO] ------------------------------------------------------------------------
[INFO] IZGRADNJA USPJEŠNA
[INFO] ------------------------------------------------------------------------
[INFO] Ukupno vrijeme:  5.053 s
[INFO] Završeno u: 2020-08-10T11:28:23+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $

Korak 3. Šaljemo sliku u docker registar

Nakon što smo sastavili docker-sliku pri postavljenom push registru (u našem slučaju to je docker.io), možemo poslati tu sliku u registar. Evo što ćemo vidjeti na ekranu nakon što zatražimo od Eclipse JKube da izvrši push-zadatak mvn k8s:push:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:push
[INFO] Skener za projekte...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Gradimo random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:push (default-cli) @ random-generator ---
[INFO] k8s: Rad u Kubernetes modu
[INFO] k8s: Gradimo Docker sliku u Kubernetes modu
[INFO] k8s: Pokrećemo generator spring-boot
[INFO] k8s: spring-boot: Koristeći Docker sliku quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 kao osnovu \/ graditelj
[INFO] k8s: Push se odnosi na repozitorij [docker.io\/rohankanojia\/random-generator]
5dcd9556710f: Sloj već postoji 
b7139ad07aa8: Sloj već postoji 
b6f081e4b2b6: Sloj već postoji 
d8e1f35641ac: Sloj već postoji 
[INFO] k8s: 0.0.1: digest: sha256:9f9eda2a13b8cab1d2c9e474248500145fc09e2922fe3735692f9bda4c76002d veličina: 1162
[INFO] k8s: Poslano docker.io\/rohankanojia\/random-generator:0.0.1 u 7 sekundi 
[INFO] ------------------------------------------------------------------------
[INFO] MONTAŽA USPJEŠNA
[INFO] ------------------------------------------------------------------------
[INFO] Ukupno vrijeme:  11.222 s
[INFO] Završeno u: 2020-08-10T11:35:37+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ 

Nakon slanja slike, potrebno je provjeriti je li stigla u registar. U našem slučaju, možemo je jednostavno vidjeti na Docker Hub-u, kao što je prikazano na Slici 4.

Razvoj Java aplikacija za Kubernetes koristeći Eclipse JKube

Slika 4. Poslana slika u registar pojavila se na Docker Hub-u.

Korak 4. Generiramo manifest k8s resursa za aplikaciju

Dakle, sliku aplikacije smo izgradili, sada treba napisati Kubernetes manifeste. Za to, Eclipse JKube ima zadatak koji generira statičke manifestacije resursa, oslanjajući se na korišteni Java okvir (Spring Boot, Quarkus, Vert.x ili neki drugi). Također možete konfigurirati manifest koristeći XML datoteku za konfiguraciju i stavljajući raw fragmente (fragmente potrebnog manifesta resursa) u mapu aplikacije src\/main\/jkube. U tom slučaju vaša konfiguracija bit će uključena u generirane manifeste.

U našem primjeru ostavljamo sve kako jest, te Eclipse JKube generira manifest za zadano implementiranje i za servis s tipom ClusterIP. Nakon toga, modificiramo manifest servisa kako bismo promijenili tip servisa u NodePort. Zadano ponašanje možete prepisati pomoću sljedeće postavke:

NodePort

Evo kako izgleda izlaz na ekranu nakon što zatražimo od Eclipse JKube-a da izvrši resource zadatak mvn k8s:resource.

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:resource
[INFO] Skeniranje projekata...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Gradimo random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:resource (default-cli) @ random-generator ---
[INFO] k8s: Pokrećem generator spring-boot
[INFO] k8s: spring-boot: Koristim Docker sliku quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 kao osnovu \/ builder
[INFO] k8s: jkube-controller: Dodajem zadani Deployment
[INFO] k8s: jkube-service: Dodajem zadanu uslugu 'random-generator' s portovima [8080]
[INFO] k8s: jkube-healthcheck-spring-boot: Dodajem probu spremnosti na portu 8080, putanja='\/actuator\/health', shema='HTTP', s početnom odgodom od 10 sekundi
[INFO] k8s: jkube-healthcheck-spring-boot: Dodajem probu živosti na portu 8080, putanja='\/actuator\/health', shema='HTTP', s početnom odgodom od 180 sekundi
[INFO] k8s: jkube-revision-history: Dodajem ograničenje povijesti revizije na 2
[INFO] ------------------------------------------------------------------------
[INFO] GRADNJA USPJEŠNA
[INFO] ------------------------------------------------------------------------
[INFO] Ukupno vrijeme:  3.344 s
[INFO] Završeno u: 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 : $

Korak 5. Postavljamo aplikaciju u Kubernetes klaster

Dakle, sve je spremno za implementaciju aplikacije: generirali smo njen image i potom automatski generirali manifestacije resursa. Sada samo trebamo primijeniti sve to na Kubernetes klaster. Za implementaciju aplikacije, naravno, možemo koristiti naredbu kubectl apply -f, ali to može učiniti i dodatak. Ovo će biti na ekranu nakon što zatražimo od Eclipse JKube da izvrši zadatak primjene mvn k8s:apply:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:apply
[INFO] Tražim projekte...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Gradim random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] k8s: Koristim Kubernetes na https:\/\/192.168.39.145:8443\/ u namespace default s manifestom \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/classes\/META-INF\/jkube\/kubernetes.yml 
[INFO] k8s: Koristim namespace: default
[INFO] k8s: Kreiram uslugu iz kubernetes.yml namespace default naziv random-generator
[INFO] k8s: Kreirana usluga: target\/jkube\/applyJson\/default\/service-random-generator.json
[INFO] k8s: Kreiram implementaciju iz kubernetes.yml namespace default naziv random-generator
[INFO] k8s: Kreirana implementacija: target\/jkube\/applyJson\/default\/deployment-random-generator.json
[INFO] k8s: SAVJET: Koristite naredbu `kubectl get pods -w` za praćenje pokretanja vaših podova
[INFO] ------------------------------------------------------------------------
[INFO] IZGRADNJA USPJEŠNA
[INFO] ------------------------------------------------------------------------
[INFO] Ukupno vrijeme:  7.306 s
[INFO] Završeno u: 2020-08-10T11:40:57+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ kubectl get pods -w
IME                                                     SPREADY   STATUS             PONOVLJENI   STARO
random-generator-58b7847d7f-9m9df                        0\/1     U pogonu            0          7s
random-generator-58b7847d7f-9m9df                        1\/1     U pogonu            0          17s
^C~\/work\/repos\/eclipse-jkube-demo-project : $ kubectl get svc
IME                                    TIP        CLUSTER-IP      EKSTERNI-IP   PORT(S)           STARO
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 .
  % Ukupno    % Primljeno % Preneseno  Prosječna brzina   Vrijeme    Vrijeme     Vrijeme  Trenutno
                                 Dload  Upload   Ukupno   Potrošeno   Ostalo  Brzina
100    45    0    45    0     0   1800      0 --:--:-- --:--:-- --:--:--  1875
{
  "id": "42e5571f-a20f-44b3-8184-370356581d10"
}

Korak 6. Uklanjamo aplikaciju iz Kubernetes klastera

Za to se koristi zadatak undeploy, koji jednostavno uklanja sve resurse koji su primijenjeni u prethodnom koraku, dakle prilikom izvođenja zadatka apply. Evo što ćemo vidjeti na ekranu nakon što zatražimo Eclipse JKube da izvrši zadatak undeploy 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 : $

Što još možete učiniti s Eclipse JKube

Dakle, pregledali smo osnovne ciljeve Eclipse JKube i Kubernetes Maven Plugin-a koji olakšavaju razvoj Java aplikacija za Kubernetes platformu. Ako ne želite stalno upisivati te ciljeve s tipkovnice, možete ih navesti u konfiguraciji plugina, primjerice ovako:

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

Moram reći da u ovom članku nismo obradili sve ciljeve koji postoje u Eclipse JKube i Kubernetes Maven Plugin-u, stoga donosimo u Tablici 2 popis dodatnih ciljeva koji bi vam također mogli biti korisni.

Tablica 2. Dodatni ciljevi Eclipse JKube.

Zadatak
Faza
Opis

k8s:log
VALIDATE
Dobivanje logova iz aplikacije koja radi na Kubernetesu.

k8s:debug
PACKAGE
Otvorite greška port za izvođenje debagiranja aplikacije koja se pokreće na Kubernetesu izravno iz IDE-a.

k8s:deploy
INSTALL
Izrada fork-a za zadatak Instaliraj i primjena generiranih manifestacija na Kubernetes klaster na isti način kao kod apply zadatka.

k8s:watch
PACKAGE
Automatsko vruće postavljanje aplikacije praćenjem njenog imenskog prostora.

Postavljanje Java aplikacija na Red Hat OpenShift pomoću OpenShift Maven Plugin-a

Za postavljanje aplikacije iz našeg primjera na Red Hat OpenShift platformu primjenjujemo plugin OpenShift Maven. Jedina razlika bit će ta da će se prefiks zadataka promijeniti s k8s na oc. Prema zadanim postavkama, Kubernetes Maven plugin radi docker-buildove, dok OpenShift Maven plugin radi buildove S2I. Ne unosimo nikakve promjene u naš projekt osim uklanjanja svojstva jkube.generator.name, jer nije potrebno prilikom slanja u registar (tijekom izgradnje OpenShift postavlja sliku u svom internom registru). I ovo će se pojaviti na ekranu kada pokrenemo naš primjer, u kojem, usput, izvršavamo goal zadatke ne jedan po jedan, već sve odjednom:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn oc:build oc:resource oc:apply
[INFO] Traženje projekata...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Izgradnja random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] oc: Koristi OpenShift izgradnju sa strategijom S2I
[INFO] oc: Pokreće se u OpenShift modu
[INFO] oc: Pokreće generator spring-boot
[INFO] oc: spring-boot: Koristi Docker sliku quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 kao osnovu \/ builder
[INFO] oc: [random-generator:0.0.1] "spring-boot": Kreirana docker izvorna taratura \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/docker\/random-generator\/0.0.1\/tmp\/docker-build.tar
[INFO] oc: Dodavanje u Tajnu pullsecret-jkube
[INFO] oc: Koristi Tajnu pullsecret-jkube
[INFO] oc: Kreiranje BuildServiceConfig random-generator-s2i za Izvor nu
[INFO] oc: Kreiranje ImageStream random-generator
[INFO] oc: Pokretanje Izgradnje random-generator-s2i
[INFO] oc: Čekanje da izgradnja random-generator-s2i-1 završi...
[INFO] oc: Keširanje blobova pod "\/var\/cache\/blobs".
[INFO] oc: Dohvaćanje izvora slika potpisuje
[INFO] oc: Kopiranje blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Kopiranje blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Kopiranje blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Kopiranje konfiguracije sha256:52d6788fcfdd39595264d34a3959464a5dabc1d4ef0ae188802b20fc2d6a857b
[INFO] oc: Pisanje manifesta u odredište slike
[INFO] oc: Pohranjivanje potpisa
[INFO] oc: Generiranje dockerfile sa builder slikom quay.io\/jkube\/jkube-java-binary-s2i:0.0.7
[INFO] oc: KORAK 1: FROM quay.io\/jkube\/jkube-java-binary-s2i:0.0.7
[INFO] oc: KORAK 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: KORAK 3: ENV JAVA_APP_DIR="\/deployments"     OPENSHIFT_BUILD_NAME="random-generator-s2i-1"     OPENSHIFT_BUILD_NAMESPACE="default"
[INFO] oc: KORAK 4: KORISNIK root
[INFO] oc: KORAK 5: COPY upload\/src \/tmp\/src
[INFO] oc: KORAK 6: RUN chown -R 1000:0 \/tmp\/src
[INFO] oc: KORAK 7: KORISNIK 1000
[INFO] oc: KORAK 8: RUN \/usr\/local\/s2i\/assemble
[INFO] oc: INFO Otkrivena izvorna S2I izgradnja sa običnim binarnim datotekama
[INFO] oc: INFO Otkrivena binarna S2I izgradnja iz fabric8-maven-plugin
[INFO] oc: INFO Kopiranje binarnih datoteka iz \/tmp\/src\/deployments u \/deployments ...
[INFO] oc: random-generator-0.0.1.jar
[INFO] oc: INFO Kopiranje izdanja iz deployments u \/deployments...
[INFO] oc: '\/tmp\/src\/deployments\/random-generator-0.0.1.jar' -> '\/deployments\/random-generator-0.0.1.jar'
[INFO] oc: KORAK 9: CMD \/usr\/local\/s2i\/run
[INFO] oc: KORAK 10: KOMIT temp.builder.openshift.io\/default\/random-generator-s2i-1:48795e41
[INFO] oc: vrijeme="2020-08-10T06:37:49Z" razina=info msg="Neusklađenost operativnog sustava slike: slika koristi "", očekivanje "linux""
[INFO] oc: vrijeme="2020-08-10T06:37:49Z" razina=info msg="Neusklađenost arhitekture slike: slika koristi "", očekivanje "amd64""
[INFO] oc: Dohvaćanje izvora slika potpisuje
[INFO] oc: Kopiranje blob sha256:d8e1f35641acb80b562f70cf49911341dfbe8c86f4d522b18efbf3732aa74223
[INFO] oc: Kopiranje blob sha256:b6f081e4b2b6de8be4b1dec132043d14c121e968384dd624fb69c2c07b482edb
[INFO] oc: Kopiranje blob sha256:b7139ad07aa8ce4ed5a132f7c5cc9f1de0f5099b5e155027a23d57f7fbe78b16
[INFO] oc: Kopiranje blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Kopiranje konfiguracije sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Pisanje manifesta u odredište slike
[INFO] oc: Pohranjivanje potpisa
[INFO] oc: --> 27aaadaf28e
[INFO] oc: 27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Dohvaćanje izvora slika potpisuje
[INFO] oc: 
[INFO] oc: Slanje slike image-registry.openshift-image-registry.svc:5000\/default\/random-generator:0.0.1 ...
[INFO] oc: Kopiranje blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Kopiranje blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Kopiranje blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Kopiranje blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Kopiranje konfiguracije sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Pisanje manifesta u odredište slike
[INFO] oc: Pohranjivanje potpisa
[INFO] oc: Uspješno poslano image-registry.openshift-image-registry.svc:5000\/default\/random-generator@sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: Slanje uspješno
[INFO] oc: Izgradnja random-generator-s2i-1 u statusu Kompletno
[INFO] oc: Pronađen tag na ImageStream random-generator tag: sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: ImageStream random-generator zapisan u \/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: Koristi naziv docker slike za naziv prostora: default
[INFO] oc: Pokreće generator spring-boot
[INFO] oc: spring-boot: Koristi Docker sliku quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 kao osnovu \/ builder
[INFO] oc: jkube-controller: Dodavanje default DeploymentConfig
[INFO] oc: jkube-service: Dodavanje default servisa 'random-generator' sa portovima [8080]
[INFO] oc: jkube-healthcheck-spring-boot: Dodavanje readiness probe na portu 8080, putanja='\/actuator\/health', shema='HTTP', s početnom kašnjenju 10 sekundi
[INFO] oc: jkube-healthcheck-spring-boot: Dodavanje liveness probe na portu 8080, putanja='\/actuator\/health', shema='HTTP', s početnom kašnjenju 180 sekundi
[INFO] oc: jkube-revision-history: Dodavanje ograničenja revizije na 2
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] oc: Koristi OpenShift na https:\/\/api.crc.testing:6443\/ u imeniku default sa manifestom \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/classes\/META-INF\/jkube\/openshift.yml 
[INFO] oc: Otkrivena platforma OpenShift
[INFO] oc: Koristi projekt: default
[INFO] oc: Kreira servis iz openshift.yml u prostoru default naziva random-generator
[INFO] oc: Kreiran Servis: target\/jkube\/applyJson\/default\/service-random-generator.json
[INFO] oc: Kreira DeploymentConfig iz openshift.yml prostora default naziva random-generator
[INFO] oc: Kreiran DeploymentConfig: target\/jkube\/applyJson\/default\/deploymentconfig-random-generator.json
[INFO] oc: Kreira Putanju default:random-generator domaćin: null
[INFO] oc: SAVJET: Koristite naredbu `oc get pods -w` da gledate vaše podove kako se pokreću
[INFO] ------------------------------------------------------------------------
[INFO] IZGRADNJA USPJEŠNA
[INFO] ------------------------------------------------------------------------
[INFO] Ukupno vreme:  01:07 min
[INFO] Završen: 2020-08-10T12:08:00+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ oc get pods -w
IME                           SPREMNO     STATUS      PONOVNI STARTOVI   STARO
random-generator-1-deploy      1\/1       Radi     0          14s
random-generator-1-vnrm9       0\/1       Radi     0          11s
random-generator-s2i-1-build   0\/1       Završeno   0          1m
random-generator-1-vnrm9   1\/1       Radi   0         24s
random-generator-1-deploy   0\/1       Završeno   0         28s
~\/work\/repos\/eclipse-jkube-demo-project : $ oc get routes
IME                DOMAĆIN\/PORT                                    PUTANJA      SERVISI            PORT      TERMINACIJA   WILDCARD
random-generator    random-generator-default.apps-crc.testing              random-generator    8080                    Nema
~\/work\/repos\/eclipse-jkube-demo-project : $ curl random-generator-default.apps-crc.testing\/random 
  % Ukupno    % Primljeno % Preneseno  Prosječna Brzina   Vreme    Vreme     Vreme  Trenutno
                                 Dload  Upload   Ukupno   Potrošeno   Ostalo  Brzina
100    45    0    45    0     0   1666      0 --:--:-- --:--:-- --:--:--  1730
{
  "id": "d80052d9-2f92-43cb-b9eb-d7cffb879798"
}
~\/work\/repos\/eclipse-jkube-demo-project : $

Video tutorial

Da biste saznali više o pojednostavljenju Kubernetes razvojnog procesa pomoću Eclipse JKube, pogledajte video-lekciju o brzom implementiranju jednostavne Spring Boot aplikacije na Minikube:

Pogledajte video

Zaključak

U ovom članku pokazali smo kako Eclipse JKube olakšava život Java programeru prilikom rada s Kubernetesom. Dodatne informacije o Eclipse JKube možete pronaći na web stranici projekta i na GitHub.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster