Vývoj Java aplikací pro Kubernetes s využitím Eclipse JKube

Před 25 lety se Java dostala do rukou širokého zástupu programátorů, aby se nakonec stala jedním z pilířů, kolem kterých se budují aplikační stacky. Dnes však mnozí lidé a organizace, které mnoho let věrně používaly Java, přecházejí nebo zvažují přechod na platformu Kubernetes nebo její odvozené varianty, jako jsou Red Hat OpenShift nebo Amazon EKS.

Vývoj Java aplikací pro Kubernetes s využitím Eclipse JKube

Bohužel, Kubernetes má strmou křivku učení a zavádí další úroveň provozu do pro Java programátory obvyklého vývojového procesu. Dnes se podíváme na to, jak použít Eclipse JKube, abychom zjednodušili tyto dodatečné operace související s Kubernetes a kontejnery, a zajistili bezproblémovou migraci na cloudovou platformu při zachování běžné Java ekosystému. Navíc ukážeme, jak nasazovat Java aplikace na platformě OpenShift pomocí pluginu OpenShift Maven.

Tradiční proces Java vývoje

Tradiční vývojový proces Javy (Obr. 1) předpokládá, že programátor píše kód, poté vytváří jednotky nasazení ve formě souborů JAR nebo WAR a následně tyto soubory nasazuje a spouští na webovém serveru nebo serveru aplikací. K tomu se většinou používá Maven z příkazového řádku nebo IDE, jako je IntelliJ nebo Eclipse, kódování a balení aplikací. Vývojáři jsou zvyklí upravovat kód a pečlivě ho testovat, než jej zafixují a odešlou do systému správy verzí.

Vývoj Java aplikací pro Kubernetes s využitím Eclipse JKube

Obr. 1. Tradiční proces Java vývoje.

Proces Java vývoje pro cloud

Při přechodu na cloudové aplikace se do výše popsaného schématu přidávají Kubernetes a kontejnery. Proto nyní musí programátor zabalit Java aplikace do kontejnerových obrazů a vytvořit Kubernetes manifesty, které tyto obrazy popisují. Tyto manifesty se poté aplikují na produkční server, na kterém běží Kubernetes. Samotný Kubernetes vezme tyto obrazy z registru a nasadí aplikace podle těchto konfigurací, které jsme popsali v manifestech, které obvykle představují soubory YAML.

Metamorfóza tradičního procesu Java vývoje při přechodu na cloud je zobrazena na Obr. 2.

Vývoj Java aplikací pro Kubernetes s využitím Eclipse JKube

Obr. 2. Proces Java vývoje pro cloud.

Eclipse JKube

Přechod na Kubernetes přidává další operační úroveň do vývojového procesu, což mnohé vývojáře znervózňuje, protože se chtějí soustředit na svou hlavní práci – logiku aplikací – a ne na to, jak je nasadit. A zde přichází do hry Eclipse JKube, který vývojářům umožňuje používat jejich knihovny a pluginy (JKube Kit spolu s Kubernetes Maven Plugin nebo OpenShift Maven Plugin), aby bez zbytečného úsilí prováděli operace spojené s kontejnery a Kubernetes, podle schématu na Obr. 2.

V následující části tohoto článku ukážeme, jak zjednodušit proces Java vývoje v prostředí Kubernetes pomocí Eclipse JKube s pluginem Kubernetes Maven Plugin.

Vývojový proces pro cloud s použitím Eclipse JKube

Podívejme se na mírně modifikované schéma Java vývoje pro cloud z Obr. 2, zavádějící Eclipse JKube a Kubernetes Maven Plugin, jak je znázorněno na Obr. 3.

Vývoj Java aplikací pro Kubernetes s využitím Eclipse JKube

Obr. 3. Proces Java vývoje pro cloud pomocí Eclipse JKube.

Jak vidíme, všechny operace pro interakci s Kubernetes a kontejnery (v diagramu vyznačeno červeně) jsou nahrazeny výchozími cíli Eclipse JKube, které jsou uvedeny v Tab. 1.

Tab. 1. Výchozí úkoly Eclipse JKube.

Úkol
Fáze
Popis

k8s:build
PRE_INTEGRATION_TEST
Stavba docker obrazů

k8s:push
INSTALL
Odeslání docker obrazů do registru

k8s:resource
PROCESS_RESOURCES
Generování manifestů K8s

k8s:apply
COMPILE
Použití vygenerovaných manifestů na K8s

k8s:undeploy
UNDEPLOY
Odstranění prostředků K8s, které byly nasazeny pomocí k8s:apply a k8s:deploy

Poznámka: Pokud nechcete, aby úkoly používaly tyto přísné výchozí hodnoty (opinionated defaults), můžete si Eclipse JKube nastavit podle sebe, protože podporuje konfiguraci prostřednictvím XML a zdroje.

Nyní se podíváme na příklady použití Eclipse JKube a Kubernetes Maven Plugin při práci s aplikacemi.

Nasazení Java aplikace na Kubernetes pomocí Eclipse JKube

V tomto příkladu nasadíme jednoduchou Java aplikaci do clusteru Minikube pomocí Eclipse JKube. Pomocí Kubernetes Maven Plugin můžeme stanovit parametry nasazení, aniž bychom museli zadávat jakoukoli konfiguraci.

Jako příklad aplikace používáme jednoduchý generátor náhodných čísel, který vydává JSON výstup na koncovém bodě /random:

~ /work/repos/eclipse-jkube-demo-project : $ curl localhost:8080/random | jq .
  % Celkem    % Přijato % Odesláno  Průměrná Rychlost   Čas    Čas     Čas  Aktuální
                                 Stáhnout  Nahrát   Celkem   Stráveno   Zbývá  Rychlost
100    45    0    45    0     0    818      0 --:--:-- --:--:-- --:--:--   818
{
  "id": "e80a4d10-c79b-4b9a-aaac-7c286cb37f3c"
}

Krok 1. Nahráváme Kubernetes Maven Plugin

Kubernetes Maven Plugin je v repozitáři Maven Central Repository. Abychom mohli použít Eclipse JKube, musíme přidat Kubernetes Maven Plugin do svého pom.xml jako závislost:

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

Pokud místo čistého Kubernetes používáme OpenShift, musíme pom.xml modifikovat následujícím způsobem:

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

Krok 2. Sestavujeme docker-image

JAR soubor aplikace můžeme sestavit příkazem mvn package, a poté použít goal úlohu mvn k8s:build k sestavení docker-image této aplikace. Všimněte si, že jsme přepsali výchozí název image pomocí této vlastnosti:

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

Než začneme sestavovat image, musíme se ujistit, že docker démon je správně vystaven. To lze provést následujícím příkazem:

$ eval $(minikube docker-env)

Poté zadáme příkaz mvn k8s:build, a toto uvidíme na obrazovce při sestavování docker-image pomocí build úlohy Eclipse JKube:

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:build
[INFO] Skenování pro projekty...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Sestavování random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] k8s: Běží v režimu Kubernetes
[INFO] k8s: Budování Docker image v režimu Kubernetes
[INFO] k8s: Běží generátor spring-boot
[INFO] k8s: spring-boot: Používá Docker image quay.io/jkube/jkube-java-binary-s2i:0.0.7 jako základ / builder
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Vytvořen docker-build.tar za 251 milisekund
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Sestaven image sha256:a20e5
[INFO] ------------------------------------------------------------------------
[INFO] VÝSTAVBA ÚSPĚŠNÁ
[INFO] ------------------------------------------------------------------------
[INFO] Celkový čas:  5.053 s
[INFO] Dokončeno v: 2020-08-10T11:28:23+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $

Krok 3. Odesíláme image do docker registru

Poté, co jsme sestavili docker-image při nastaveném push registru (v našem případě je to docker.io), můžeme tento image odeslat do registru. Toto se zobrazí na obrazovce poté, co požádáme Eclipse JKube, aby provedla úlohu push mvn k8s:push:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:push
[INFO] Skenujeme projekty...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Kompilujeme random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:push (default-cli) @ random-generator ---
[INFO] k8s: Běží v módě Kubernetes
[INFO] k8s: Stavíme Docker image v módu Kubernetes
[INFO] k8s: Běžíme generátor spring-boot
[INFO] k8s: spring-boot: Používáme Docker image quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 jako základ \/ builder
[INFO] k8s: Push odkazuje na repozitář [docker.io\/rohankanojia\/random-generator]
5dcd9556710f: Vrstva již existuje 
b7139ad07aa8: Vrstva již existuje 
b6f081e4b2b6: Vrstva již existuje 
d8e1f35641ac: Vrstva již existuje 
[INFO] k8s: 0.0.1: digest: sha256:9f9eda2a13b8cab1d2c9e474248500145fc09e2922fe3735692f9bda4c76002d velikost: 1162
[INFO] k8s: Pushnuto docker.io\/rohankanojia\/random-generator:0.0.1 za 7 sekund 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD ÚSPĚŠNÝ
[INFO] ------------------------------------------------------------------------
[INFO] Celkový čas:  11.222 s
[INFO] Dokončeno: 2020-08-10T11:35:37+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ 

Po odeslání image je potřeba zkontrolovat, že se dostal do registru. V našem případě ho vidíme na Docker Hub, jak je ukázáno na Obr. 4.

Vývoj Java aplikací pro Kubernetes s využitím Eclipse JKube

Obr. 4. Odeslaný image se objevil na Docker Hub.

Krok 4. Generování manifestů Kubernetes zdrojů pro aplikaci

Takže, image aplikace jsme sestavili, nyní musíme napsat Kubernetes manifesty. K tomu má Eclipse JKube úkol, který generuje pevné manifesty zdrojů na základě podkladového Java frameworku (Spring Boot, Quarkus, Vert.x nebo nějakého jiného). Také lze manifest nastavit pomocí konfiguračního XML souboru a umístěním raw fragmentů (fragmenty požadovaných manifestů zdrojů) do složky aplikace src\/main\/jkube. V takovém případě bude vaše konfigurace zahrnuta do generovaných manifestů.

V našem příkladu necháváme vše, jak je, a proto Eclipse JKube generuje manifest pro výchozí nasazení a pro službu typu ClusterIP. Poté modifikujeme manifest služby, abychom změnili typ služby na NodePort. Výchozí chování lze přepsat pomocí následujícího vlastnosti:

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

Takto vypadá výstup obrazovky poté, co požádáme Eclipse JKube, aby provedl resource úkol mvn k8s:resource.

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:resource
[INFO] Skenuji projekty...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Sestavení random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:resource (default-cli) @ random-generator ---
[INFO] k8s: Spouštím generátor spring-boot
[INFO] k8s: spring-boot: Používám Docker obraz quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 jako základ \/ builder
[INFO] k8s: jkube-controller: Přidávám standardní nasazení
[INFO] k8s: jkube-service: Přidávám standardní službu 'random-generator' s porty [8080]
[INFO] k8s: jkube-healthcheck-spring-boot: Přidávám readiness probe na portu 8080, cesta='\/actuator\/health', schéma='HTTP', s počátečním zpožděním 10 sekund
[INFO] k8s: jkube-healthcheck-spring-boot: Přidávám liveness probe na portu 8080, cesta='\/actuator\/health', schéma='HTTP', s počátečním zpožděním 180 sekund
[INFO] k8s: jkube-revision-history: Přidávám limit historie revizí na 2
[INFO] ------------------------------------------------------------------------
[INFO] ÚSPĚŠNÉ S MENÍM
[INFO] ------------------------------------------------------------------------
[INFO] Celkový čas:  3.344 s
[INFO] Skončeno: 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. Nasazujeme aplikaci do klastru Kubernetes

Takže jsme připraveni k nasazení aplikace: vygenerovali jsme její obraz a poté automaticky vytvořili manifesty zdrojů. Nyní zbývá jen vše aplikovat na klastr Kubernetes. Pro nasazení aplikace můžete samozřejmě použít příkaz kubectl apply -f, ale plugin to také může udělat za nás. Takhle bude vypadat obrazovka po tom, co požádáme Eclipse JKube, aby vykonal úlohu apply mvn k8s:apply:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:apply
[INFO] Prohledávání projektů...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Kompilace 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žití Kubernetes na https:\/\/192.168.39.145:8443\/ v prostoru názvů default s manifestem \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/classes\/META-INF\/jkube\/kubernetes.yml 
[INFO] k8s: Použití prostoru názvů: default
[INFO] k8s: Vytvoření služby z kubernetes.yml v prostoru názvů default s názvem random-generator
[INFO] k8s: Vytvořena služba: target\/jkube\/applyJson\/default\/service-random-generator.json
[INFO] k8s: Vytvoření nasazení z kubernetes.yml v prostoru názvů default s názvem random-generator
[INFO] k8s: Vytvořeno nasazení: target\/jkube\/applyJson\/default\/deployment-random-generator.json
[INFO] k8s: TIP: Použijte příkaz `kubectl get pods -w` pro sledování, jak se vaše pody spouštějí
[INFO] ------------------------------------------------------------------------
[INFO] VÝSTAVBA ÚSPĚŠNÁ
[INFO] ------------------------------------------------------------------------
[INFO] Celkový čas:  7.306 s
[INFO] Dokončeno: 2020-08-10T11:40:57+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ kubectl get pods -w
NAME                                                     READY   STATUS             RESTARTS   AGE
random-generator-58b7847d7f-9m9df                        0\/1     Běžící            0          7s
random-generator-58b7847d7f-9m9df                        1\/1     Běžící            0          17s
^C~\/work\/repos\/eclipse-jkube-demo-project : $ kubectl get svc
NAME                                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
io-openliberty-sample-getting-started   NodePort    10.110.4.104    <none>        9080:30570\/TCP    44h
kubernetes                              ClusterIP   10.96.0.1       <none>        443\/TCP           18d
random-generator                        NodePort    10.97.172.147   <none>        8080:32186\/TCP    22s
~\/work\/repos\/eclipse-jkube-demo-project : $ curl `minikube ip`:32186\/random | jq .
  % Celkem    % Přijato % Přenosu  Průměrná Rychlost   Čas    Čas     Čas  Aktuální
                                 Dload  Upload   Celkem   Stráveno   Zbývá  Rychlost
100    45    0    45    0     0   1800      0 --:--:-- --:--:-- --:--:--  1875
{
  "id": "42e5571f-a20f-44b3-8184-370356581d10"
}

Krok 6. Odstraňování aplikace z klastru Kubernetes

K tomu se používá úkol undeploy, který jednoduše odstraňuje všechny prostředky, které byly použity v předchozím kroku, tedy při provádění úkolu apply. Zde je to, co uvidíme na obrazovce, poté co požádáme Eclipse JKube, aby provedl úkol undeploy pomocí 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 : $

Co dalšího lze udělat s Eclipse JKube

Takže jsme prozkoumali hlavní cíle Eclipse JKube a Kubernetes Maven Plugin, které usnadňují vývoj Java aplikací pro platformu Kubernetes. Pokud se vám nechce stále zadávat tyto úkoly z klávesnice, můžete je zapsat do konfigurace pluginu, například takto:

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

Musíme říci, že v tomto článku jsme neprobrali všechny cíle, které existují v Eclipse JKube a Kubernetes Maven Plugin, proto uvádíme v Tab. 2 seznam dalších úkolů, které vám také mohou přijít vhod.

Tab. 2. Další cíle Eclipse JKube.

Úkol
Fáze
Popis

k8s:log
VALIDATE
Získání logů z aplikace běžící na Kubernetes.

k8s:debug
PACKAGE
Otevření ladicího portu pro ladění aplikace běžící na Kubernetes přímo z IDE.

k8s:deploy
INSTALL
Vytvoření forku pro úlohu Install a aplikace generovaných manifestů do clusteru Kubernetes stejným způsobem jako u úlohy apply.

k8s:watch
PACKAGE
Automatické horké nasazení aplikace sledováním jejích jmenných prostorů.

Nasazení Java aplikací na Red Hat OpenShift pomocí OpenShift Maven Plugin.

Pro nasazení aplikace z našeho příkladu na platformě Red Hat OpenShift použijeme plugin. OpenShift Maven. Jediným rozdílem bude, že prefix úloh se změní z k8s na oc. Ve výchozím nastavení plugin Kubernetes Maven provádí docker-buildy, zatímco plugin OpenShift Maven provádí buildy. S2I. Do našeho projektu neprovádíme žádné změny, kromě odstranění vlastnosti jkube.generator.name, protože tato není potřebná při odesílání do registru (v průběhu sestavení OpenShift umístí obraz do svého interního registru). A tady je to, co se objeví na obrazovce, když spustíme náš příklad, ve kterém mimochodem provádíme úkoly ne po jednotlivých, ale všechny najednou:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn oc:build oc:resource oc:apply
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Building random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] oc: Using OpenShift build with strategy S2I
[INFO] oc: Running in OpenShift mode
[INFO] oc: Running generator spring-boot
[INFO] oc: spring-boot: Using Docker image quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 as base \/ builder
[INFO] oc: [random-generator:0.0.1] "spring-boot": Created docker source tar \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/docker\/random-generator\/0.0.1\/tmp\/docker-build.tar
[INFO] oc: Adding to Secret pullsecret-jkube
[INFO] oc: Using Secret pullsecret-jkube
[INFO] oc: Creating BuildServiceConfig random-generator-s2i for Source build
[INFO] oc: Creating ImageStream random-generator
[INFO] oc: Starting Build random-generator-s2i
[INFO] oc: Waiting for build random-generator-s2i-1 to complete...
[INFO] oc: Caching blobs under "/var/cache/blobs".
[INFO] oc: Getting image source signatures
[INFO] oc: Copying blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Copying blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Copying blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Copying config sha256:52d6788fcfdd39595264d34a3959464a5dabc1d4ef0ae188802b20fc2d6a857b
[INFO] oc: Writing manifest to image destination
[INFO] oc: Storing signatures
[INFO] oc: Generating dockerfile with builder image quay.io\/jkube\/jkube-java-binary-s2i:0.0.7
[INFO] oc: STEP 1: FROM quay.io\/jkube\/jkube-java-binary-s2i:0.0.7
[INFO] oc: STEP 2: LABEL "io.openshift.build.source-location"="\/tmp\/build\/inputs"       "io.openshift.build.image"="quay.io\/jkube\/jkube-java-binary-s2i:0.0.7"
[INFO] oc: STEP 3: ENV JAVA_APP_DIR="\/deployments"     OPENSHIFT_BUILD_NAME="random-generator-s2i-1"     OPENSHIFT_BUILD_NAMESPACE="default"
[INFO] oc: STEP 4: USER root
[INFO] oc: STEP 5: COPY upload\/src \/tmp\/src
[INFO] oc: STEP 6: RUN chown -R 1000:0 \/tmp\/src
[INFO] oc: STEP 7: USER 1000
[INFO] oc: STEP 8: RUN \/usr\/local\/s2i\/assemble
[INFO] oc: INFO S2I source build with plain binaries detected
[INFO] oc: INFO S2I binary build from fabric8-maven-plugin detected
[INFO] oc: INFO Copying binaries from \/tmp\/src\/deployments to \/deployments ...
[INFO] oc: random-generator-0.0.1.jar
[INFO] oc: INFO Copying deployments from deployments to \/deployments...
[INFO] oc: '\/tmp\/src\/deployments\/random-generator-0.0.1.jar' -> '\/deployments\/random-generator-0.0.1.jar'
[INFO] oc: STEP 9: CMD \/usr\/local\/s2i\/run
[INFO] oc: STEP 10: COMMIT temp.builder.openshift.io\/default\/random-generator-s2i-1:48795e41
[INFO] oc: time="2020-08-10T06:37:49Z" level=info msg="Image operating system mismatch: image uses "", expecting "linux""
[INFO] oc: time="2020-08-10T06:37:49Z" level=info msg="Image architecture mismatch: image uses "", expecting "amd64""
[INFO] oc: Getting image source signatures
[INFO] oc: Copying blob sha256:d8e1f35641acb80b562f70cf49911341dfbe8c86f4d522b18efbf3732aa74223
[INFO] oc: Copying blob sha256:b6f081e4b2b6de8be4b1dec132043d14c121e968384dd624fb69c2c07b482edb
[INFO] oc: Copying blob sha256:b7139ad07aa8ce4ed5a132f7c5cc9f1de0f5099b5e155027a23d57f7fbe78b16
[INFO] oc: Copying blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Copying config sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Writing manifest to image destination
[INFO] oc: Storing signatures
[INFO] oc: --> 27aaadaf28e
[INFO] oc: 27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Getting image source signatures
[INFO] oc: 
[INFO] oc: Pushing image image-registry.openshift-image-registry.svc:5000\/default\/random-generator:0.0.1 ...
[INFO] oc: Copying blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Copying blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Copying blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Copying blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Copying config sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Writing manifest to image destination
[INFO] oc: Storing signatures
[INFO] oc: Successfully pushed image-registry.openshift-image-registry.svc:5000\/default\/random-generator@sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: Push successful
[INFO] oc: Build random-generator-s2i-1 in status Complete
[INFO] oc: Found tag on ImageStream random-generator tag: sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: ImageStream random-generator written to \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/random-generator-is.yml
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:resource (default-cli) @ random-generator ---
[INFO] oc: Using docker image name of namespace: default
[INFO] oc: Running generator spring-boot
[INFO] oc: spring-boot: Using Docker image quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 as base \/ builder
[INFO] oc: jkube-controller: Adding a default DeploymentConfig
[INFO] oc: jkube-service: Adding a default service 'random-generator' with ports [8080]
[INFO] oc: jkube-healthcheck-spring-boot: Adding readiness probe on port 8080, path='\/actuator\/health', scheme='HTTP', with initial delay 10 seconds
[INFO] oc: jkube-healthcheck-spring-boot: Adding liveness probe on port 8080, path='\/actuator\/health', scheme='HTTP', with initial delay 180 seconds
[INFO] oc: jkube-revision-history: Adding revision history limit to 2
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] oc: Using OpenShift at https:\/\/api.crc.testing:6443\/ in namespace default with manifest \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/classes\/META-INF\/jkube\/openshift.yml 
[INFO] oc: OpenShift platform detected
[INFO] oc: Using project: default
[INFO] oc: Creating a Service from openshift.yml namespace default name random-generator
[INFO] oc: Created Service: target\/jkube\/applyJson\/default\/service-random-generator.json
[INFO] oc: Creating a DeploymentConfig from openshift.yml namespace default name random-generator
[INFO] oc: Created DeploymentConfig: target\/jkube\/applyJson\/default\/deploymentconfig-random-generator.json
[INFO] oc: Creating Route default:random-generator host: null
[INFO] oc: HINT: Use the command `oc get pods -w` to watch your pods start up
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:07 min
[INFO] Finished at: 2020-08-10T12:08:00+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ oc get pods -w
NAME                           READY     STATUS      RESTARTS   AGE
random-generator-1-deploy      1\/1       Running     0          14s
random-generator-1-vnrm9       0\/1       Running     0          11s
random-generator-s2i-1-build   0\/1       Completed   0          1m
random-generator-1-vnrm9   1\/1       Running   0         24s
random-generator-1-deploy   0\/1       Completed   0         28s
~\/work\/repos\/eclipse-jkube-demo-project : $ oc get routes
NAME                HOST\/PORT                                    PATH      SERVICES            PORT      TERMINATION   WILDCARD
random-generator    random-generator-default.apps-crc.testing              random-generator    8080                    None
~\/work\/repos\/eclipse-jkube-demo-project : $ curl random-generator-default.apps-crc.testing\/random 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    45    0    45    0     0   1666      0 --:--:-- --:--:-- --:--:--  1730
{
  "id": "d80052d9-2f92-43cb-b9eb-d7cffb879798"
}
~\/work\/repos\/eclipse-jkube-demo-project : $

Video návod

Chcete-li se dozvědět více o tom, jak zjednodušit vývoj Kubernetes pomocí Eclipse JKube, podívejte se na video návod o rychlém nasazení jednoduché aplikace Spring Boot na Minikube:

Přehrát video

Závěr

V tomto článku jsme ukázali, jak Eclipse JKube usnadňuje život vývojářům Java při práci s Kubernetes. Další informace o Eclipse JKube naleznete na stránkách projektu a na GitHub.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster