25 гадоў таму Java пайшла ў шырокія праграмісцкія масы, каб у выніку стаць адным з тых стрыжняў, вакол якіх будуюцца стэкі прыкладанняў. Аднак сёння шматлікія людзі і арганізацыі, доўгія гады якія захоўвалі вернасць Java, занятыя тым, што пераходзяць ці думаюць пераходзіць на платформу.
На жаль, Kubernetes адрозніваецца круты крывой навучання і ўводзіць яшчэ адзін аперацыйны ўзровень у звыклы для Java-праграмістаў працэс распрацоўкі. Сёння мы раскажам, як выкарыстоўваць
Традыцыйны працэс Java-распрацоўкі
Традыцыйны працэс распрацоўкі
Мал. 1. Традыцыйны працэс Java-распрацоўкі.
Працэс Java-распрацоўкі для аблокі
Пры пераходзе да хмарных прыкладанняў у апісаную вышэй схему дадаюцца Kubernetes і
Метамарфоза традыцыйнага працэсу Java-распрацоўкі пры пераходзе да воблака паказана на Мал. 2.
Мал. 2. Працэс Java-распрацоўкі для аблокі.
Eclipse JKube
Пераход на Kubernetes дадае яшчэ адзін аперацыйны ўзровень у працэс распрацоўкі, і многіх распрацоўшчыкаў гэта нервуе, паколькі яны хочуць займацца сваёй асноўнай працай - логікай прыкладанняў, - а не тым, як іх разгортваць. І тут у гульню ўступае
У пакінутай частцы гэтага артыкула мы пакажам, як спрасціць працэс Java-распрацоўкі ў асяроддзі Kubernetes, выкарыстаючы Eclipse JKube з убудовай Kubernetes Maven Plugin.
Працэс распрацоўкі для аблокі з выкарыстаннем Eclipse JKube
Разгледзім злёгку мадыфікаваную схему Java-распрацоўкі для аблокі з Мал.2, увёўшы ў яе Eclipse JKube і Kubernetes Maven Plugin, як паказана на Мал. 3.
Мал. 3. Працэс Java-распрацоўкі для аблокі з выкарыстаннем Eclipse JKube.
Як мы бачым, тут усе аперацыі па ўзаемадзеянні з Kubernetes і кантэйнерамі (на схеме выдзелены чырвоным) замяняюцца goal-задачамі Eclipse JKube па змаўчанні, якія пералічаны ў Табл. 1.
Табл. 1. Задачы Eclipse JKube па змаўчанні.
Задача
этап
Апісанне
PRE_INTEGRATION_TEST
Зборка docker-вобразаў
УСТАНАВІЦЬ
Адпраўка docker-вобразаў у рэестр
PROCESS_RESOURCES
Генерацыя маніфестаў K8s
COMPILE
Ужыванне згенераваных маніфестаў да K8s
UNDEPLOY
Выдаленне рэсурсаў K8s, якія былі разгорнуты з дапамогай k8s:apply і k8s:deploy
Заўвага: Калі вы не жадаеце, каб задачы выкарыстоўвалі гэтыя цвёрдыя дэфолты (opinionated defaults), то можаце ўручную наладзіць Eclipse JKube пад сябе, балазе ён падтрымлівае канфігураванне праз
Цяпер разгледзім прыклады выкарыстання Eclipse JKube і Kubernetes Maven Plugin пры працы з праграмамі.
Разгортваем Java-дадатак у Kubernetes з дапамогай Eclipse JKube
У гэтым прыкладзе мы разгорнем простае Java-дадатак у кластары
У якасці прыкладу прыкладання мы выкарыстоўваем
~/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 Plugin
Kubernetes Maven Plugin знаходзіцца ў рэпазітары
<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. Збіраны docker-выява
JAR-файл прыкладання можна сабраць камандай mvn package, а затым можна выкарыстоўваць goal-задачу mvn k8s:build, каб сабраць docker-выява гэтага прыкладання. Звярніце ўвагу, што мы перавызначылі імя выявы па змаўчанні з дапамогай вось гэтай уласцівасці:
<jkube.generator.name>docker.io/rohankanojia/random-generator:${project.version}</jkube.generator.name>
Перш чым збіраць выяву, трэба пераканацца, каб docker-дэман быў карэктна экспанаваны. Гэта можна зрабіць наступнай камандай:
$ eval $(minikube docker-env)
Затым уводны каманду mvn k8s:build, і вось што мы ўбачым на экране пры зборцы docker-выявы з дапамогай 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. Адпраўляем выяву ў рэестр docker
Пасля таго, як мы сабралі docker-выява пры наладжаным push-рэестры (у нашым выпадку гэта docker.io), можна адпраўляць гэтую выяву ў рэестр. Вось што вывядзецца на экран пасля таго, як мы папросім Eclipse JKube выканаць push-задачу mvn k8s: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.
Мал. 4. Адпраўленая ў рэестр выява з'явілася ў Docker Hub.
Крок 4. Які генеруецца маніфесты Kubernetes-рэсурсаў для прыкладання
Такім чынам, выяву прыкладання мы сабралі, зараз трэба напісаць Kubernetes-маніфесты. Для гэтага ў Eclipse JKube ёсць задача, якая генеруе цвёрдыя маніфесты рэсурсаў, адштурхваючыся ад ніжэйлеглага Java-фрэймворка (
У нашым прыкладзе мы пакідаем усё як ёсць, і таму Eclipse JKube генеруе маніфест для дэфолтнага разгортвання і для сэрвісу з тыпам ClusterIP. А ўжо потым мы мадыфікуем маніфест сэрвісу, каб змяніць тып сэрвісу на NodePort. Перавызначыць дэфолтныя паводзіны можна з дапамогай наступнай уласцівасці:
<jkube.enricher.jkube-service.type>NodePort</jkube.enricher.jkube-service.type>
Вось як выглядае экранная выснова пасля таго, як мы папросім Eclipse JKube выканаць resource-задачу 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 : $
Крок 5. Разгортваем прыкладанне ў кластары Kubernetes
Такім чынам, у нас усё гатова, каб выканаць разгортванне прыкладання: мы згенеравалі яго выяву і затым аўтаматычна згенеравалі маніфесты рэсурсаў. Цяпер засталося толькі прымяніць усё гэта да кластара Kubernetes. Для разгортвання прыкладання можна, вядома, скарыстацца камандай kubectl apply -f, але плягін і гэта можа зрабіць за нас. Вось што будзе на экране пасля таго, як мы папросім Eclipse JKube выканаць apply-задачу mvn k8s: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"
}
Крок 6. Які робіцца undeploy прыкладання з кластара Kubernetes
Для гэтага выкарыстоўваецца задача undeploy, якая проста выдаляе ўсе рэсурсы, якія былі ўжытыя на папярэднім кроку, гэта значыць пры выкананні задачы apply. Вось што мы ўбачым на экране пасля таго, як папросім Eclipse JKube выканаць undeploy-задачу mvn k8s:undeploy:
~/work/repos/eclipse-jkube-demo-project : $ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/random-generator-58b7847d7f-9m9df 1/1 Running 0 5m21s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <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
Такім чынам, мы разгледзелі асноўныя goal-задачы Eclipse JKube і Kubernetes Maven Plugin, якія аблягчаюць распрацоўку Java-прыкладанняў для платформы Kubernetes. Калі вам не жадаецца стала ўводзіць гэтыя задачы з клавіятуры, іх можна папісаць у канфігурацыі плагіна, напрыклад, вось так:
<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>
Трэба сказаць, што ў гэтым артыкуле мы разгледзелі далёка не ўсе goal-задачы, якія ёсць у Eclipse JKube і Kubernetes Maven Plugin, таму прыводзім у Табл.2 спіс дадатковых задач, якія таксама могуць вам спатрэбіцца.
Табл. 2. Дадатковыя goal-задачы Eclipse JKube.
Задача
этап
Апісанне
ВАЛІДАВАЦЬ
Атрыманне логаў ад прыкладання, які працуе на Kubernetes.
ПАКЕТ
Адкрыццё адладкавага порта, каб выконваць адладку прыкладання, які працуе на Kubernetes, непасрэдна з IDE.
УСТАНАВІЦЬ
Стварэнне форка для Install-задачы і ўжыванне згенераваных маніфестаў да кластара Kubernetes сапраўды гэтак жа, як у выпадку apply-задачы.
ПАКЕТ
Аўтаматычнае гарачае разгортванне прыкладання за кошт адсочвання яго прасторы імёнаў.
Разгортванне Java-прыкладанняў на Red Hat OpenShift з дапамогай OpenShift Maven Plugin
Для разгортвання прыкладання з нашага прыкладу на платформе Red Hat 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 : $
Відэа-урок
Каб даведацца больш аб тым, як спрасціць Kubernetes-распрацоўку з дапамогай Eclipse JKube, паглядзіце відэа-урок па хуткім разгортванні простага прыкладанне Spring Boot на Minikube:
Заключэнне
У гэтым артыкуле мы паказалі, як Eclipse JKube палягчае жыццё Java-распрацоўніку пры працы з Kubernetes. Дадатковую інфармацыю па Eclipse JKube можна знайсці на
Крыніца: habr.com