Eclipse JKube аркылуу Kubernetes үчүн Java колдонмолорун иштеп чыгуу

25 жыл мурун Java программалоонун негизги агымына кирип, акырында тиркеме стектери курулган негизги элементтердин бири болуп калды. Бирок бүгүнкү күндө көп жылдар бою Javaга лоялдуу болгон көптөгөн адамдар жана уюмдар көчүрүү менен алек болуп жатышат же платформага көчүп кетүүнү ойлонуп жатышат. Kubernetes же анын туундулары, мисалы RedHat OpenShift же Amazon EKS.

Eclipse JKube аркылуу Kubernetes үчүн Java колдонмолорун иштеп чыгуу

Тилекке каршы, Kubernetes тик үйрөнүү ийри сызыгына ээ жана Java программисттери көнүп калган иштеп чыгуу процессине дагы бир операциялык катмарды киргизет. Бүгүн биз кантип колдонуу керектигин айтып беребиз Eclipse JKube, Kubernetes жана контейнерлер менен байланышкан бул кошумча операцияларды жөнөкөйлөтүү жана тааныш Java экосистемасын сактап, булут платформасына оорутпай өтүүнү камсыз кылуу. Мындан тышкары, биз OpenShift Maven плагининин жардамы менен Java тиркемелерин OpenShift платформасында кантип жайгаштырууну көрсөтөбүз.

Салттуу Java өнүктүрүү процесси

Салттуу өнүгүү процесси Java (1-сүрөт) иштеп чыгуучунун кодун жазууну, андан кийин JAR же WAR файлдары түрүндө жайгаштыруу бөлүмдөрүн түзүп, андан кийин бул файлдарды веб же колдонмо серверинде жайгаштырууну жана иштетүүнү камтыйт. Муну жасоонун негизги жолу - Mavenди буйрук сабынан колдонуу же IntelliJ же Eclipse сыяктуу IDEди колдонуу жана колдонмолорду коддоо жана пакеттөө. Иштеп чыгуучулар кодду киргизип, версияны башкарууга тапшырардан мурун кодду өзгөртүүгө жана баарын кылдат сынап көрүүгө көнүшкөн.

Eclipse JKube аркылуу Kubernetes үчүн Java колдонмолорун иштеп чыгуу

Күрүч. 1. Салттуу Java өнүктүрүү процесси.

Булут үчүн Java иштеп чыгуу процесси

Булут колдонмолоруна өтүүдө, Kubernetes жана контейнерлер. Ошондуктан, азыр иштеп чыгуучу Java тиркемелерин топтошу керек контейнер сүрөттөр жана бул сүрөттөрдү сүрөттөгөн Kubernetes манифесттерин түзүңүз. Бул манифесттер андан кийин Kubernetes иштеткен өндүрүш серверине колдонулат. Өз кезегинде, Кубернетес бул сүрөттөрдү реестрден алат жана биз манифесттерде жазган конфигурацияларга ылайык тиркемелерди жайгаштырат, алар көбүнчө YAML файлдары.

Булутка өтүүдөгү салттуу Java өнүгүү процессинин метаморфоздору сүрөттө көрсөтүлгөн. 2.

Eclipse JKube аркылуу Kubernetes үчүн Java колдонмолорун иштеп чыгуу

Күрүч. 2. Булут үчүн Java иштеп чыгуу процесси.

Eclipse JKube

Kubernetes'ке көчүү иштеп чыгуу процессине дагы бир операциялык катмарды кошот жана көптөгөн иштеп чыгуучулар бул жөнүндө тынчсызданышат, анткени алар аларды кантип жайгаштырууга эмес, өздөрүнүн негизги иштерине - колдонмо логикасына көңүл бурууну каалашат. Жана бул жерде ал оюнга келет. Eclipse JKube, бул иштеп чыгуучуларга китепканаларын жана плагиндерин колдонууга мүмкүндүк берет (JKube комплекти бирге Kubernetes Maven плагини же OpenShift Maven плагини) Сүрөттөгү диаграмманы аткаруу менен контейнерге жана Кубернетеске байланыштуу операцияларды оңой аткаруу үчүн. 2.

Бул макаланын калган бөлүгүндө биз Eclipse JKube менен Kubernetes Maven Plugin колдонуу менен Kubernetes чөйрөсүндө Java иштеп чыгуу процессин кантип жөнөкөйлөштүрүү керектигин көрсөтөбүз.

Eclipse JKube аркылуу булутту өнүктүрүү процесси

Сүрөттө көрсөтүлгөндөй, ага Eclipse JKube жана Kubernetes Maven Plugin киргизип, 2-сүрөттөгү булут үчүн бир аз өзгөртүлгөн Java өнүктүрүү схемасын карап көрөлү. 3.

Eclipse JKube аркылуу Kubernetes үчүн Java колдонмолорун иштеп чыгуу

Күрүч. 3. Eclipse JKube аркылуу булут үчүн Java иштеп чыгуу процесси.

Көрүнүп тургандай, бул жерде Kubernetes жана контейнерлер менен өз ара аракеттенүү боюнча бардык операциялар (диаграммада кызыл менен белгиленген) Таблицада келтирилген демейки Eclipse JKube максат милдеттери менен алмаштырылган. 1.

Таблица 1. Eclipse JKube демейки тапшырмалары.

маселе
Этап
баяндоо

k8s: куруу
PRE_INTEGRATION_TEST
Докер сүрөттөрүн куруу

k8s: түртүү
INSTALL
Реестрге докер сүрөттөрүн жүктөө

k8s:ресурс
PROCESS_RESOURCES
K8s манифесттерин түзүү

k8s:колдонуу
ТҮЗҮҮ
Түзүлгөн манифесттерди K8ге колдонуу

k8s: undeploy
АЖЫРАТУУ
k8s:apply жана k8s:deploy аркылуу жайгаштырылган K8s ресурстарын алып салуу

Эскертүү: Эгер тапшырмалардын бул демейки параметрлерди колдонушун каалабасаңыз, Eclipse JKube'ду өзүңүз үчүн кол менен конфигурацияласаңыз болот, анткени ал конфигурацияны төмөнкү аркылуу колдойт. XML и ресурстар.

Эми колдонмолор менен иштөөдө Eclipse JKube жана Kubernetes Maven Plugin колдонуу мисалдарын карап көрөлү.

Eclipse JKube аркылуу Kubernetes боюнча Java тиркемесин жайылтуу

Бул мисалда биз кластерге жөнөкөй Java тиркемесин орнотобуз Minikube Eclipse JKube колдонуу. Kubernetes Maven плагинин колдонуу менен биз эч кандай конфигурацияны жазбастан эле жайылтуу параметрлерин орното алабыз.

Мисал катары биз колдонобуз жөнөкөй кокустук сандар генератору, ал /кокустук акыркы чекитинде JSON чыгарууну чыгарат:

~/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-кадам. Kubernetes Maven плагинин жүктөп алыңыз

Kubernetes Maven Plugin репозиторийде Maven борбордук репозиторий. Eclipse JKube колдонуу үчүн Kubernetes Maven плагинин pom.xml файлыңызга көз карандылык катары кошушуңуз керек:

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

Эгер таза Kubernetes ордуна OpenShift колдонулса, анда pom.xml төмөнкүдөй өзгөртүлөт:

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

2-кадам. Докердин сүрөтүн түзүңүз

Тиркеменин JAR файлын mvn пакет буйругу менен курууга болот, андан кийин mvn максаты тапшырмасы k8s:build колдонмонун докер сүрөтүн куруу үчүн колдонулушу мүмкүн. Биз бул касиет менен демейки сүрөт атын жокко чыгарганыбызды эске алыңыз:

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

Сүрөттү куруудан мурун, сиз докер демону туура ачылганын текшеришиңиз керек. Бул төмөнкү буйрук менен жасалышы мүмкүн:

$ eval $(minikube docker-env)

Андан кийин биз mvn k8s:build буйругун киргизебиз жана 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 : $

Кадам 3. Сүрөттү докер реестрине жүктөңүз

Конфигурацияланган push реестри менен докер сүрөтүн кургандан кийин (биздин учурда бул docker.io), биз бул сүрөттү реестрге жөнөтө алабыз. Бул Eclipse JKubeден 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 : $ 

Сүрөттү жөнөткөндөн кийин, анын реестрге киргизилгендигин текшерүү керек. Биздин учурда, биз аны Docker Hub-да көрөбүз, сүрөттө көрсөтүлгөндөй. 4.

Eclipse JKube аркылуу Kubernetes үчүн Java колдонмолорун иштеп чыгуу

Күрүч. 4. Реестрге жөнөтүлгөн сүрөт Docker Hub ичинде пайда болду.

4-кадам. Колдонмо үчүн Kubernetes ресурс манифесттерин түзүңүз

Ошентип, биз колдонмонун сүрөтүн чогулттук, эми биз Kubernetes манифесттерин жазышыбыз керек. Бул үчүн, Eclipse JKube негизги Java негизинин негизинде катуу ресурс манифесттерин түзүүчү тапшырмага ээ (Жазгы жүктөө, кваркус, Vert.x же башка). Сиз ошондой эле XML конфигурация файлын колдонуу жана чийки фрагменттерди (талап кылынган ресурс манифестинин фрагменттери) src/main/jkube колдонмо папкасына жайгаштыруу менен манифестти ыңгайлаштыра аласыз. Бул учурда, конфигурацияңыз түзүлгөн манифесттерге жүктөлөт.

Биздин мисалда биз бардыгын ошол бойдон калтырабыз, ошондуктан Eclipse JKube демейки жайгаштыруу жана ClusterIP түрү менен кызмат үчүн манифест жаратат. Ошондо гана биз кызматтын түрүн NodePort кылып өзгөртүү үчүн кызмат манифестин өзгөртөбүз. Сиз төмөнкү касиетти колдонуп демейки жүрүм-турумду жокко чыгара аласыз:

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

Eclipse JKubeден mvn k8s: ресурстук тапшырманы аткарууну сурангандан кийин экрандын чыгышы ушундай болот.

~/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. Колдонмону Kubernetes кластерине жайгаштырыңыз

Эми биз бардыгыбыз тиркемени жайылтууга даярбыз: анын сүрөтүн жаратып, андан кийин автоматтык түрдө ресурс манифесттерин түздүк. Эми мунун бардыгын Kubernetes кластерине колдонуу гана калды. Тиркемени жайылтуу үчүн, албетте, kubectl apply -f буйругун колдонсоңуз болот, бирок плагин муну биз үчүн жасай алат. Бул Eclipse JKubeден mvn k8s:apply application тапшырмасын аткарууну сурангандан кийин экранда пайда болот:

~/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-кадам. Kubernetes кластеринен тиркемелерди иштен чыгарыңыз

Бул үчүн undeploy тапшырмасы колдонулат, ал жөн гана мурунку кадамда колдонулган бардык ресурстарды алып салат, башкача айтканда, колдонуу тапшырмасы аткарылганда. Eclipse JKubeден 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 : $

Eclipse JKube менен дагы эмне кыла аласыз

Ошентип, биз Eclipse JKube жана Kubernetes Maven Pluginдин негизги максаттарын карап чыктык, алар Kubernetes платформасы үчүн Java тиркемелерин иштеп чыгууга көмөктөшөт. Эгер сиз бул тапшырмаларды клавиатурадан тынымсыз киргизгиңиз келбесе, аларды плагин конфигурациясында жазсаңыз болот, мисалы, төмөнкүдөй:

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

Бул макалада биз Eclipse JKube жана Kubernetes Maven Pluginдеги бардык максаттуу тапшырмаларды карап чыккан жокпуз, ошондуктан биз 2-таблицада сизге пайдалуу болушу мүмкүн болгон кошумча тапшырмалардын тизмесин беребиз.

Таблица 2. Eclipse JKube кошумча максаттары.

маселе
Этап
баяндоо

k8s:log
АЛУУ
Kubernetes'те иштеген колдонмодон журналдарды алуу.

k8s: мүчүлүштүктөрдү оңдоо
PACKAGE
Түздөн-түз IDEден Kubernetes'те иштеген колдонмоңузду оңдоо үчүн мүчүлүштүктөрдү оңдоо портун ачыңыз.

k8s: жайылтуу
INSTALL
Орнотуу тапшырмасы үчүн айры түзүү жана түзүлгөн манифесттерди колдонуу тапшырмасындагыдай эле Kubernetes кластерине колдонуу.

k8s:саат
PACKAGE
Колдонмонун аталыш мейкиндигин көзөмөлдөө менен автоматтык түрдө ысык жайылтуу.

OpenShift Maven плагинин колдонуу менен Red Hat OpenShift боюнча Java тиркемелерин жайылтуу

Биздин мисалдагы тиркемени Red Hat OpenShift платформасында жайылтуу үчүн биз плагинди колдонобуз OpenShift Maven. Бир гана айырмасы, тапшырма префикси k8sтен ocка өзгөрөт. Демейки боюнча Kubernetes Maven плагини жасайт ютуб-ассемблер жана OpenShift Maven плагини - ассамблеялар S2I. Биз долбоорбузга jkube.generator.name касиетин алып салуудан башка эч кандай өзгөртүүлөрдү киргизбей жатабыз, анткени реестрге түртүүдө талап кылынбайт (OpenShift куруу фазасында сүрөттү өзүнүн ички реестрине жайгаштырат). Жана бул биздин мисалыбызды иштеткенде экранда пайда болот, демек, биз максаттуу тапшырмаларды бирден эмес, бир убакта аткарабыз:

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

Видеосабак

Eclipse JKube менен Kubernetes иштеп чыгууну кантип жеңилдетүү жөнүндө көбүрөөк билүү үчүн, Minikube'де жөнөкөй Spring Boot тиркемесин кантип тез жайгаштыруу боюнча бул видео окуу куралын көрүңүз:

жыйынтыктоо

Бул макалада биз Eclipse JKube Kubernetes менен иштөөдө Java иштеп чыгуучусунун жашоосун кантип жеңилдеткенин көрсөттүк. Eclipse JKube жөнүндө көбүрөөк маалымат тапса болот сайт долбоору жана GitHub.

Source: www.habr.com

Комментарий кошуу