Vývoj Java aplikácií pre Kubernetes s využitím Eclipse JKube

Pred 25 rokmi sa Java dostala medzi programátorov, aby sa nakoniec stala jedným z pilierov, okolo ktorých sa budujú aplikačné stacky. Dnes však mnohí jednotlivci a organizácie, ktoré roky verili Java, prechádzajú alebo zvažujú prechod na platformu Kubernetes alebo jej odvodené verzie, ako sú Red Hat OpenShift alebo Amazon EKS.

Vývoj Java aplikácií pre Kubernetes s využitím Eclipse JKube

Žiaľ, Kubernetes má strmú krivku učenia a pridáva ďalšiu operatívnu vrstvu do procesu vývoja, na ktorý sú Java programátori zvyknutí. Dnes sa pozrieme na to, ako využiť Eclipse JKube, aby sme zjednodušili tieto dodatočné operácie spojené s Kubernetes a kontajnermi, a tak zabezpečili bezproblémovú migráciu na cloudovú platformu s zachovaním známeho Java ekosystému. Navyše ukážeme, ako nasadiť Java aplikácie na platforme OpenShift pomocou pluginu OpenShift Maven.

Tradičný proces Java vývoja

Tradičný proces vývoja Java (Obr. 1) predpokladá, že programátor píše kód, potom vytvára jednotky nasadenia vo forme súborov JAR alebo WAR, a následne tieto súbory nasadzuje a spúšťa na webovom serveri alebo serveri aplikácií. Na tento účel sa zvyčajne používa Maven z príkazového riadku alebo IDE ako IntelliJ alebo Eclipse na kódovanie a balenie aplikácií. Vývojári sú zvyknutí vykonávať zmeny v kóde a dôkladne všetko testovať predtým, ako kód fixujú a odosielajú do systému správy verzií.

Vývoj Java aplikácií pre Kubernetes s využitím Eclipse JKube

Obr. 1. Tradičný proces Java vývoja.

Proces Java vývoja pre cloud

Pri prechode na cloudové aplikácie sa do vyššie opísaného schémy pridávajú Kubernetes a kontajnery. Preto teraz musí programátor zabaliť Java aplikácie do kontajnerových obrazov a vytvoriť Kubernetes manifesty, ktoré popisujú tieto obrazy. Tieto manifesty sa potom aplikujú na produkčný server, na ktorom beží Kubernetes. Kubernetes následne berie tieto obrazy z registry a nasadzuje aplikácie podľa tých konfigurácií, ktoré sme uviedli v manifesto, ktoré zvyčajne predstavuje súbory YAML.

Metamorfóza tradičného procesu Java vývoja pri prechode na cloud je znázornená na Obr. 2.

Vývoj Java aplikácií pre Kubernetes s využitím Eclipse JKube

Obr. 2. Proces Java vývoja pre cloud.

Eclipse JKube

Prechod na Kubernetes pridáva ďalšiu prevádzkovú vrstvu do procesu vývoja, čo mnohých vývojárov znepokojuje, pretože sa chcú zamerať na svoju hlavnú prácu – logiku aplikácií – a nie na to, ako ich nasadiť. A tu prichádza do hry Eclipse JKube, ktorý vývojárom umožňuje používať svoje knižnice a pluginy (JKube Kit spolu s Kubernetes Maven Plugin alebo OpenShift Maven Plugin), aby bez zbytočných ťažkostí vykonávali operácie súvisiace s kontajnermi a Kubernetes, dodržiavajúc schému na Obr. 2.

V zvyšnej časti tohto článku ukážeme, ako zjednodušiť proces vývoja Java v prostredí Kubernetes pomocou Eclipse JKube s pluginom Kubernetes Maven Plugin.

Proces vývoja pre cloud s použitím Eclipse JKube

Zvážme mierne upravenú schému vývoja Java pre cloud na Obr. 2, pričom do nej zavedieme Eclipse JKube a Kubernetes Maven Plugin, ako je znázornené na Obr. 3.

Vývoj Java aplikácií pre Kubernetes s využitím Eclipse JKube

Obr. 3. Proces vývoja Java pre cloud s použitím Eclipse JKube.

Ako vidíme, všetky operácie interakcie s Kubernetes a kontajnermi (na schéme zvýraznené červenou) sú nahradené cieľovými úlohami Eclipse JKube podľa predvolených nastavení, ktoré sú uvedené v Tab. 1.

Tab. 1. Predvolené úlohy Eclipse JKube.

Úloha
Fáza
Popis

k8s:build
PRE_INTEGRATION_TEST
Súbor docker-imitácií

k8s:push
INSTALL
Odosielanie docker-imitácií do registry

k8s:resource
PROCESS_RESOURCES
Generovanie manifestov K8s

k8s:apply
COMPILE
Aplikovanie vygenerovaných manifestov na K8s

k8s:undeploy
UNDEPLOY
Odstránenie zdrojov K8s, ktoré boli nasadené prostredníctvom k8s:apply a k8s:deploy.

Poznámka: Ak nechcete, aby úlohy používali tieto prísne predvolené hodnoty (opinionated defaults), môžete si ručne nastaviť Eclipse JKube, pričom podporuje konfiguráciu cez filestream a zdroje.

Teraz sa pozrime na príklady použitia Eclipse JKube a Kubernetes Maven Plugin pri práci s aplikáciami.

Nasadzovanie Java aplikácie na Kubernetes s pomocou Eclipse JKube

V tomto príklade nasadíme jednoduchú Java aplikáciu v klastri Minikube s pomocou Eclipse JKube. Pomocou Kubernetes Maven Plugin môžeme zadať parametre nasadenia bez nutnosti definovať akúkoľvek konfiguráciu.

Ako príklad aplikácie použijeme jednoduchý generátor náhodných čísel, ktorý vracia JSON výstup na endpoint’e /random:

~ /work/repos/eclipse-jkube-demo-project : $ curl localhost:8080/random | jq . 
  % Celkom    % Prijaté % Prenos   Priemerná rýchlosť   Čas    Čas     Čas  Aktuálny 
                                 Dload  Upload   Celkom   Strávený    Zostáva  Rýchlosť
100    45    0    45    0     0    818      0 --:--:-- --:--:-- --:--:--   818
{
  "id": "e80a4d10-c79b-4b9a-aaac-7c286cb37f3c"
}

Krok 1. Nahrávame Kubernetes Maven Plugin

Kubernetes Maven Plugin sa nachádza v repozitári Maven Central Repository. Na použitie Eclipse JKube je potrebné pridať Kubernetes Maven Plugin do svojho pom.xml ako závislosť:

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

Ak sa namiesto čistého Kubernetes používa OpenShift, pom.xml sa modifikuje následujúcim spôsobom:

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

Krok 2. Zbierame docker-obraz

JAR súbor aplikácie môžeme zbierať príkazom mvn package a potom môžeme použiť goal úlohu mvn k8s:build na zostavenie docker-obrazu tejto aplikácie. Upozorňujeme, že sme predefinovali predvolené meno obrazu pomocou tohto vlastnosti:

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

Predtým, než začneme zbierať obraz, je potrebné sa uistiť, že docker démon je správne exponovaný. To môžeme urobiť nasledujúcim príkazom:

$ eval $(minikube docker-env)

Potom zadáme príkaz mvn k8s:build a toto je to, čo uvidíme na obrazovke pri zostavovaní docker-obrazu pomocou build úlohy Eclipse JKube:

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:build
[INFO] Skenujeme projekty...
[INFO]
[INFO] ---------------------------------------------
[INFO] Zostavujeme random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] k8s: Beží v režime Kubernetes
[INFO] k8s: Zostavujeme Docker obraz v režime Kubernetes
[INFO] k8s: Beží generátor spring-boot
[INFO] k8s: spring-boot: Používajúci Docker obraz quay.io/jkube/jkube-java-binary-s2i:0.0.7 ako základ / builder
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Vytvorený docker-build.tar za 251 milisekúnd
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Vytvorený obraz sha256:a20e5
[INFO] ------------------------------------------------------------------------
[INFO] ÚSPORNÉ ZOSTAVENIE
[INFO] ------------------------------------------------------------------------
[INFO] Celkový čas:  5.053 s
[INFO] Dokončené: 2020-08-10T11:28:23+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $

Krok 3. Posielame obraz do docker registru

Akonáhle sme zostavili docker-obraz s nastaveným push registru (v našom prípade je to docker.io), môžeme tento obraz odoslať do registru. Toto sa zobrazí na obrazovke po tom, čo požiadame Eclipse JKube, aby vykonal push úlohu mvn k8s:push:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:push
[INFO] Skenovanie projektov...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Kompilovanie random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:push (default-cli) @ random-generator ---
[INFO] k8s: Beží v režime Kubernetes
[INFO] k8s: Skladanie Docker obrazu v režime Kubernetes
[INFO] k8s: Spúšťanie generátora spring-boot
[INFO] k8s: spring-boot: Používa Docker obraz quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 ako základ\/builder
[INFO] k8s: Push sa odkazuje na repozitár [docker.io\/rohankanojia\/random-generator]
5dcd9556710f: Vrstva už existuje 
b7139ad07aa8: Vrstva už existuje 
b6f081e4b2b6: Vrstva už existuje 
d8e1f35641ac: Vrstva už existuje 
[INFO] k8s: 0.0.1: digest: sha256:9f9eda2a13b8cab1d2c9e474248500145fc09e2922fe3735692f9bda4c76002d veľkosť: 1162
[INFO] k8s: Odošlané docker.io\/rohankanojia\/random-generator:0.0.1 za 7 sekúnd 
[INFO] ------------------------------------------------------------------------
[INFO] VÝSTAVBA ÚSPEŠNÁ
[INFO] ------------------------------------------------------------------------
[INFO] Celkový čas:  11.222 s
[INFO] Dokončené dňa: 2020-08-10T11:35:37+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ 

Po odoslaní obrazu musíme skontrolovať, že sa dostal do registru. V našom prípade ho jednoducho vidíme na Docker Hub, ako je znázornené na Obr. 4.

Vývoj Java aplikácií pre Kubernetes s využitím Eclipse JKube

Obr. 4. Odoslaný obraz do registra sa objavil na Docker Hub.

Krok 4. Generujeme manifesty Kubernetes zdrojov pre aplikáciu

Takže, obraz aplikácie sme zostavili, teraz musíme napísať Kubernetes manifesty. Na tento účel má Eclipse JKube úlohu, ktorá generuje tvrdé manifesty zdrojov na základe podložného Java rámca (Spring Boot, Quarkus, Vert.x alebo nejakého iného). Tiež je možné nastaviť manifest, pomocou konfiguračného XML súboru a umiestnením raw fragmentov (framenty požadovaného manifestu zdrojov) do priečinka aplikácie src\/main\/jkube. V takom prípade sa vaša konfigurácia načíta do vygenerovaných manifestov.

V našom príklade necháme všetko tak, ako je, a preto Eclipse JKube generuje manifest pre predvolené nasadenie a pre službu s typom ClusterIP. A potom už modifikujeme manifest služby, aby sme zmenili typ služby na NodePort. Predvolené správanie môžeme predefinovať pomocou nasledujúcej vlastnosti:

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

Takto vyzerá výstup na obrazovke po tom, čo požiadame Eclipse JKube, aby vykonal úlohu resource 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: 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 : $

Krok 5. Nasadenie aplikácie do klastru Kubernetes

Takže, všetko máme pripravené na nasadenie aplikácie: vygenerovali sme jej obraz a potom automaticky vytvorili manifesty zdrojov. Teraz stačí len to všetko aplikovať na klaster Kubernetes. Na nasadenie aplikácie môžeme samozrejme použiť príkaz kubectl apply -f, ale tento plugin to môže urobiť za nás. Tu je, čo sa zobrazí na obrazovke po tom, čo požiadame Eclipse JKube, aby vykonal úlohu apply príkazu mvn k8s:apply:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:apply
[INFO] Skanning projektov...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Budovanie random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] k8s: Používam Kubernetes na https://192.168.39.145:8443/ v namespace default s manifestom /home/rohaan/work/repos/eclipse-jkube-demo-project/target/classes/META-INF/jkube/kubernetes.yml 
[INFO] k8s: Používam namespace: default
[INFO] k8s: Vytváram službu z kubernetes.yml namespace default s názvom random-generator
[INFO] k8s: Vytvorená služba: target/jkube/applyJson/default/service-random-generator.json
[INFO] k8s: Vytváram nasadenie z kubernetes.yml namespace default s názvom random-generator
[INFO] k8s: Vytvorené nasadenie: target/jkube/applyJson/default/deployment-random-generator.json
[INFO] k8s: TIP: Použite príkaz `kubectl get pods -w` na sledovanie štartu vašich podov
[INFO] ------------------------------------------------------------------------
[INFO] ÚSPEŠNÉ VYBUDOVANIE
[INFO] ------------------------------------------------------------------------
[INFO] Celkový čas:  7.306 s
[INFO] Skončilo: 2020-08-10T11:40:57+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ kubectl get pods -w
NÁZOV                                                     PRIPRAVENÝ   STAV             REŠTARTY   VEK
random-generator-58b7847d7f-9m9df                        0\/1     Beží            0          7s
random-generator-58b7847d7f-9m9df                        1\/1     Beží            0          17s
^C~\/work\/repos\/eclipse-jkube-demo-project : $ kubectl get svc
NÁZOV                                    TYP        CLUSTER-IP      EXTERNAL-IP   PORT(Y)           VEK
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 .
  % Celkom    % Prijaté % Xferd  Priemerná Rýchlosť   Čas    Čas     Čas  Aktuálne
                                 Dload  Upload   Celkom   Strávené   Zostáva  Rýchlosť
100    45    0    45    0     0   1800      0 --:--:-- --:--:-- --:--:--  1875
{
  "id": "42e5571f-a20f-44b3-8184-370356581d10"
}

Krok 6. Odvádzanie aplikácie z klastrov Kubernetes

Na to sa používa úloha undeploy, ktorá jednoducho odstráni všetky zdroje, ktoré boli použité v predchádzajúcom kroku, teda pri vykonávaní úlohy apply. Toto je to, čo uvidíme na obrazovke po tom, čo požiadame Eclipse JKube, aby vykonalo úlohu 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 : $

Čo ďalšie môžete robiť s Eclipse JKube

Takže sme si prešli základné úlohy Eclipse JKube a Kubernetes Maven Plugin, ktoré uľahčujú vývoj Java aplikácií pre platformu Kubernetes. Ak nechcete neustále zadávať tieto úlohy z klávesnice, môžete ich zapísať do konfigurácie pluginu, napríklad takto:

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

Musím povedať, že v tomto článku sme sa nezaoberali všetkými úlohami, ktoré sú k dispozícii v Eclipse JKube a Kubernetes Maven Plugin, preto uvádzame v Tab.2 zoznam ďalších úloh, ktoré sa vám môžu hodiť.

Tab. 2. Ďalšie úlohy pre Eclipse JKube.

Úloha
Fáza
Popis

k8s:log
VALIDATE
Získanie logov z aplikácie bežiacej na Kubernetes.

k8s:debug
PACKAGE
Otvorenie ladacieho portu na vykonávanie ladenia aplikácie bežiacej na Kubernetes priamo z IDE.

k8s:deploy
INSTALL
Vytvorenie forku pre úlohu Install a uplatnenie vygenerovaných manifestov na klaster Kubernetes rovnako ako v prípade úlohy apply.

k8s:watch
PACKAGE
Automatické horúce nasadenie aplikácie sledovaním jej menného priestoru.

Nasadenie Java aplikácií na Red Hat OpenShift pomocou OpenShift Maven Plugin.

Na nasadenie aplikácie z nášho príkladu na platforme Red Hat OpenShift použijeme plugin OpenShift Maven. Jediný rozdiel bude v tom, že prefix úloh sa zmení z k8s na oc. Predvolene plugin Kubernetes Maven vykonáva docker-kompilácie, zatiaľ čo plugin OpenShift Maven vykonáva kompilácie S2I. Do nášho projektu nevykonávame žiadne zmeny, okrem odstránenia vlastnosti jkube.generator.name, pretože nie je potrebná pri zaslaní do registra (počas fázy kompilácie OpenShift umiestňuje obraz vo svojom vnútornom registri). A toto sa objaví na obrazovke, keď spustíme náš príklad, v ktorom, mimochodom, vykonávame ciele úloh nie po jednej, ale všetky naraz:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn oc:build oc:resource oc:apply
[INFO] Skenujem projekty...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Budovanie random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] oc: Používam OpenShift build so stratégiou S2I
[INFO] oc: Beží v režime OpenShift
[INFO] oc: Bežím generátor spring-boot
[INFO] oc: spring-boot: Používam Docker image quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 ako základ \/ builder
[INFO] oc: [random-generator:0.0.1] "spring-boot": Vytvorený docker zdrojový tar \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/docker\/random-generator\/0.0.1\/tmp\/docker-build.tar
[INFO] oc: Pridávam do Secret pullsecret-jkube
[INFO] oc: Používam Secret pullsecret-jkube
[INFO] oc: Vytváram BuildServiceConfig random-generator-s2i pre Source build
[INFO] oc: Vytváram ImageStream random-generator
[INFO] oc: Spúšťam Build random-generator-s2i
[INFO] oc: Čakám na dokončenie build random-generator-s2i-1...
[INFO] oc: Ukladaním blobov pod "\/var\/cache\/blobs".
[INFO] oc: Získavanie podpisov obrazov
[INFO] oc: Kopírovanie blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Kopírovanie blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Kopírovanie blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Kopírovanie config sha256:52d6788fcfdd39595264d34a3959464a5dabc1d4ef0ae188802b20fc2d6a857b
[INFO] oc: Písanie manifestu do umiestnenia obrazu
[INFO] oc: Ukladanie podpisov
[INFO] oc: Generovanie dockerfile s builder image quay.io\/jkube\/jkube-java-binary-s2i:0.0.7
[INFO] oc: KROK 1: Z QUIET quay.io\/jkube\/jkube-java-binary-s2i:0.0.7
[INFO] oc: KROK 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: KROK 3: ENV JAVA_APP_DIR="\/deployments"     OPENSHIFT_BUILD_NAME="random-generator-s2i-1"     OPENSHIFT_BUILD_NAMESPACE="default"
[INFO] oc: KROK 4: UŽÍVATEĽ root
[INFO] oc: KROK 5: KOPÍROVANIE upload\/src \/tmp\/src
[INFO] oc: KROK 6: RUN chown -R 1000:0 \/tmp\/src
[INFO] oc: KROK 7: UŽÍVATEĽ 1000
[INFO] oc: KROK 8: RUN \/usr\/local\/s2i\/assemble
[INFO] oc: INFO S2I zdrojový build s čistými binárkami detechtovaný
[INFO] oc: INFO S2I binárny build z fabric8-maven-plugin detechtovaný
[INFO] oc: INFO Kopírovanie bináriek z \/tmp\/src\/deployments do \/deployments ...
[INFO] oc: random-generator-0.0.1.jar
[INFO] oc: INFO Kopírovanie nasadení z deployments do \/deployments...
[INFO] oc: '\/tmp\/src\/deployments\/random-generator-0.0.1.jar' -> '\/deployments\/random-generator-0.0.1.jar'
[INFO] oc: KROK 9: CMD \/usr\/local\/s2i\/run
[INFO] oc: KROK 10: COMMIT temp.builder.openshift.io\/default\/random-generator-s2i-1:48795e41
[INFO] oc: time="2020-08-10T06:37:49Z" level=info msg="Nesúlad operačného systému obrazu: obraz používa "", očakáva "linux""
[INFO] oc: time="2020-08-10T06:37:49Z" level=info msg="Nesúlad architektúry obrazu: obraz používa "", očakáva "amd64""
[INFO] oc: Získavanie podpisov obrazov
[INFO] oc: Kopírovanie blob sha256:d8e1f35641acb80b562f70cf49911341dfbe8c86f4d522b18efbf3732aa74223
[INFO] oc: Kopírovanie blob sha256:b6f081e4b2b6de8be4b1dec132043d14c121e968384dd624fb69c2c07b482edb
[INFO] oc: Kopírovanie blob sha256:b7139ad07aa8ce4ed5a132f7c5cc9f1de0f5099b5e155027a23d57f7fbe78b16
[INFO] oc: Kopírovanie blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Kopírovanie config sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Písanie manifestu do umiestnenia obrazu
[INFO] oc: Ukladanie podpisov
[INFO] oc: --> 27aaadaf28e
[INFO] oc: 27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Získavanie podpisov obrazov
[INFO] oc: 
[INFO] oc: Odosielanie obrazu image-registry.openshift-image-registry.svc:5000\/default\/random-generator:0.0.1 ...
[INFO] oc: Kopírovanie blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Kopírovanie blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Kopírovanie blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Kopírovanie blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Kopírovanie config sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Písanie manifestu do umiestnenia obrazu
[INFO] oc: Ukladanie podpisov
[INFO] oc: Úspešne odoslané image-registry.openshift-image-registry.svc:5000\/default\/random-generator@sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: Odoslanie úspešné
[INFO] oc: Build random-generator-s2i-1 má stav Kompletné
[INFO] oc: Nájdený tag na ImageStream random-generator tag: sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: ImageStream random-generator zapísaný do \/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: Používam názov docker image namespace: default
[INFO] oc: Bežím generátor spring-boot
[INFO] oc: spring-boot: Používam Docker image quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 ako základ \/ builder
[INFO] oc: jkube-controller: Pridávam predvolený DeploymentConfig
[INFO] oc: jkube-service: Pridávam predvolenú službu 'random-generator' s portami [8080]
[INFO] oc: jkube-healthcheck-spring-boot: Pridávam readiness probe na porte 8080, cesta='\/actuator\/health', schéma='HTTP', s počiatočným oneskorením 10 sekúnd
[INFO] oc: jkube-healthcheck-spring-boot: Pridávam liveness probe na porte 8080, cesta='\/actuator\/health', schéma='HTTP', s počiatočným oneskorením 180 sekúnd
[INFO] oc: jkube-revision-history: Pridávam obmedzenie histórie revízií na 2
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] oc: Používam OpenShift na https:\/\/api.crc.testing:6443\/ v namespace default s manifestom \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/classes\/META-INF\/jkube\/openshift.yml 
[INFO] oc: Detekovaná platforma OpenShift
[INFO] oc: Používam projekt: default
[INFO] oc: Vytváram službu z openshift.yml namespace default názov random-generator
[INFO] oc: Vytvorená služba: target\/jkube\/applyJson\/default\/service-random-generator.json
[INFO] oc: Vytváram DeploymentConfig z openshift.yml namespace default názov random-generator
[INFO] oc: Vytvorená DeploymentConfig: target\/jkube\/applyJson\/default\/deploymentconfig-random-generator.json
[INFO] oc: Vytváram Route default:random-generator host: null
[INFO] oc: NÁPOVEDA: Použite príkaz `oc get pods -w` na sledovanie štartu vašich pods
[INFO] ------------------------------------------------------------------------
[INFO] ÚSPEŠNÉ NASADENIE
[INFO] ------------------------------------------------------------------------
[INFO] Celkový čas:  01:07 min
[INFO] Dokončené dňa: 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       Beží       0          14s
random-generator-1-vnrm9       0\/1       Beží       0          11s
random-generator-s2i-1-build   0\/1       Dokončené   0          1m
random-generator-1-vnrm9   1\/1       Beží   0         24s
random-generator-1-deploy   0\/1       Dokončené   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 
  % Celkový    % Prijaté % Prenos   Priemerná Rýchlosť   Čas    Čas     Čas  Aktuálne
                                 Dload  Upload   Celkový   Minulý   Zostávajúci  Rýchlosť
100    45    0    45    0     0   1666      0 --:--:-- --:--:-- --:--:--  1730
{
  "id": "d80052d9-2f92-43cb-b9eb-d7cffb879798"
}
~\/work\/repos\/eclipse-jkube-demo-project : $

Video návod

Ak sa chcete dozvedieť viac o tom, ako zjednodušiť vývoj Kubernetes pomocou Eclipse JKube, pozrite si video návod na rýchle nasadenie jednoduchého aplikácie Spring Boot na Minikube:

Prehrajte video

Záver

V tomto článku sme ukázali, ako Eclipse JKube uľahčuje život Java vývojárovi pri práci s Kubernetes. Ďalšie informácie o Eclipse JKube nájdete na webovej stránke projektu a na GitHub.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster