Razvoj Java aplikacija za Kubernetes pomoću Eclipse JKube

Prije 25 godina Java je ušla u mainstream programiranja i na kraju postala jedan od ključnih elemenata oko kojih se grade hrpe aplikacija. Danas, međutim, mnogi ljudi i organizacije koji su dugi niz godina bili odani Javi zauzeti su migracijom ili razmišljaju o migraciji na platformu. Kubernetes ili njegove izvedenice kao što su Red Hat OpenShift ili Amazon EKS.

Razvoj Java aplikacija za Kubernetes pomoću Eclipse JKube

Nažalost, Kubernetes ima strmu krivulju učenja i u razvojni proces uvodi još jedan operativni sloj na koji su Java programeri navikli. Danas ćemo vam reći kako koristiti Pomrčina JKube, kako bi se pojednostavile te dodatne operacije povezane s Kubernetesom i spremnicima te osigurala bezbolna migracija na platformu u oblaku uz zadržavanje poznatog Java ekosustava. Štoviše, pokazat ćemo kako implementirati Java aplikacije na platformi OpenShift pomoću dodatka OpenShift Maven.

Tradicionalni Java razvojni proces

Tradicionalni razvojni proces Java (Slika 1) uključuje programer koji piše kod, zatim stvara jedinice za implementaciju u obliku JAR ili WAR datoteka, a zatim implementira i pokreće te datoteke na webu ili aplikacijskom poslužitelju. Glavni način za to je korištenje Mavena iz naredbenog retka ili korištenje IDE-a kao što je IntelliJ ili Eclipse za kodiranje i pakiranje aplikacija. Programeri su navikli mijenjati kod i sve temeljito testirati prije nego što unesu kod i podnose ga kontroli verzija.

Razvoj Java aplikacija za Kubernetes pomoću Eclipse JKube

Riža. 1. Tradicionalni Java razvojni proces.

Java razvojni proces za oblak

Prilikom prelaska na aplikacije u oblaku, Kubernetes i spremnici. Stoga, sada programer treba zapakirati Java aplikacije slike spremnika i stvoriti Kubernetes manifeste koji opisuju te slike. Ti se manifesti zatim primjenjuju na proizvodni poslužitelj koji pokreće Kubernetes. Zauzvrat, Kubernetes uzima te slike iz registra i postavlja aplikacije u skladu s konfiguracijama koje smo napisali u manifestima, koji su obično YAML datoteke.

Metamorfoza tradicionalnog procesa razvoja Jave u prijelazu na oblak prikazana je na sl. 2.

Razvoj Java aplikacija za Kubernetes pomoću Eclipse JKube

Riža. 2. Java razvojni proces za oblak.

Pomrčina JKube

Migracija na Kubernetes dodaje još jedan operativni sloj razvojnom procesu, a mnogi su programeri nervozni zbog toga jer se žele usredotočiti na svoj temeljni posao – logiku aplikacije – umjesto na to kako ih implementirati. I tu dolazi do izražaja. Pomrčina JKube, koji programerima omogućuje korištenje njihovih biblioteka i dodataka (Komplet JKube zajedno s Kubernetes Maven dodatak ili OpenShift Maven dodatak) za jednostavno izvođenje operacija spremnika i Kubernetesa slijedeći dijagram na slici. 2.

U ostatku ovog članka, pokazat ćemo vam kako pojednostaviti razvojni proces Jave u Kubernetes okruženju korištenjem Eclipse JKube s Kubernetes Maven dodatkom.

Proces razvoja oblaka pomoću Eclipse JKube

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

Razvoj Java aplikacija za Kubernetes pomoću Eclipse JKube

Riža. 3. Java razvojni proces za oblak pomoću Eclipse JKube.

Kao što vidimo, ovdje su sve operacije za interakciju s Kubernetesom i spremnicima (označene crvenom bojom na dijagramu) zamijenjene zadanim zadacima cilja Eclipse JKube, koji su navedeni u tablici. 1.

Stol 1. Zadani zadaci Eclipse JKube.

Zadatak
faza
Opis

k8s: graditi
PRE_INTEGRACIJA_TEST
Izrada docker slika

k8s: gurni
INSTALL
Prijenos docker slika u registar

k8s: resurs
PROCESS_RESOURCES
Generiranje K8s manifesta

k8s: primijeniti
SASTAVITI
Primjena generiranih manifesta na K8s

k8s: poništi
NEZAPOSLITI
Uklanjanje K8s resursa koji su raspoređeni pomoću k8s:apply i k8s:deploy

Napomena: Ako ne želite da zadaci koriste ove samouvjerene zadane postavke, možete ručno konfigurirati Eclipse JKube za sebe, budući da podržava konfiguraciju putem XML и resursi.

Sada pogledajmo primjere korištenja Eclipse JKube i Kubernetes Maven Plugina pri radu s aplikacijama.

Postavljanje Java aplikacije na Kubernetes pomoću Eclipse JKube

U ovom primjeru implementirat ćemo jednostavnu Java aplikaciju na klaster Minikube koristeći Eclipse JKube. Koristeći dodatak Kubernetes Maven, možemo postaviti parametre implementacije bez potrebe za pisanjem konfiguracije.

Kao primjer aplikacije koristimo jednostavan generator slučajnih brojeva, koji proizvodi JSON izlaz na /random krajnjoj točki:

~/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"
}

Korak 1. Preuzmite Kubernetes Maven dodatak

Kubernetes Maven Plugin nalazi se u spremištu Središnje spremište Maven. Za korištenje Eclipse JKube morate dodati Kubernetes Maven Plugin u svoj pom.xml kao ovisnost:

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

Ako se koristi OpenShift umjesto čistog Kubernetesa, tada se pom.xml mijenja na sljedeći način:

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

Korak 2. Izgradite docker sliku

JAR datoteka aplikacije može se izgraditi s naredbom mvn package, a zatim se mvn ciljni zadatak k8s:build može koristiti za izgradnju docker slike aplikacije. Imajte na umu da smo ovim svojstvom nadjačali zadani naziv slike:

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

Prije izgradnje slike morate se uvjeriti 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 ovo je ono što ćemo vidjeti na ekranu kada gradimo docker sliku pomoću zadatka izgradnje Eclipse JKube:

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:build
[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:build (default-cli) @ random-generator ---
[INFO] k8s: Running in Kubernetes mode
[INFO] k8s: Building Docker image in Kubernetes mode
[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: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Created docker-build.tar in 251 milliseconds
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Built image sha256:a20e5
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  5.053 s
[INFO] Finished at: 2020-08-10T11:28:23+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $

Korak 3. Učitajte sliku u docker registar

Nakon što smo izgradili docker sliku s konfiguriranim push registrom (u našem slučaju to je docker.io), možemo poslati ovu sliku u registar. Ovo je ono što će se prikazati nakon što zatražimo od Eclipse JKube da izvrši zadatak mvn k8s:push push:

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:push
[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:push (default-cli) @ random-generator ---
[INFO] k8s: Running in Kubernetes mode
[INFO] k8s: Building Docker image in Kubernetes mode
[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: The push refers to repository [docker.io/rohankanojia/random-generator]
5dcd9556710f: Layer already exists 
b7139ad07aa8: Layer already exists 
b6f081e4b2b6: Layer already exists 
d8e1f35641ac: Layer already exists 
[INFO] k8s: 0.0.1: digest: sha256:9f9eda2a13b8cab1d2c9e474248500145fc09e2922fe3735692f9bda4c76002d size: 1162
[INFO] k8s: Pushed docker.io/rohankanojia/random-generator:0.0.1 in 7 seconds 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  11.222 s
[INFO] Finished at: 2020-08-10T11:35:37+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $ 

Nakon slanja slike potrebno je provjeriti je li uvrštena u registar. U našem slučaju, jednostavno ga vidimo u Docker Hubu, kao što je prikazano na sl. 4.

Razvoj Java aplikacija za Kubernetes pomoću Eclipse JKube

Riža. 4. Slika poslana u registar pojavila se u Docker Hubu.

Korak 4. Generirajte manifeste Kubernetes resursa za aplikaciju

Dakle, prikupili smo sliku aplikacije, sada moramo napisati Kubernetes manifeste. Da bi to učinio, Eclipse JKube ima zadatak koji generira krute manifeste resursa na temelju temeljnog Java okvira (Proljetna čizma, kvarkus, Vert.x ili neki drugi). Također možete prilagoditi manifest korištenjem XML konfiguracijske datoteke i postavljanjem neobrađenih fragmenata (fragmenata manifesta potrebnog resursa) u aplikacijsku mapu src/main/jkube. U tom će slučaju vaša konfiguracija biti učitana u generirane manifeste.

U našem primjeru ostavljamo sve kako jest i stoga Eclipse JKube generira manifest za zadanu implementaciju i za uslugu tipa ClusterIP. I tek tada mijenjamo manifest usluge kako bismo promijenili vrstu usluge u NodePort. Možete nadjačati zadano ponašanje pomoću sljedećeg svojstva:

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

Ovako izgleda izlaz na ekranu nakon što od Eclipse JKube zatražimo da izvrši zadatak resursa 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: [email protected]: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. Implementirajte aplikaciju u Kubernetes klaster

Sada smo spremni za implementaciju aplikacije: generirali smo njezinu sliku, a zatim automatski generirali manifeste resursa. Sada samo preostaje primijeniti sve ovo na Kubernetes klaster. Da biste implementirali aplikaciju, možete, naravno, koristiti naredbu kubectl apply -f, ali dodatak to može učiniti za nas. Ovo je ono što će se pojaviti na ekranu nakon što od Eclipse JKube zatražimo da izvrši zadatak mvn k8s:apply apply:

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:apply
[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:apply (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: Creating a Service from kubernetes.yml namespace default name random-generator
[INFO] k8s: Created Service: target/jkube/applyJson/default/service-random-generator.json
[INFO] k8s: Creating a Deployment from kubernetes.yml namespace default name random-generator
[INFO] k8s: Created Deployment: target/jkube/applyJson/default/deployment-random-generator.json
[INFO] k8s: HINT: Use the command `kubectl get pods -w` to watch your pods start up
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  7.306 s
[INFO] Finished at: 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     Running            0          7s
random-generator-58b7847d7f-9m9df                        1/1     Running            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 .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    45    0    45    0     0   1800      0 --:--:-- --:--:-- --:--:--  1875
{
  "id": "42e5571f-a20f-44b3-8184-370356581d10"
}

Korak 6. Poništite implementaciju aplikacija iz Kubernetes klastera

Za to se koristi zadatak poništavanja, koji jednostavno uklanja sve resurse koji su primijenjeni u prethodnom koraku, odnosno kada se izvrši zadatak primjene. Ovo je ono što ćemo vidjeti na ekranu nakon što zatražimo od Eclipse JKube da izvrši zadatak mvn k8s:undeploy 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       <none>        443/TCP          18d
service/random-generator   NodePort    10.97.172.147   <none>        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] ----------------------< meetup:random-generator >-----------------------
[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    <none>        443/TCP   18d
~/work/repos/eclipse-jkube-demo-project : $

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

Dakle, pogledali smo glavne ciljne zadatke Eclipse JKube i Kubernetes Maven Plugin, koji olakšavaju razvoj Java aplikacija za Kubernetes platformu. Ako ne želite stalno unositi ove zadatke s tipkovnice, možete ih napisati u konfiguraciji dodatka, na primjer, ovako:

<plugin>
     <groupId>org.eclipse.jkube</groupId>
     <artifactId>kubernetes-maven-plugin</artifactId>
     <version>${project.version}</version>
     <executions>
         <execution>
             <goals>
                  <goal>build</goal>
                  <goal>resource</goal>
                  <goal>apply</goal>
             </goals>
         </execution>
     </executions>
</plugin>

Mora se reći da u ovom članku nismo razmotrili sve ciljne zadatke koji se nalaze u Eclipse JKube i Kubernetes Maven Pluginu, pa u tablici 2 dajemo popis dodatnih zadataka koji vam također mogu biti od koristi.

Stol 2. Dodatni zadaci cilja Eclipse JKube.

Zadatak
faza
Opis

k8s: log
POTVRDI
Primanje zapisa iz aplikacije koja radi na Kubernetesu.

k8s: otklanjanje pogrešaka
PAKET
Otvorite priključak za ispravljanje pogrešaka kako biste mogli ispravljati pogreške svoje aplikacije koja radi na Kubernetesu izravno iz IDE-a.

k8s: rasporedi
INSTALL
Stvaranje forka za zadatak instalacije i primjena generiranih manifesta na Kubernetes klaster na isti način kao u slučaju zadatka primjene.

k8s: gledaj
PAKET
Automatska vruća implementacija aplikacije praćenjem njezinog imenskog prostora.

Postavljanje Java aplikacija na Red Hat OpenShift pomoću OpenShift Maven dodatka

Za implementaciju aplikacije iz našeg primjera na platformi Red Hat OpenShift koristimo dodatak OpenShift Maven. Jedina će razlika biti u tome što će se prefiks zadatka promijeniti iz k8s u oc. Prema zadanim postavkama radi dodatak Kubernetes Maven lučki radnik-sklopovi, i dodatak OpenShift Maven - sklopovi S2I. Ne radimo nikakve promjene u našem projektu osim uklanjanja svojstva jkube.generator.name jer ono nije potrebno prilikom guranja u registar (OpenShift smješta sliku u svoj interni registar tijekom faze izgradnje). A ovo je ono što će se pojaviti na ekranu kada pokrenemo naš primjer, u kojem, usput rečeno, izvršavamo ciljne zadatke ne jedan po jedan, već sve odjednom:

~/work/repos/eclipse-jkube-demo-project : $ mvn oc:build oc:resource oc:apply
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[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 lekcija

Da biste saznali više o tome kako olakšati razvoj Kubernetesa uz Eclipse JKube, pogledajte ovaj video vodič o tome kako brzo implementirati jednostavnu Spring Boot aplikaciju na Minikube:

Zaključak

U ovom smo članku pokazali kako Eclipse JKube olakšava život Java programeru kada radi s Kubernetesom. Više informacija o Eclipse JKube možete pronaći na web mjesto projekta i GitHub.

Izvor: www.habr.com

Dodajte komentar