Таҳияи барномаҳои Java барои Kubernetes бо истифода аз Eclipse JKube

25 сол пеш, Java ба ҷараёни асосии барномасозӣ ворид шуд ва дар ниҳоят ба яке аз унсурҳои асосӣ табдил ёфт, ки дар атрофи он стекҳои барномаҳо сохта мешаванд. Аммо имрӯз, бисёр одамон ва созмонҳое, ки солҳои тӯлонӣ ба Java содиқ буданд, ба муҳоҷират банд ҳастанд ё дар фикри муҳоҷират ба платформа ҳастанд. Кубернитель ё ҳосилаҳои он ба монанди RedHat OpenShift ё Amazon EKS.

Таҳияи барномаҳои Java барои Kubernetes бо истифода аз Eclipse JKube

Мутаассифона, Кубернетес хатти нишебҳои омӯзишӣ дорад ва як қабати дигари амалиётиро ба раванди рушд, ки барномасозони Java одат кардаанд, ҷорӣ мекунад. Имрӯз мо ба шумо мегӯям, ки чӣ тавр истифода баред Eclipse JKube, барои содда кардани ин амалиёти иловагии марбут ба Kubernetes ва контейнерҳо ва таъмини муҳоҷирати бедард ба платформаи абрӣ ҳангоми нигоҳ доштани экосистемаи Java шинос. Ғайр аз он, мо нишон медиҳем, ки чӣ гуна барномаҳои Java-ро дар платформаи OpenShift бо истифода аз плагини OpenShift Maven ҷойгир кардан мумкин аст.

Раванди анъанавии рушди Java

Раванди рушди анъанавӣ Java (Расми 1) таҳиягарро навиштани код, баъд эҷод кардани воҳидҳои ҷойгиркунӣ дар шакли файлҳои JAR ё WAR ва сипас ҷойгиркунӣ ва иҷро кардани ин файлҳоро дар сервери веб ё барнома дар бар мегирад. Роҳи асосии ин кор истифодаи Maven аз сатри фармон ё истифодаи IDE ба монанди IntelliJ ё Eclipse барои рамзгузорӣ ва бастабандии барномаҳо мебошад. Таҳиягарон пеш аз содир кардани код ва пешниҳоди он ба назорати версия ҳама чизро бодиққат санҷидани кодҳо ва тағир додани код одат мекунанд.

Таҳияи барномаҳои Java барои Kubernetes бо истифода аз Eclipse JKube

Райс. 1. Раванди анъанавии таҳияи Java.

Раванди рушди Java барои абр

Ҳангоми гузаштан ба барномаҳои абрӣ, Kubernetes ва контейнерҳо. Аз ин рӯ, ҳоло таҳиякунанда бояд барномаҳои Java-ро бастабандӣ кунад тасвирҳои контейнер ва манифестҳои Kubernetes эҷод кунед, ки ин тасвирҳоро тавсиф мекунанд. Пас аз ин манифестҳо ба сервери истеҳсолии Kubernetes татбиқ карда мешаванд. Дар навбати худ, Кубернетес ин тасвирҳоро аз реестр мегирад ва барномаҳоро мувофиқи конфигуратсияҳое, ки мо дар манифестҳо навиштаем, ҷойгир мекунад, ки одатан файлҳои YAML мебошанд.

Метаморфозаи раванди анъанавии рушди Java дар гузариш ба абр дар расми 2 нишон дода шудааст. XNUMX.

Таҳияи барномаҳои Java барои Kubernetes бо истифода аз Eclipse JKube

Райс. 2. Раванди таҳияи Java барои абр.

Eclipse JKube

Муҳоҷират ба Кубернетес ба раванди таҳия як қабати дигари амалиётиро илова мекунад ва бисёре аз таҳиягарон аз он асабонӣ мекунанд, зеро онҳо мехоҳанд ба кори асосии худ - мантиқи барнома таваҷҷӯҳ кунанд, на чӣ гуна ҷойгир кардани онҳо. Ва дар ин ҷо он ба бозӣ меояд. Eclipse JKube, ки ба таҳиягарон имкон медиҳад, ки китобхонаҳо ва плагинҳои худро истифода баранд (Маҷмӯаи JKube якҷоя бо Васлкунаки Kubernetes Maven ё Васлкунаки OpenShift Maven) ба осонӣ иҷро кардани амалиётҳои марбут ба контейнер ва Кубернетес тавассути диаграммаи расм. 2.

Дар қисми боқимондаи ин мақола, мо ба шумо нишон медиҳем, ки чӣ гуна раванди таҳияи Java-ро дар муҳити Kubernetes бо истифода аз Eclipse JKube бо Plugin Kubernetes Maven содда кардан мумкин аст.

Раванди рушди абрӣ бо истифода аз Eclipse JKube

Биёед нақшаи каме тағирёфтаи таҳияи Java-ро барои абр аз расми 2 дида бароем ва ба он Eclipse JKube ва Kubernetes Maven Plugin ворид кунем, тавре ки дар расм нишон дода шудааст. 3.

Таҳияи барномаҳои Java барои Kubernetes бо истифода аз Eclipse JKube

Райс. 3. Раванди таҳияи Java барои абр бо истифода аз Eclipse JKube.

Тавре ки мо мебинем, дар ин ҷо ҳама амалиётҳо барои ҳамкорӣ бо Kubernetes ва контейнерҳо (дар диаграмма бо ранги сурх нишон дода шудаанд) бо вазифаҳои ҳадафи Eclipse JKube, ки дар Ҷадвали номбар шудаанд, иваз карда мешаванд. 1.

Ҷадвал 1. Вазифаҳои пешфарз Eclipse JKube.

Мақсад
Давра
Шарҳи

k8s: сохтан
PRE_INTEGRATION_TEST
Сохтани тасвирҳои докер

k8s: тела
Install
Бор кардани тасвирҳои докер ба феҳрист

k8s: манбаъ
PROCESS_RESOURCES
Эҷоди манифестҳои K8s

k8s: муроҷиат кунед
ТАРТИБ КУНЕД
Татбиқи манифестҳои тавлидшуда ба K8s

k8s: бекор кардан
БАРОРЕД
Хориҷ кардани захираҳои K8s, ки бо истифода аз k8s:apply ва k8s:deploy ҷойгир шудаанд

Эзоҳ: Агар шумо нахоҳед, ки вазифаҳо ин пешфарзҳои баррасишавандаро истифода баранд, шумо метавонед Eclipse JKube-ро барои худ дастӣ танзим кунед, зеро он конфигуратсияро тавассути тариқи дастгирӣ мекунад. XML и захираҳо.

Акнун биёед ба мисолҳои истифодаи Eclipse JKube ва Kubernetes Maven Plugin ҳангоми кор бо барномаҳо назар андозем.

Ҷойгир кардани замимаи Java дар Kubernetes бо истифода аз Eclipse JKube

Дар ин мисол мо як барномаи оддии Java-ро дар кластер ҷойгир мекунем Миникубе бо истифода аз Eclipse JKube. Бо истифода аз Plugin 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 -ро зеркашӣ кунед

Plugin Kubernetes Maven дар анбор аст Анбори марказии Maven. Барои истифодаи Eclipse JKube шумо бояд Plugin 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. Тасвирро ба феҳристи docker бор кунед

Пас аз он ки мо тасвири докерро бо феҳристи 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.

Таҳияи барномаҳои Java барои Kubernetes бо истифода аз Eclipse JKube

Райс. 4. Тасвири ба реестр фиристодашуда дар Docker Hub пайдо шуд.

Қадами 4. Эҷоди манифестҳои 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 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. Барномаҳоро аз кластери 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-ро дида баромадем, ки ба таҳияи барномаҳои 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>

Бояд гуфт, ки дар ин мақола мо ҳама вазифаҳои мақсаднокро, ки дар Eclipse JKube ва Kubernetes Maven Plugin мавҷуданд, баррасӣ накардаем, аз ин рӯ мо дар ҷадвали 2 рӯйхати вазифаҳои иловагиро пешниҳод мекунем, ки метавонанд барои шумо муфид бошанд.

Ҷадвал 2. Вазифаҳои ҳадафи иловагии Eclipse JKube.

Мақсад
Давра
Шарҳи

k8s: log
ТАСДИҚ КУНЕД
Гирифтани гузоришҳо аз барномае, ки дар Kubernetes кор мекунад.

k8s: ислоҳ
бастаи
Порти дебагро кушоед, то шумо метавонед барномаи худро дар Kubernetes мустақиман аз IDE ислоҳ кунед.

k8s: ҷойгир кардан
Install
Сохтани форк барои вазифаи Насб ва татбиқи манифестҳои тавлидшуда ба кластери Kubernetes ҳамон тавре ки дар мавриди вазифаи татбиқ.

k8s: тамошо кунед
бастаи
Ҷойгиркунии худкори гарми барнома тавассути пайгирии фазои номи он.

Ҷойгир кардани барномаҳои Java дар Red Hat OpenShift бо истифода аз плагини OpenShift Maven

Барои ҷойгир кардани барнома аз мисоли мо дар платформаи 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 : $

Видео дарси

Барои гирифтани маълумоти бештар дар бораи чӣ гуна осон кардани рушди Kubernetes бо Eclipse JKube, ин дастури видеоиро дар бораи чӣ гуна зуд ҷойгир кардани барномаи оддии Spring Boot дар Minikube тамошо кунед:

хулоса

Дар ин мақола мо нишон додем, ки чӣ тавр Eclipse JKube ҳангоми кор бо Kubernetes ҳаёти як таҳиягари Java-ро осон мекунад. Маълумоти бештарро дар бораи Eclipse JKube метавонед дар ин ҷо пайдо кунед сомона ва дар бораи он GitHub.

Манбаъ: will.com

Илова Эзоҳ