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

Pred 25 rokmi sa Java dostala do rúk mnohých programátorov, aby sa napokon stala jedným z pilierov, okolo ktorého sa budujú aplikačné stacky. Dnes však mnohí ľudia a organizácie, ktoré roky verne používali Java, prechádzajú alebo uvažujú o prechode na platformu Kubernetes alebo jej deriváty, ako napríklad Red Hat OpenShift alebo Amazon EKS.

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

Žiaľ, Kubernetes sa vyznačuje strmou učebnou krivkou a zavádza ďalšiu operačnú úroveň do procesov vývoja, na ktoré sú Java programátori zvyknutí. Dnes sa pozrieme, ako používať Eclipse JKube, aby sa zjednodušili dodatočné operácie spojené s Kubernetes a kontajnermi a zároveň zabezpečila bezbolestná migrácia na cloudovú platformu so zachovaním známej Java ekosystémy. Navyše vám ukážeme, ako nasadzovať 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 vývojár píše kód, potom vytvára jednotky nasadenia vo forme JAR alebo WAR súborov a následne nasádza a spúšťa tieto súbory na webovom serveri alebo serveri aplikácií. Na tento účel sa väčšinou 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í robiť zmeny v kóde a dôkladne všetko testovať predtým, ako kód potvrdiť a odoslať 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 uvedeného schémy pridáva Kubernetes a kontajnery. Preto musí teraz vývojár zabaliť Java aplikácie do kontajnerových obrazov a vytvoriť Kubernetes manifesty, ktoré opisujú tieto obrazy. Tieto manifesty sa následne aplikujú na produkčný server, na ktorom beží Kubernetes. Kubernetes potom čerpá tieto obrazy z registru a nasadzuje aplikácie podľa konfigurácií, ktoré sme uviedli v manifestoch, ktoré zvyčajne predstavujú súbory YAML.

Metamorfóza tradičného procesu Java vývoja pri prechode do cloudu 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 operačnú vrstvu do procesu vývoja, a mnohých vývojárov to nervuje, 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á umožňuje vývojárom používať ich knižnice a pluginy (JKube Kit spolu s Kubernetes Maven Plugin alebo OpenShift Maven Plugin), aby bez námahy vykonávali operácie spojené s kontajnermi a Kubernetes podľa schémy na Obr. 2.

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

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

Pozrime sa na mierne upravenú schému Java vývoja pre cloud na Obr. 2, do ktorej 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 Java vývoja pre cloud s použitím Eclipse JKube.

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

Tab. 1. Predvolené úlohy Eclipse JKube.

Úloha
Fáza
Popis

k8s:build
PRE_INTEGRATION_TEST
Zostavenie docker obrazov

k8s:push
INSTALL
Odoslanie docker obrazov do registru

k8s:resource
PROCESS_RESOURCES
Generovanie manifestov K8s

k8s:apply
COMPILE
Aplikovanie vygenerovaných manifestov na K8s

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

Poznámka: Ak nechcete, aby úlohy používali tieto tvrdé predvoľby (opinionated defaults), môžete si manuálne nastaviť Eclipse JKube podľa seba, pretože podporuje konfiguráciu prostredníctvom filestream a zdrojov..

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

Nasadíme Java aplikáciu do Kubernetes pomocou Eclipse JKube.

V tomto príklade nasadíme jednoduchú Java aplikáciu do klastra Minikube s použitím Eclipse JKube. Použitím Kubernetes Maven Plugin môžeme zadať parametre nasadenia bez toho, aby sme museli vytvárať akúkoľvek konfiguráciu.

Ako príklad aplikácie použijeme jednoduchý generátor náhodných čísel, ktorý poskytuje JSON výstup na endpoint’e /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"
}

Krok 1. Nahrávame Kubernetes Maven Plugin

Kubernetes Maven Plugin sa nachádza v repozitári Maven Central Repository. Pre 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 namiesto čistého Kubernetes používate OpenShift, pom.xml sa upraví nasledovne:

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

Krok 2. Skladáme docker-obraz

