Utveckling av Java-applikationer för Kubernetes med Eclipse JKube

För 25 Är sedan började Java sin resa in i programmerarnas vÀrld, och har nu blivit en av de grundpelare som applikationsstackar byggs kring. Idag Àr dock mÄnga personer och organisationer som troget hÄllit fast vid Java upptagna med att övergÄ eller övervÀga att övergÄ till plattformar Kubernetes eller dess derivat, sÄsom Red Hat OpenShift eller Amazon EKS.

Utveckling av Java-applikationer för Kubernetes med Eclipse JKube

TyvÀrr har Kubernetes en brant inlÀrningskurva och lÀgger till en ytterligare operationell nivÄ i den utvecklingsprocess som Java-programmerare Àr vana vid. Idag kommer vi att berÀtta hur man anvÀnder Eclipse JKube, för att förenkla dessa extra operationer relaterade till Kubernetes och containrar, samt för att möjliggöra en smÀrtfri migration till en molnplattform, samtidigt som den vÀlbekanta Java-ekosystemet bevaras. Dessutom kommer vi att visa hur man distribuerar Java-applikationer pÄ OpenShift-plattformen med hjÀlp av OpenShift Maven-plugin.

Den traditionella Java-utvecklingsprocessen

Den traditionella utvecklingsprocessen Java (Fig. 1) innebÀr att utvecklaren skriver kod, skapar distributionsenheter i form av JAR- eller WAR-filer, och sedan distribuerar och kör dessa filer pÄ en webbserver eller applikationsserver. Vanligtvis anvÀnder man Maven frÄn kommandoraden eller en IDE som IntelliJ eller Eclipse för att koda och packa applikationer. Utvecklare Àr vana att göra Àndringar i koden och noggrant testa allt före kodfixering och inlÀmning till versionshanteringssystemet.

Utveckling av Java-applikationer för Kubernetes med Eclipse JKube

Fig. 1. Den traditionella Java-utvecklingsprocessen.

Java-utvecklingsprocessen för molnet

NÀr man gÄr över till molnapplikationer lÀggs Kubernetes och containrartill den ovan beskrivna schemat. SÄ nu mÄste utvecklaren paketera Java-applikationer i containerbilder och skapa Kubernetes-manifest som beskriver dessa bilder. Dessa manifest appliceras sedan pÄ produktionsservern dÀr Kubernetes körs. Kubernetes hÀmtar dessa bilder frÄn registret och distribuerar applikationerna enligt de konfigurationer som vi angivit i manifest, som vanligtvis Àr YAML-filer.

Metamorfosen av den traditionella Java-utvecklingsprocessen nÀr man gÄr över till molnet visas i Fig. 2.

Utveckling av Java-applikationer för Kubernetes med Eclipse JKube

Fig. 2. Java-utvecklingsprocessen för molnet.

Eclipse JKube

ÖvergĂ„ngen till Kubernetes lĂ€gger till ytterligare en driftsnivĂ„ i utvecklingsprocessen, vilket gör mĂ„nga utvecklare nervösa, eftersom de vill fokusera pĂ„ sitt kĂ€rnarbete – applikationslogik – istĂ€llet för hur de ska distribuera det. HĂ€r kommer Eclipse JKube, som gör att utvecklare kan anvĂ€nda sina bibliotek och plugins (JKube Kit tillsammans med Kubernetes Maven Plugin eller OpenShift Maven Plugin), sĂ„ att de, utan större anstrĂ€ngning, kan utföra container- och Kubernetes-relaterade operationer enligt schemat i Fig. 2.

I den hÀr artikeln kommer vi att visa hur man förenklar Java-utvecklingsprocessen i en Kubernetes-miljö med hjÀlp av Eclipse JKube tillsammans med Kubernetes Maven Plugin.

Utvecklingsprocessen för molnet med Eclipse JKube

LÄt oss övervÀga ett nÄgot modifierat schema för Java-utveckling för molnet som visas i Fig. 2, dÀr vi introducerar Eclipse JKube och Kubernetes Maven Plugin, som visas i Fig. 3.

Utveckling av Java-applikationer för Kubernetes med Eclipse JKube

Fig. 3. Java-utvecklingsprocessen för molnet med Eclipse JKube.

Som vi ser ersÀtts alla operationer för interaktion med Kubernetes och containers (markerade i rött pÄ schemat) av mÄlinriktade Eclipse JKube-uppgifter som listas i Tab. 1.

Tab. 1. Standarduppgifter för Eclipse JKube.

Uppgift
Steg
Beskrivning

k8s:build
PRE_INTEGRATION_TEST
Bygga dockerbilder

k8s:push
INSTALL
Skicka dockerbilder till registret

k8s:resource
PROCESS_RESOURCES
Generera K8s-manifest

k8s:apply
COMPILE
TillÀmpa de genererade manifest pÄ K8s

k8s:undeploy
UNDEPLOY
Ta bort K8s-resurser som har distribuerats genom k8s:apply och k8s:deploy

AnmÀrkning: Om du inte vill att uppgifterna ska anvÀnda dessa strikta standardinstÀllningar (opinionated defaults), kan du manuellt anpassa Eclipse JKube, eftersom den stöder konfiguration via XML och resurser.

LÄt oss nu titta pÄ exempel pÄ anvÀndning av Eclipse JKube och Kubernetes Maven Plugin nÀr vi arbetar med applikationer.

Distribuera en Java-applikation i Kubernetes med hjÀlp av Eclipse JKube

I detta exempel kommer vi att distribuera en enkel Java-applikation i klustret Minikube med hjÀlp av Eclipse JKube. Genom att anvÀnda Kubernetes Maven Plugin kan vi ange distributionsparametrar utan att behöva skriva nÄgon konfiguration.

Som exempelapplikation anvÀnder vi en enkel slumptalsgenerator, som ger JSON-output pÄ endpointen /random:

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

Steg 1. Ladda upp Kubernetes Maven Plugin

Kubernetes Maven Plugin finns i förrÄdet Maven Central Repository. För att anvÀnda Eclipse JKube mÄste du lÀgga till Kubernetes Maven Plugin i din pom.xml som en beroende:

org.eclipse.jkube
     kubernetes-maven-plugin
     ${jkube.version}

Om istÀllet för ren Kubernetes OpenShift anvÀnds, ska pom.xml modifieras enligt följande:

org.eclipse.jkube
     openshift-maven-plugin
     ${jkube.version}

Steg 2. Bygg docker-image

JAR-filen för applikationen kan byggas med kommandot mvn package, och sedan kan du anvÀnda mÄlet mvn k8s:build för att bygga docker-imagen för denna applikation. Observera att vi har Äsidosatt standardnamnet för imagen med följande egenskap:

docker.io/rohankanojia/random-generator:${project.version}

Innan du bygger imagen mÄste du se till att docker-demonen Àr korrekt exponerad. Detta kan göras med följande kommando:

$ eval $(minikube docker-env)

DÀrefter skriver vi kommandot mvn k8s:build, och hÀr Àr vad vi ser pÄ skÀrmen nÀr docker-imagen byggs med hjÀlp av build-mÄlet Eclipse JKube:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:build
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------------------------------
[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 : $

Steg 3. Skicka imagen till docker-register

Efter att vi har byggt docker-imagen nÀr push-register Àr konfigurerat (i vÄrt fall docker.io), kan vi skicka denna imagen till registret. HÀr Àr vad som visas pÄ skÀrmen efter att vi ber Eclipse JKube att utföra push-mÄlet mvn k8s:push:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:push
[INFO] Skannar efter projekt...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Bygger random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:push (standard-cli) @ random-generator ---
[INFO] k8s: Kör i Kubernetes-lÀge
[INFO] k8s: Bygger Docker-bild i Kubernetes-lÀge
[INFO] k8s: Kör generator spring-boot
[INFO] k8s: spring-boot: AnvÀnder Docker-bild quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 som bas \/ byggare
[INFO] k8s: Pushen avser förrÄd [docker.io\/rohankanojia\/random-generator]
5dcd9556710f: Lagret finns redan 
b7139ad07aa8: Lagret finns redan 
b6f081e4b2b6: Lagret finns redan 
d8e1f35641ac: Lagret finns redan 
[INFO] k8s: 0.0.1: digest: sha256:9f9eda2a13b8cab1d2c9e474248500145fc09e2922fe3735692f9bda4c76002d storlek: 1162
[INFO] k8s: Pushade docker.io\/rohankanojia\/random-generator:0.0.1 pÄ 7 sekunder 
[INFO] ------------------------------------------------------------------------
[INFO] BYGGET FRAMGÅNG
[INFO] ------------------------------------------------------------------------
[INFO] Total tid:  11.222 s
[INFO] Avslutad vid: 2020-08-10T11:35:37+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ 

Efter att ha skickat bilden Àr det viktigt att kontrollera att den har kommit till registret. I vÄrt fall ser vi den bara i Docker Hub, som visas i Fig. 4.

Utveckling av Java-applikationer för Kubernetes med Eclipse JKube

Fig. 4. Bilden som skickades till registret har dykt upp i Docker Hub.

Steg 4. Generera Kubernetes-resursernas manifest för applikationen

SÄ, vi har byggt applikationens bild, nu mÄste vi skriva Kubernetes-manifest. För detta har Eclipse JKube en uppgift som genererar fasta manifest av resurser baserat pÄ den underliggande Java-ramverket (Spring Boot, Quarkus, Vert.x eller nÄgon annan). Man kan ocksÄ konfigurera manifestet med en konfigurations-XML-fil och placera raw-fragment (fragment av det nödvÀndiga resurmanifestet) i katalogen src\/main\/jkube i applikationen. I sÄ fall kommer din konfiguration att laddas in i de genererade manifest.

I vÄrt exempel lÄter vi allt vara som det Àr, vilket gör att Eclipse JKube genererar ett manifest för standarddistributionen och för tjÀnsten av typen ClusterIP. Senare modifierar vi tjÀnstememanifestet för att Àndra tjÀnstetypen till NodePort. Det standardbeteendet kan ÄsidosÀttas med följande egenskap:

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

SÄ hÀr ser skÀrmutdata ut efter att vi bett Eclipse JKube att utföra resource-uppgiften mvn k8s:resource.

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:resource
[INFO] Skannar efter projekt...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Bygger random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:resource (standard-cli) @ random-generator ---
[INFO] k8s: Kör generatorn spring-boot
[INFO] k8s: spring-boot: AnvÀnder Docker-bild quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 som bas \/ byggare
[INFO] k8s: jkube-controller: LĂ€gger till en standardutplacering
[INFO] k8s: jkube-service: LÀgger till en standardtjÀnst 'random-generator' med portar [8080]
[INFO] k8s: jkube-healthcheck-spring-boot: LÀgger till beredskapskontroll pÄ port 8080, vÀg='\/actuator\/health', schema='HTTP', med initial fördröjning 10 sekunder
[INFO] k8s: jkube-healthcheck-spring-boot: LÀgger till livsbevakning pÄ port 8080, vÀg='\/actuator\/health', schema='HTTP', med initial fördröjning 180 sekunder
[INFO] k8s: jkube-revision-history: LÀgger till revisionshistorikgrÀns pÄ 2
[INFO] ------------------------------------------------------------------------
[INFO] BYGG LYCKADES
[INFO] ------------------------------------------------------------------------
[INFO] Total tid:  3.344 s
[INFO] Avslutad vid: 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: git@github.com: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 : $

Steg 5. Distribuera applikationen i Kubernetes-klustret

SÄ, vi har allt klart för att utföra distributionen av applikationen: vi har genererat dess bild och sedan automatiskt genererat resursmanifesten. Nu ÄterstÄr det bara att applicera allt detta pÄ Kubernetes-klustret. För att distribuera applikationen kan man givetvis anvÀnda kommandot kubectl apply -f, men pluginet kan göra det Ät oss ocksÄ. HÀr Àr vad som kommer att visas pÄ skÀrmen efter att vi har bett Eclipse JKube att utföra apply-uppgiften mvn k8s:apply:

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:apply
[INFO] Skannar efter projekt...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Bygger random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] k8s: AnvÀnder Kubernetes pÄ https://192.168.39.145:8443/ i namnrymden default med manifestet /home/rohaan/work/repos/eclipse-jkube-demo-project/target/classes/META-INF/jkube/kubernetes.yml 
[INFO] k8s: AnvÀnder namnrymden: default
[INFO] k8s: Skapar en tjÀnst frÄn kubernetes.yml namnrymden default namn random-generator
[INFO] k8s: Skapade tjÀnst: target/jkube/applyJson/default/service-random-generator.json
[INFO] k8s: Skapar en distribution frÄn kubernetes.yml namnrymden default namn random-generator
[INFO] k8s: Skapade distribution: target/jkube/applyJson/default/deployment-random-generator.json
[INFO] k8s: TIPS: AnvÀnd kommandot `kubectl get pods -w` för att övervaka dina pods starta
[INFO] ------------------------------------------------------------------------
[INFO] BYGG FRAMGÅNG
[INFO] ------------------------------------------------------------------------
[INFO] Total tid:  7.306 s
[INFO] Avslutad vid: 2020-08-10T11:40:57+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ kubectl get pods -w
NAMN                                                     REDO   STATUS             OMSTARTNINGAR   ÅLDER
random-generator-58b7847d7f-9m9df                        0\/1     Körande            0          7s
random-generator-58b7847d7f-9m9df                        1\/1     Körande            0          17s
^C~\/work\/repos\/eclipse-jkube-demo-project : $ kubectl get svc
NAMN                                    TYP        KLUSTER-IP      EXTERN-IP   PORTAR(S)           ÅLDER
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 .
  % Totalt    % Mottaget % Överförd  Genomsnittlig Hastighet   Tid    Tid     Tid  Aktuell
                                 Ladda ner  Ladda upp   Totalt   AnvÀnt  Kvar  Hastighet
100    45    0    45    0     0   1800      0 --:--:-- --:--:-- --:--:--  1875
{
  "id": "42e5571f-a20f-44b3-8184-370356581d10"
}

Steg 6. Gör en undeploy av applikationen frÄn Kubernetes-klustret

Detta görs med uppgiften undeploy, som helt enkelt tar bort alla resurser som tillÀmpades i föregÄende steg, det vill sÀga vid utförandet av uppgiften apply. SÄ hÀr kommer vi att se pÄ skÀrmen efter att vi ber Eclipse JKube att utföra undeploy-uppgiften 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               443\/TCP          18d
service\/random-generator   NodePort    10.97.172.147           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] ---------------------------------------------
[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            443\/TCP   18d
~\/work\/repos\/eclipse-jkube-demo-project : $

Vad mer kan göras med Eclipse JKube

SÄ, vi har gÄtt igenom de huvudsakliga mÄl som Eclipse JKube och Kubernetes Maven Plugin erbjuder för att underlÀtta utvecklingen av Java-applikationer för Kubernetes-plattformen. Om du inte vill behöva mata in dessa uppgifter hela tiden kan du skriva dem i plugin-konfigurationen, till exempel sÄ hÀr:

org.eclipse.jkube
     kubernetes-maven-plugin
     ${project.version}
     
         
             
                  build
                  resource
                  apply

Det Àr vÀrt att nÀmna att vi i den hÀr artikeln inte har tÀckt alla mÄl som finns i Eclipse JKube och Kubernetes Maven Plugin, sÄ vi listar i Tabell 2 ytterligare uppgifter som kan vara anvÀndbara för dig.

Tabell 2. Ytterligare mÄl för Eclipse JKube.

Uppgift
Steg
Beskrivning

k8s:log
VALIDERA
HÀmta loggar frÄn applikationen som körs pÄ Kubernetes.

k8s:debug
PAKET
Öppning av en debuggerport för att möjliggöra felsökning av applikationen som körs pĂ„ Kubernetes direkt frĂ„n IDE.

k8s:deploy
INSTALL
Skapa en fork för installationen och tillÀmpa de genererade manifestfilerna pÄ Kubernetes-klustret pÄ samma sÀtt som vid apply-uppgiften.

k8s:watch
PAKET
Automatisk hot-deployment av applikationen genom att övervaka dess namespace.

Distribution av Java-applikationer pÄ Red Hat OpenShift med hjÀlp av OpenShift Maven-plugin.

För att distribuera applikationen frÄn vÄrt exempel pÄ plattformen Red Hat OpenShift tillÀmpar vi pluginet OpenShift Maven. Den enda skillnaden blir att uppgiftsprefixet Àndras frÄn k8s till oc. Som standard gör Kubernetes Maven-plugin docker-byggnationer, medan OpenShift Maven-plugin gör byggnationer. S2I. Vi gör inga Àndringar i vÄrt projekt, förutom att vi tar bort egenskapen jkube.generator.name, eftersom den inte behövs vid publicering till registret (under byggsteget lÀgger OpenShift bilden i sitt interna register). Och sÄ hÀr ser det ut pÄ skÀrmen nÀr vi kör vÄrt exempel, dÀr vi för övrigt kör mÄluppgifterna inte en och en, utan alla pÄ en gÄng:

~\work\repos\eclipse-jkube-demo-project : $ mvn oc:build oc:resource oc:apply
[INFO] Skannar efter projekt...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Bygger random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] oc: AnvÀnder OpenShift-bygg med strategi S2I
[INFO] oc: Kör i OpenShift-lÀge
[INFO] oc: Kör generator spring-boot
[INFO] oc: spring-boot: AnvÀnder Docker-bild quay.io/jkube/jkube-java-binary-s2i:0.0.7 som bas / byggare
[INFO] oc: [random-generator:0.0.1] "spring-boot": Skapade docker-kÀlltar /home/rohaan/work/repos/eclipse-jkube-demo-project/target/docker/random-generator/0.0.1/tmp/docker-build.tar
[INFO] oc: LĂ€gger till i Secret pullsecret-jkube
[INFO] oc: AnvÀnder Secret pullsecret-jkube
[INFO] oc: Skapar BuildServiceConfig random-generator-s2i för kÀllbygg
[INFO] oc: Skapar ImageStream random-generator
[INFO] oc: Startar bygg random-generator-s2i
[INFO] oc: VÀntar pÄ att bygget random-generator-s2i-1 ska slutföras...
[INFO] oc: Cacherar blobs under "/var/cache/blobs".
[INFO] oc: HÀmtar bildkÀlla underteckningar
[INFO] oc: Kopierar blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Kopierar blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Kopierar blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Kopierar config sha256:52d6788fcfdd39595264d34a3959464a5dabc1d4ef0ae188802b20fc2d6a857b
[INFO] oc: Skriver manifest till bilddestination
[INFO] oc: Lagrar underteckningar
[INFO] oc: Genererar dockerfile med byggarbild quay.io/jkube/jkube-java-binary-s2i:0.0.7
[INFO] oc: STEG 1: FRÅN quay.io/jkube/jkube-java-binary-s2i:0.0.7
[INFO] oc: STEG 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: STEG 3: ENV JAVA_APP_DIR="/deployments"     OPENSHIFT_BUILD_NAME="random-generator-s2i-1"     OPENSHIFT_BUILD_NAMESPACE="default"
[INFO] oc: STEG 4: ANVÄNDA root
[INFO] oc: STEG 5: KOPIERA upload/src /tmp/src
[INFO] oc: STEG 6: KÖR chown -R 1000:0 /tmp/src
[INFO] oc: STEG 7: ANVÄNDA 1000
[INFO] oc: STEG 8: KÖR /usr/local/s2i/assemble
[INFO] oc: INFO S2I kÀllbygg med vanliga binÀrer upptÀcktes
[INFO] oc: INFO S2I binÀrbygg frÄn fabric8-maven-plugin upptÀcktes
[INFO] oc: INFO Kopierar binÀrer frÄn /tmp/src/deployments till /deployments ...
[INFO] oc: random-generator-0.0.1.jar
[INFO] oc: INFO Kopierar distributioner frÄn deployments till /deployments...
[INFO] oc: '/tmp/src/deployments/random-generator-0.0.1.jar' -> '/deployments/random-generator-0.0.1.jar'
[INFO] oc: STEG 9: CMD /usr/local/s2i/run
[INFO] oc: STEG 10: KOMMIT temp.builder.openshift.io/default/random-generator-s2i-1:48795e41
[INFO] oc: time="2020-08-10T06:37:49Z" level=info msg="Bild operativsystem mismatch: bilden anvÀnder "", förvÀntar "linux""
[INFO] oc: time="2020-08-10T06:37:49Z" level=info msg="Bildarkitektur mismatch: bilden anvÀnder "", förvÀntar "amd64""
[INFO] oc: HÀmtar bildkÀlla underteckningar
[INFO] oc: Kopierar blob sha256:d8e1f35641acb80b562f70cf49911341dfbe8c86f4d522b18efbf3732aa74223
[INFO] oc: Kopierar blob sha256:b6f081e4b2b6de8be4b1dec132043d14c121e968384dd624fb69c2c07b482edb
[INFO] oc: Kopierar blob sha256:b7139ad07aa8ce4ed5a132f7c5cc9f1de0f5099b5e155027a23d57f7fbe78b16
[INFO] oc: Kopierar blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Kopierar config sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Skriver manifest till bilddestination
[INFO] oc: Lagrar underteckningar
[INFO] oc: --> 27aaadaf28e
[INFO] oc: 27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: HÀmtar bildkÀlla underteckningar
[INFO] oc: 
[INFO] oc: Pushing bild image-registry.openshift-image-registry.svc:5000/default/random-generator:0.0.1 ...
[INFO] oc: Kopierar blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Kopierar blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Kopierar blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Kopierar blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Kopierar config sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Skriver manifest till bilddestination
[INFO] oc: Lagrar underteckningar
[INFO] oc: FramgÄngsrikt tryckt image-registry.openshift-image-registry.svc:5000/default/random-generator@sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: Push lyckad
[INFO] oc: Bygg random-generator-s2i-1 i status Komplett
[INFO] oc: Hittade tag pÄ ImageStream random-generator tag: sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: ImageStream random-generator skriven till /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: AnvÀnder docker bild namn av namnrymden: default
[INFO] oc: Kör generator spring-boot
[INFO] oc: spring-boot: AnvÀnder Docker-bild quay.io/jkube/jkube-java-binary-s2i:0.0.7 som bas / byggare
[INFO] oc: jkube-controller: LĂ€gger till en standard DeploymentConfig
[INFO] oc: jkube-service: LÀgger till en standard tjÀnst 'random-generator' med portar [8080]
[INFO] oc: jkube-healthcheck-spring-boot: LÀgger till beredskapskontroll pÄ port 8080, sökvÀg='/actuator/health', schema='HTTP', med initial fördröjning 10 sekunder
[INFO] oc: jkube-healthcheck-spring-boot: LÀgger till levande kontroll pÄ port 8080, sökvÀg='/actuator/health', schema='HTTP', med initial fördröjning 180 sekunder
[INFO] oc: jkube-revision-history: LÀgger till revisionshistorikgrÀns till 2
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] oc: AnvÀnder OpenShift pÄ https://api.crc.testing:6443/ i namnrymd default med manifest /home/rohaan/work/repos/eclipse-jkube-demo-project/target/classes/META-INF/jkube/openshift.yml 
[INFO] oc: OpenShift-plattform upptÀcktes
[INFO] oc: AnvÀnder projekt: default
[INFO] oc: Skapar en tjÀnst frÄn openshift.yml namnrymden default namn random-generator
[INFO] oc: Skapade tjÀnst: target/jkube/applyJson/default/service-random-generator.json
[INFO] oc: Skapar en DeploymentConfig frÄn openshift.yml namnrymden default namn random-generator
[INFO] oc: Skapade DeploymentConfig: target/jkube/applyJson/default/deploymentconfig-random-generator.json
[INFO] oc: Skapar Route default:random-generator vÀrd: null
[INFO] oc: TIPS: AnvÀnd kommandot `oc get pods -w` för att övervaka dina pods starta upp
[INFO] ------------------------------------------------------------------------
[INFO] BYGG LYCKAD
[INFO] ------------------------------------------------------------------------
[INFO] Total tid:  01:07 min
[INFO] Avslutad vid: 2020-08-10T12:08:00+05:30
[INFO] ------------------------------------------------------------------------
~\work\repos\eclipse-jkube-demo-project : $ oc get pods -w
NAMN                           KLAR     STATUS      OMSÄTTNING   ÅLDER
random-generator-1-deploy      1/1       Körande     0          14s
random-generator-1-vnrm9       0/1       Körande     0          11s
random-generator-s2i-1-build   0/1       Slutförd   0          1m
random-generator-1-vnrm9   1/1       Körande   0         24s
random-generator-1-deploy   0/1       Slutförd   0         28s
~\work\repos\eclipse-jkube-demo-project : $ oc get routes
NAMN                VÄRD/PORT                                    SÖKSVÄG      TJÄNSTER            PORT      TERMINERING   VILDCARD
random-generator    random-generator-default.apps-crc.testing              random-generator    8080                    Ingen
~\work\repos\eclipse-jkube-demo-project : $ curl random-generator-default.apps-crc.testing/random 
  % Total    % Mottagen % Xferd  Genomsnittlig Hastighet   Tid    Tid     Tid  Aktuell
                                 Dload  Uppladdning   Totalt   AnvÀnt   Kvar  Hastighet
100    45    0    45    0     0   1666      0 --:--:-- --:--:-- --:--:--  1730
{
  "id": "d80052d9-2f92-43cb-b9eb-d7cffb879798"
}
~\work\repos\eclipse-jkube-demo-project : $

Videolektion

För att lÀra dig mer om hur du förenklar Kubernetes-utveckling med Eclipse JKube, se videolektionen om snabb distribution av en enkel Spring Boot-applikation pÄ Minikube:

Spela video

Slutsats

I den hÀr artikeln har vi visat hur Eclipse JKube underlÀttar livet för Java-utvecklare som arbetar med Kubernetes. Mer information om Eclipse JKube finns pÄ projektets webbplats och pÄ GitHub.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster