Развијање Јава апликација за Кубернетес помоћу Ецлипсе ЈКубе

Пре 25 година, Јава је ушла у главни ток програмирања и на крају постала један од кључних елемената око којих се граде стекови апликација. Данас, међутим, многи људи и организације које су лојалне Јави дуги низ година су заузете миграцијом или разматрањем миграције на платформу. Кубернетес или његових деривата као нпр Ред Хат ОпенСхифт или Амазон ЕКС.

Развијање Јава апликација за Кубернетес помоћу Ецлипсе ЈКубе

Нажалост, Кубернетес има стрму криву учења и уводи још један оперативни слој у процес развоја на који су Јава програмери навикли. Данас ћемо вам рећи како да користите Ецлипсе ЈКубе, да би се поједноставиле ове додатне операције повезане са Кубернетес-ом и контејнерима и обезбедила безболна миграција на платформу у облаку уз одржавање познатог Јава екосистема. Штавише, показаћемо како да примените Јава апликације на ОпенСхифт платформи користећи ОпенСхифт Мавен додатак.

Традиционални Јава развојни процес

Традиционални развојни процес Јава (Слика 1) укључује писање кода програмера, затим креирање јединица за примену у облику ЈАР или ВАР датотека, а затим постављање и покретање ових датотека на веб серверу или серверу апликација. Главни начин да то урадите је да користите Мавен из командне линије или користите ИДЕ као што је ИнтеллиЈ или Ецлипсе за кодирање и паковање апликација. Програмери су навикли да уносе измене кода и све темељно тестирају пре него што урезују код и предају га контроли верзија.

Развијање Јава апликација за Кубернетес помоћу Ецлипсе ЈКубе

Пиринач. 1. Традиционални Јава развојни процес.

Јава развојни процес за облак

Приликом преласка на апликације у облаку, Кубернетес и Контејнери. Стога, сада програмер треба да упакује Јава апликације слике контејнера и креирајте Кубернетес манифесте који описују ове слике. Ови манифести се затим примењују на производни сервер на коме ради Кубернетес. Заузврат, Кубернетес узима ове слике из регистра и поставља апликације према конфигурацијама које смо написали у манифестима, а то су обично ИАМЛ датотеке.

Метаморфоза традиционалног процеса развоја Јаве у преласку на облак приказана је на Сл. 2.

Развијање Јава апликација за Кубернетес помоћу Ецлипсе ЈКубе

Пиринач. 2. Јава развојни процес за облак.

Ецлипсе ЈКубе

Прелазак на Кубернетес додаје још један оперативни слој у процес развоја, а многи програмери су нервозни због тога јер желе да се фокусирају на свој основни посао – логику апликације – уместо на то како да их примене. И ту долази до изражаја. Ецлипсе ЈКубе, што омогућава програмерима да користе своје библиотеке и додатке (ЈКубе Кит са Кубернетес Мавен додатак или ОпенСхифт Мавен додатак) да без напора изводите контејнерске и Кубернетес операције пратећи дијаграм на слици. 2.

У остатку овог чланка показаћемо вам како да поједноставите процес развоја Јаве у Кубернетес окружењу користећи Ецлипсе ЈКубе са Кубернетес Мавен додатком.

Процес развоја облака користећи Ецлипсе ЈКубе

Хајде да размотримо мало модификовану Јава развојну шему за облак са слике 2, уводећи Ецлипсе ЈКубе и Кубернетес Мавен Плугин у њу, као што је приказано на Сл. 3.

Развијање Јава апликација за Кубернетес помоћу Ецлипсе ЈКубе

Пиринач. 3. Јава развојни процес за облак користећи Ецлипсе ЈКубе.

Као што видимо, овде су све операције за интеракцију са Кубернетес-ом и контејнерима (на дијаграму означене црвеном бојом) замењене подразумеваним задацима Ецлипсе ЈКубе циља, који су наведени у табели. 1.

Сто 1. Ецлипсе ЈКубе подразумевани задаци.

Задатак
Сцена
Опис

к8с:буилд
ПРЕ_ИНТЕГРАТИОН_ТЕСТ
Израда доцкер слика

к8с:пусх
ИНСТАЛЛ
Отпремање доцкер слика у регистар

к8с: ресурс
ПРОЦЕСС_РЕСОУРЦЕС
Генерисање К8с манифеста

к8с:примени
САСТАВИТИ
Примена генерисаних манифеста на К8с

к8с:ундеплои
УНДЕПЛАИ
Уклањање К8с ресурса који су распоређени помоћу к8с:аппли и к8с:деплои

Напомена: Ако не желите да задаци користе ове подразумеване вредности, можете ручно да конфигуришете Ецлипсе ЈКубе за себе, пошто подржава конфигурисање преко КСМЛ и ресурсы.

Сада погледајмо примере коришћења Ецлипсе ЈКубе и Кубернетес Мавен додатка при раду са апликацијама.

Примена Јава апликације на Кубернетес помоћу Ецлипсе ЈКубе

У овом примеру ћемо поставити једноставну Јава апликацију на кластер Миникубе користећи Ецлипсе ЈКубе. Користећи Кубернетес Мавен Плугин, можемо подесити параметре примене без потребе за писањем било какве конфигурације.

Као пример апликације користимо једноставан генератор случајних бројева, који производи ЈСОН излаз на /рандом крајњој тачки:

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

Корак 1. Преузмите додатак за Кубернетес Мавен

Кубернетес Мавен додатак је у спремишту Мавен Централ Репоситори. Да бисте користили Ецлипсе ЈКубе, потребно је да додате Кубернетес Мавен додатак у свој пом.кмл као зависност:

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

Ако се ОпенСхифт користи уместо чистог Кубернетеса, онда се пом.кмл мења на следећи начин:

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

Корак 2. Направите доцкер слику

ЈАР датотека апликације се може направити помоћу команде пакета мвн, а затим се мвн циљ задатак к8с:буилд може користити за прављење доцкер слике апликације. Имајте на уму да смо заменили подразумевано име слике овим својством:

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

Пре него што направите слику, морате да се уверите да је доцкер демон исправно изложен. Ово се може урадити следећом командом:

$ eval $(minikube docker-env)

Затим уносимо команду мвн к8с:буилд, а ово је оно што ћемо видети на екрану када правимо доцкер слику користећи Ецлипсе ЈКубе задатак изградње:

~/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 : $

Корак 3. Отпремите слику у доцкер регистар

Након што смо направили доцкер слику са конфигурисаним пусх регистром (у нашем случају то је доцкер.ио), можемо послати ову слику у регистар. Ово ће бити приказано након што замолимо Ецлипсе ЈКубе да изврши мвн к8с:пусх пусх задатак:

~/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 : $ 

Након слања слике, потребно је да проверите да ли је укључена у регистар. У нашем случају, једноставно га видимо у Доцкер Хуб-у, као што је приказано на Сл. 4.

Развијање Јава апликација за Кубернетес помоћу Ецлипсе ЈКубе

Пиринач. 4. Слика послата у регистар појавила се у Доцкер Хуб-у.

Корак 4. Генеришите Кубернетес манифесте ресурса за апликацију

Дакле, прикупили смо слику апликације, сада треба да напишемо Кубернетес манифесте. Да би то урадио, Ецлипсе ЈКубе има задатак који генерише круте манифесте ресурса на основу основног Јава оквира (Пролећна чизма, Куаркус, Верт.к или неки други). Такође можете прилагодити манифест коришћењем КСМЛ конфигурационе датотеке и постављањем необрађених фрагмената (фрагмената манифеста потребних ресурса) у фасциклу апликације срц/маин/јкубе. У овом случају, ваша конфигурација ће бити отпремљена у генерисане манифесте.

У нашем примеру остављамо све како јесте и стога Ецлипсе ЈКубе генерише манифест за подразумевану примену и за услугу типа ЦлустерИП. И тек онда мењамо манифест услуге да променимо тип услуге у НодеПорт. Можете заобићи подразумевано понашање користећи следеће својство:

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

Овако изгледа излаз на екрану након што замолимо Ецлипсе ЈКубе да изврши задатак ресурса мвн к8с:ресоурце.

~/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 : $

Корак 5. Поставите апликацију у Кубернетес кластер

Сада смо спремни да применимо апликацију: генерисали смо њену слику, а затим аутоматски генерисали манифесте ресурса. Сада остаје само да се све ово примени на Кубернетес кластер. Да бисте применили апликацију, можете, наравно, да користите команду кубецтл аппли -ф, али додатак то може да уради уместо нас. Ово ће се појавити на екрану након што замолимо Ецлипсе ЈКубе да изврши задатак мвн к8с:аппли аппли:

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

Корак 6. Поништите примену апликација из Кубернетес кластера

Да би се то урадило, користи се задатак ундеплои, који једноставно уклања све ресурсе који су примењени у претходном кораку, односно када се изврши задатак примене. Ово је оно што ћемо видети на екрану након што замолимо Ецлипсе ЈКубе да изврши задатак мвн к8с: ундеплои ундеплои:

~/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 : $

Шта још можете да урадите са Ецлипсе ЈКубе-ом

Дакле, погледали смо главне циљне задатке Ецлипсе ЈКубе и Кубернетес Мавен Плугин-а, који олакшавају развој Јава апликација за Кубернетес платформу. Ако не желите да стално уносите ове задатке са тастатуре, можете их написати у конфигурацији додатка, на пример, овако:

<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>

Мора се рећи да у овом чланку нисмо узели у обзир све циљне задатке који се налазе у Ецлипсе ЈКубе и Кубернетес Мавен додатку, па смо у табели 2 дали листу додатних задатака који би вам такође могли бити корисни.

Сто 2. Додатни Ецлипсе ЈКубе циљни задаци.

Задатак
Сцена
Опис

к8с:лог
ПОТВРДИ
Пријем евиденције из апликације која ради на Кубернетес-у.

к8с:дебуг
ПАКЕТ
Отворите порт за отклањање грешака да бисте могли да отклањате грешке у апликацији која ради на Кубернетес-у директно из ИДЕ-а.

к8с:деплои
ИНСТАЛЛ
Креирање виљушке за задатак Инсталл и примена генерисаних манифеста на Кубернетес кластер на исти начин као у случају задатка примене.

к8с:ватцх
ПАКЕТ
Аутоматска врућа примена апликације праћењем њеног именског простора.

Примена Јава апликација на Ред Хат ОпенСхифт помоћу ОпенСхифт Мавен додатка

Да бисмо применили апликацију из нашег примера на платформи Ред Хат ОпенСхифт, користимо додатак ОпенСхифт Мавен. Једина разлика ће бити у томе што ће се префикс задатка променити са к8с на оц. Подразумевано ради Кубернетес Мавен додатак доцкер-склопови, и ОпенСхифт Мавен додатак - склопови С2И. Не правимо никакве измене у нашем пројекту осим уклањања својства јкубе.генератор.наме пошто оно није потребно приликом притискања у регистар (ОпенСхифт смешта слику у свој интерни регистар током фазе прављења). А ево шта ће се појавити на екрану када покренемо наш пример, у којем, узгред буди речено, извршавамо циљне задатке не један по један, већ све одједном:

~/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 : $

Видео лекција

Да бисте сазнали више о томе како да олакшате развој Кубернетеса помоћу Ецлипсе ЈКубе, погледајте овај видео водич о томе како брзо применити једноставну апликацију Спринг Боот на Миникубе:

Закључак

У овом чланку смо показали како Ецлипсе ЈКубе олакшава живот Јава програмеру када ради са Кубернетес-ом. Више информација о Ецлипсе ЈКубе-у можете пронаћи на сајт пројекта и ГитХуб.

Извор: ввв.хабр.цом

Додај коментар