JAR súbor aplikácie môže byť zložený príkazom mvn package, a následne môžeme použiť cieľovú úlohu mvn k8s:build na zloženie 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ž zložíme obraz, je potrebné zabezpečiť, aby bol docker démon správne exponovaný. To môžeme urobiť pomocou nasledujúceho príkazu:

$ eval $(minikube docker-env)

Následne zadáme príkaz mvn k8s:build, a toto uvidíme na obrazovke pri skladaní docker-obrazu pomocou build-úlohy Eclipse JKube:

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:build
[INFO] Skenujem projekty...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Skladám random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] k8s: Spúšťam v Kubernetes móde
[INFO] k8s: Skladám Docker obraz v Kubernetes móde
[INFO] k8s: Spúšťam generátor spring-boot
[INFO] k8s: spring-boot: Používam 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": Vytvoril docker-build.tar za 251 milisekúnd
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Složený obraz sha256:a20e5
[INFO] ------------------------------------------------------------------------
[INFO] VÝROBA ÚSPEŠNÁ
[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. Odosielame obraz do docker registra

Po tom, čo sme zložili docker-obraz pri nastavenom push registri (v našom prípade to je docker.io), môžeme odosielať tento obraz do registru. Toto sa vypíše 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] Skenerovanie projektov...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Skladanie 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: Bežím generátor spring-boot
[INFO] k8s: spring-boot: Používam Docker obraz quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 ako základný\/builder
[INFO] k8s: Odoslanie sa týka repozitára [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: súhrn: sha256:9f9eda2a13b8cab1d2c9e474248500145fc09e2922fe3735692f9bda4c76002d veľkosť: 1162
[INFO] k8s: Odoslané docker.io\/rohankanojia\/random-generator:0.0.1 za 7 sekúnd 
[INFO] ------------------------------------------------------------------------
[INFO] ÚSPĚŠNÁ VÝSTAVBA
[INFO] ------------------------------------------------------------------------
[INFO] Celkový čas:  11.222 s
[INFO] Dokončené o: 2020-08-10T11:35:37+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ 

Po odoslaní obrazu je potrebné skontrolovať, či sa dostal do registra. 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 sa objavil na Docker Hub.

Krok 4. Generovanie manifestov Kubernetes zdrojov pre aplikáciu

Takže sme zložili obraz aplikácie, teraz treba napísať manifesty Kubernetes. Na to má Eclipse JKube úlohu, ktorá generuje statické manifesty zdrojov, vychádzajúc z podkladového Java rámca (Spring Boot, Quarkus, Vert.x alebo iný). Tiež je možné nastaviť manifest pomocou konfiguračného XML súboru a umiestniť raw-fragmenty (fragmenty 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 generovaných manifestov.

V našom príklade nechávame všetko tak, ako je, a preto Eclipse JKube generuje manifest pre predvolené nasadenie a pre službu s typom ClusterIP. A potom modifikujeme manifest služby, aby sme zmenili typ služby na NodePort. Predvolené správanie možno 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] Skenujem projekty...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Staviam random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:resource (default-cli) @ random-generator ---
[INFO] k8s: Spúšťam generátor spring-boot
[INFO] k8s: spring-boot: Používam Docker image quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 ako základ / builder
[INFO] k8s: jkube-controller: Pridávam predvolenú Deployment
[INFO] k8s: jkube-service: Pridávam predvolenú službu 'random-generator' s portami [8080]
[INFO] k8s: jkube-healthcheck-spring-boot: Pridávam záťažový test na porte 8080, cesta='\/actuator\/health', schéma='HTTP', s počiatočným oneskorením 10 sekúnd
[INFO] k8s: jkube-healthcheck-spring-boot: Pridávam životnosťový test na porte 8080, cesta='\/actuator\/health', schéma='HTTP', s počiatočným oneskorením 180 sekúnd
[INFO] k8s: jkube-revision-history: Pridávam limit histórie revízií na 2
[INFO] ------------------------------------------------------------------------
[INFO] ÚSPEŠNÁ VÝSTAVBA
[INFO] ------------------------------------------------------------------------
[INFO] Celkový čas:  3.344 s
[INFO] Dokončené o: 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. Nasadzujeme aplikáciu v klasteri Kubernetes

Takže máme všetko pripravené na nasadenie aplikácie: vygenerovali sme jej obraz a následne automaticky vygenerovali manifesty zdrojov. Teraz stačí všetko aplikovať do klastera 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. Požiadame Eclipse JKube, aby vykonal úlohu apply mvn k8s:apply a toto bude na obrazovke:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:apply
[INFO] Skenujem projekty...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Sestavovanie 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žívanie 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žívanie namespace: default
[INFO] k8s: Vytváranie služby z kubernetes.yml namespace default názov random-generator
[INFO] k8s: Vytvorená služba: target\/jkube\/applyJson\/default\/service-random-generator.json
[INFO] k8s: Vytváranie nasadenia z kubernetes.yml namespace default názov random-generator
[INFO] k8s: Vytvorené nasadenie: target\/jkube\/applyJson\/default\/deployment-random-generator.json
[INFO] k8s: NÁVOD: Použite príkaz `kubectl get pods -w` na sledovanie štartu vašich podov
[INFO] ------------------------------------------------------------------------
[INFO] VÝSTAVBA ÚSPEŠNÁ
[INFO] ------------------------------------------------------------------------
[INFO] Celkový čas:  7.306 s
[INFO] Dokončené o: 2020-08-10T11:40:57+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ kubectl get pods -w
NÁZOV                                                     READY   STATUS             RESTARTS   AGE
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        KLUSTER-IP      EXTERNÝ-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 .
  % Celkový    % Prijatý % Prenesený  Priemerná Rýchlosť   Čas    Čas     Čas  Aktuálny
                                 Dload  Upload   Celkový   Strávený   Zostávajúci  Rýchlosť
100    45    0    45    0     0   1800      0 --:--:-- --:--:-- --:--:--  1875
{
  "id": "42e5571f-a20f-44b3-8184-370356581d10"
}

Krok 6. Odstraňujeme aplikáciu z klastrov Kubernetes

Na to sa používa úloha undeploy, ktorá jednoducho odstraňuje všetky zdroje, ktoré boli aplikované 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 o vykonanie úlohy 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 sa dá urobiť s Eclipse JKube

Takže sme sa pozreli na hlavné ú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 si 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 nezohľadnili všetky úlohy, ktoré sú v Eclipse JKube a Kubernetes Maven Plugin, preto uvádzame v Tab.2 zoznam ďalších úloh, ktoré vám môžu byť užitočné.

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

Úloha
Fáza
Popis

k8s:log
VALIDOVAŤ
Získavanie logov z aplikácie, ktorá beží na Kubernetes.

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

k8s:deploy
INSTALL
Vytvorenie forku pre úlohu Install a aplikovanie vygenerovaných manifestov na cluster Kubernetes presne tak, ako v prípade úlohy apply.

k8s:watch
BALÍK
Automatické horúce nasadenie aplikácie prostredníctvom sledovania 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-buildy, zatiaľ čo plugin OpenShift Maven robí buildy S2I. Do nášho projektu nevkladáme žiadne zmeny, okrem odstránenia vlastnosti jkube.generator.name, pretože nie je potrebná pri odosielaní do registra (v štádiu zostavovania OpenShift umiestňuje obraz vo svojom vnútornom registri). A toto je to, čo sa objaví na obrazovke, keď spustíme náš príklad, v ktorom mimochodom vykonávame úlohy goal nie po jednej, ale všetky naraz:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn oc:build oc:resource oc:apply
[INFO] Skanning projekt...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Kompilovanie 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žívanie OpenShift build so stratégiou S2I
[INFO] oc: Beží v režime OpenShift
[INFO] oc: Beží generátor spring-boot
[INFO] oc: spring-boot: Používanie Docker image quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 ako základný\/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 tajnej databázy pullsecret-jkube
[INFO] oc: Používanie tajnej databázy 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: Ukladanie blobov pod "\/var\/cache\/blobs".
[INFO] oc: Získavanie podpisov zdroja obrázku
[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 cieľového obrázku
[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 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: USER root
[INFO] oc: KROK 5: COPY upload\/src \/tmp\/src
[INFO] oc: KROK 6: RUN chown -R 1000:0 \/tmp\/src
[INFO] oc: KROK 7: USER 1000
[INFO] oc: KROK 8: RUN \/usr\/local\/s2i\/assemble
[INFO] oc: INFO S2I zdrojový build s obyčajnými binárkami zistený
[INFO] oc: INFO S2I binárny build z fabric8-maven-plugin zistený
[INFO] oc: INFO Kopírovanie binárok 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: čas="2020-08-10T06:37:49Z" level=info msg="Nesúlad operačného systému obrázku: obrázok používa "", očakávanie "linux""
[INFO] oc: čas="2020-08-10T06:37:49Z" level=info msg="Nesúlad architektúry obrázku: obrázok používa "", očakávanie "amd64""
[INFO] oc: Získavanie podpisov zdroja obrázku
[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 cieľového obrázku
[INFO] oc: Ukladanie podpisov
[INFO] oc: --> 27aaadaf28e
[INFO] oc: 27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Získavanie podpisov zdroja obrázku
[INFO] oc: 
[INFO] oc: Pushing image 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 cieľového obrázku
[INFO] oc: Ukladanie podpisov
[INFO] oc: Úspešne vytlačené image-registry.openshift-image-registry.svc:5000\/default\/random-generator@sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: Push úspešný
[INFO] oc: Build random-generator-s2i-1 v stave Complete
[INFO] oc: Nájdená značka na ImageStream random-generator značka: 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žívanie názvu docker image z názvového priestoru: default
[INFO] oc: Beží generátor spring-boot
[INFO] oc: spring-boot: Používanie Docker image quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 ako základný\/builder
[INFO] oc: jkube-controller: Pridávanie predvolenej DeploymentConfig
[INFO] oc: jkube-service: Pridávanie predvoľby služby 'random-generator' s portami [8080]
[INFO] oc: jkube-healthcheck-spring-boot: Pridávanie 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ávanie 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ávanie limitu revíznej histórie na 2
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] oc: Používanie OpenShift na https:\/\/api.crc.testing:6443\/ v názvovom priestore 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žívanie projektu: default
[INFO] oc: Vytváranie služby z openshift.yml názvor default názov random-generator
[INFO] oc: Vytvorená služba: target\/jkube\/applyJson\/default\/service-random-generator.json
[INFO] oc: Vytváranie DeploymentConfig z openshift.yml názvor default názov random-generator
[INFO] oc: Vytvorená DeploymentConfig: target\/jkube\/applyJson\/default\/deploymentconfig-random-generator.json
[INFO] oc: Vytváranie Route default:random-generator host: null
[INFO] oc: NÁVOD: Použite príkaz `oc get pods -w` na sledovanie spustenia vašich pods
[INFO] ------------------------------------------------------------------------
[INFO] VYBUDOVANIE USPELO
[INFO] ------------------------------------------------------------------------
[INFO] Celkový čas:  01:07 min
[INFO] Dokončené v: 2020-08-10T12:08:00+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ oc get pods -w
NÁZOV                           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
NÁZOV                HOST\/PORT                                    CESTA      SLUŽBY            PORT      TERMINÁCIA   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é % Xferd  Priemerná Rýchlosť   Čas    Čas     Čas  Aktuálny
                                 Dload  Upload   Celkom   Strávené   Ľavý  Rýchlosť
100    45    0    45    0     0   1666      0 --:--:-- --:--:-- --:--:--  1730
{
  "id": "d80052d9-2f92-43cb-b9eb-d7cffb879798"
}
~\/work\/repos\/eclipse-jkube-demo-project : $

Video tutorial

Ak chcete zistiť viac o tom, ako zjednodušiť vývoj Kubernetes pomocou Eclipse JKube, pozrite si video tutorial o rýchlom nasadení 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árom 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