Développement d'applications Java pour Kubernetes avec Eclipse JKube

Il y a 25 ans, Java a été largement adopté par les programmeurs, devenant ainsi l'un des piliers autour desquels s'articulent les stacks d'applications. Cependant, aujourd'hui, de nombreuses personnes et organisations ayant longtemps fidèlement utilisé Java se trouvent occupées à migrer ou à envisager une migration vers la plateforme Kubernetes ou ses dérivés, tels que Red Hat OpenShift ou Amazon EKS.

Développement d'applications Java pour Kubernetes avec Eclipse JKube

Malheureusement, Kubernetes se distingue par sa courbe d'apprentissage abrupte et introduit un niveau opérationnel supplémentaire dans le processus de développement familier aux programmeurs Java. Aujourd'hui, nous allons expliquer comment utiliser Eclipse JKube, afin de simplifier ces opérations supplémentaires liées à Kubernetes et aux conteneurs, tout en assurant une migration fluide vers une plateforme cloud tout en préservant l'écosystème Java habituel. De plus, nous allons montrer comment déployer des applications Java sur la plateforme OpenShift à l'aide du plugin OpenShift Maven.

Le processus de développement Java traditionnel

Le processus de développement traditionnel Java (Fig. 1) implique que le développeur écrit le code, puis crée des unités de déploiement sous forme de fichiers JAR ou WAR, avant de déployer et d'exécuter ces fichiers sur un serveur web ou un serveur d'applications. Pour cela, il utilise principalement Maven depuis la ligne de commande ou un IDE comme IntelliJ ou Eclipse pour coder et empaqueter les applications. Les développeurs ont l'habitude de modifier le code et de tout tester soigneusement avant de l'enregistrer et de le soumettre à un système de gestion de version.

Développement d'applications Java pour Kubernetes avec Eclipse JKube

Fig. 1. Processus de développement Java traditionnel.

Processus de développement Java pour le cloud

Lors de la transition vers des applications cloud, Kubernetes et conteneurss'ajoutent à ce schéma décrit ci-dessus. Par conséquent, le développeur doit maintenant empaqueter les applications Java dans des images de conteneurs et créer des manifestes Kubernetes décrivant ces images. Ensuite, ces manifestes sont appliqués au serveur de production, sur lequel Kubernetes fonctionne. À son tour, Kubernetes récupère ces images à partir du registre et déploie les applications selon les configurations que nous avons spécifiées dans les manifestes, qui sont généralement des fichiers YAML.

La métamorphose du processus traditionnel de développement Java lors de la transition vers le cloud est illustrée à la Fig. 2.

Développement d'applications Java pour Kubernetes avec Eclipse JKube

Fig. 2. Processus de développement Java pour le cloud.

Eclipse JKube

La migration vers Kubernetes ajoute un niveau opérationnel supplémentaire au processus de développement, ce qui peut inquiéter de nombreux développeurs qui préfèrent se concentrer sur leur cœur de métier : la logique des applications, plutôt que sur leur déploiement. C'est ici qu'entre en jeu Eclipse JKube, qui permet aux développeurs d'utiliser leurs bibliothèques et plugins (JKube Kit avec Kubernetes Maven Plugin ou OpenShift Maven Plugin), afin d'effectuer sans effort les opérations liées aux conteneurs et à Kubernetes, suivant le schéma de la Fig. 2.

Dans le reste de cet article, nous montrerons comment simplifier le processus de développement Java dans un environnement Kubernetes en utilisant Eclipse JKube avec le plugin Kubernetes Maven Plugin.

Le processus de développement pour le cloud avec Eclipse JKube

Considérons un schéma légèrement modifié de développement Java pour le cloud selon la Fig. 2, en y intégrant Eclipse JKube et Kubernetes Maven Plugin, comme illustré à la Fig. 3.

Développement d'applications Java pour Kubernetes avec Eclipse JKube

Fig. 3. Processus de développement Java pour le cloud avec Eclipse JKube.

Comme nous le voyons ici, toutes les opérations d'interaction avec Kubernetes et les conteneurs (soulignées en rouge sur le schéma) sont remplacées par les objectifs par défaut d'Eclipse JKube énumérés dans le Tab. 1.

Tab. 1. Tâches par défaut d'Eclipse JKube.

La tâche
L'étape
Description

k8s:build
PRE_INTEGRATION_TEST
Construction d'images Docker

k8s:push
INSTALL
Envoi d'images Docker au registre

k8s:resource
PROCESS_RESOURCES
Génération de manifestes K8s

k8s:apply
COMPILE
Application des manifestes générés à K8s

k8s:undeploy
UNDEPLOY
Suppression des ressources K8s qui ont été déployées via k8s:apply et k8s:deploy

Remarque : Si vous ne souhaitez pas que les tâches utilisent ces défauts rigides (défauts opportuns), vous pouvez configurer manuellement Eclipse JKube selon vos besoins, car il prend en charge la configuration via colonnes et ressources.

Examinons maintenant des exemples d'utilisation d'Eclipse JKube et du Kubernetes Maven Plugin lors du travail avec des applications.

Déploiement d'une application Java dans Kubernetes avec Eclipse JKube

Dans cet exemple, nous déploierons une simple application Java dans un cluster Minikube avec Eclipse JKube. En utilisant le Kubernetes Maven Plugin, nous pouvons spécifier les paramètres de déploiement sans avoir à écrire de configuration.

Comme exemple d'application, nous utilisons un générateur de nombres aléatoires simple, qui produit une sortie JSON à l'endpoint /random :

~\/work\/repos\/eclipse-jkube-demo-project : $ curl localhost:8080\/random | jq .\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100    45    0    45    0     0    818      0 --:--:-- --:--:-- --:--:--   818\n{\n  \"id\": \"e80a4d10-c79b-4b9a-aaac-7c286cb37f3c\"\n}

Étape 1. Téléchargez le plugin Maven Kubernetes

Le plugin Maven Kubernetes se trouve dans le dépôt Dépôt Maven Central. Pour utiliser Eclipse JKube, ajoutez le plugin Maven Kubernetes dans votre pom.xml en tant que dépendance :

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

Si OpenShift est utilisé au lieu de Kubernetes pur, modifiez pom.xml comme suit :

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

Étape 2. Créez l'image Docker

Le fichier JAR de l'application peut être créé avec la commande mvn package, puis utilisez la tâche goal mvn k8s:build pour créer l'image Docker de cette application. Notez que nous avons remplacé le nom de l'image par défaut avec cette propriété :

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

Avant de créer l'image, assurez-vous que le démon Docker est correctement exposé. Cela peut être fait avec la commande suivante :

$ eval $(minikube docker-env)

Ensuite, saisissez la commande mvn k8s:build, et voici ce que nous verrons à l'écran lors de la création de l'image Docker avec la tâche build d'Eclipse JKube :

~/work/repos/eclipse-jkube-demo-project : $ mvn k8s:build
[INFO] Analyse des projets...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Création de random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:build (default-cli) @ random-generator ---
[INFO] k8s: Fonctionnement en mode Kubernetes
[INFO] k8s: Création de l'image Docker en mode Kubernetes
[INFO] k8s: Exécution du générateur spring-boot
[INFO] k8s: spring-boot : Utilisation de l'image Docker quay.io/jkube/jkube-java-binary-s2i:0.0.7 comme base / constructeur
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Créé docker-build.tar en 251 millisecondes
[INFO] k8s: [docker.io/rohankanojia/random-generator:0.0.1] "spring-boot": Image construite sha256:a20e5
[INFO] ------------------------------------------------------------------------
[INFO] CONSTRUCTION RÉUSSIE
[INFO] ------------------------------------------------------------------------
[INFO] Temps total :  5.053 s
[INFO] Terminé à : 2020-08-10T11:28:23+05:30
[INFO] ------------------------------------------------------------------------
~/work/repos/eclipse-jkube-demo-project : $

Étape 3. Poussez l'image vers le registre Docker

Après avoir construit l'image Docker avec le registre de push configuré (dans notre cas, c'est docker.io), nous pouvons envoyer cette image vers le registre. Voici ce qui sera affiché à l'écran après avoir demandé à Eclipse JKube d'exécuter la tâche push mvn k8s:push :

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:push
[INFO] Recherche de projets...
[INFO] 
[INFO] ----------------------< meetup:random-generator >-----------------------
[INFO] Construction de random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:push (default-cli) @ random-generator ---
[INFO] k8s: Exécution en mode Kubernetes
[INFO] k8s: Construction de l'image Docker en mode Kubernetes
[INFO] k8s: Exécution du générateur spring-boot
[INFO] k8s: spring-boot: Utilisation de l'image Docker quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 comme base \/ constructeur
[INFO] k8s: La poussée se réfère au dépôt [docker.io\/rohankanojia\/random-generator]
5dcd9556710f: La couche existe déjà 
b7139ad07aa8: La couche existe déjà 
b6f081e4b2b6: La couche existe déjà 
d8e1f35641ac: La couche existe déjà 
[INFO] k8s: 0.0.1: digest: sha256:9f9eda2a13b8cab1d2c9e474248500145fc09e2922fe3735692f9bda4c76002d taille: 1162
[INFO] k8s: Poussé docker.io\/rohankanojia\/random-generator:0.0.1 en 7 secondes 
[INFO] ------------------------------------------------------------------------
[INFO] CONSTRUCTION RÉUSSIE
[INFO] ------------------------------------------------------------------------
[INFO] Temps total:  11.222 s
[INFO] Terminé à: 2020-08-10T11:35:37+05:30
[INFO] ------------------------------------------------------------------------
~\/work\/repos\/eclipse-jkube-demo-project : $ 

Après l'envoi de l'image, il faut vérifier qu'elle est bien arrivée dans le registre. Dans notre cas, nous pouvons simplement la voir sur Docker Hub, comme indiqué à la Fig. 4.

Développement d'applications Java pour Kubernetes avec Eclipse JKube

Fig. 4. L'image envoyée est apparue dans Docker Hub.

Étape 4. Génération des manifestes des ressources Kubernetes pour l'application

Ainsi, nous avons construit l'image de l'application, maintenant nous devons écrire les manifestes Kubernetes. Pour cela, Eclipse JKube dispose d'une tâche qui génère des manifestes de ressources rigides, en se basant sur le framework Java sous-jacent (Spring Boot, Quarkus, Vert.x ou un autre). Il est également possible de configurer le manifeste en utilisant un fichier XML de configuration et en plaçant des morceaux bruts (fragments du manifeste des ressources requis) dans le dossier de l'application src\/main\/jkube. Dans ce cas, votre configuration sera intégrée aux manifestes générés.

Dans notre exemple, nous laissons tout tel quel, et donc Eclipse JKube génère un manifeste pour le déploiement par défaut et pour le service avec le type ClusterIP. Ensuite, nous modifierons le manifeste du service pour changer le type de service en NodePort. Le comportement par défaut peut être remplacé à l'aide de la propriété suivante :

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

Voici à quoi ressemble la sortie à l'écran après que nous ayons demandé à Eclipse JKube d'exécuter la tâche de ressources mvn k8s:resource.

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:resource
[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: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: 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 : $

Étape 5. Déployons l'application dans le cluster Kubernetes

Nous sommes donc prêts à procéder au déploiement de l'application : nous avons généré son image et ensuite créé automatiquement les manifestes de ressources. Il ne reste plus qu'à appliquer tout cela au cluster Kubernetes. Pour déployer l'application, nous pourrions bien sûr utiliser la commande kubectl apply -f, mais le plugin peut aussi le faire pour nous. Voici ce qui s'affichera à l'écran après avoir demandé à Eclipse JKube d'exécuter la tâche apply mvn k8s:apply :

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn k8s:apply
[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: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            9080:30570\/TCP    44h
kubernetes                              ClusterIP   10.96.0.1               443\/TCP           18d
random-generator                        NodePort    10.97.172.147           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"
}

Étape 6. Déployer l'application depuis le cluster Kubernetes

Cela utilise la tâche undeploy, qui supprime simplement toutes les ressources qui ont été appliquées lors de l'étape précédente, c'est-à-dire lors de l'exécution de la tâche apply. Voici ce que nous verrons à l'écran après avoir demandé à Eclipse JKube d'exécuter la tâche de déploiement mvn k8s:undeploy:

~\/work\/repos\/eclipse-jkube-demo-project : $ kubectl get all
NAME                                    READY   STATUS    RESTARTS   AGE
pod\/random-generator-58b7847d7f-9m9df   1\/1     En cours   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] Scan des projets...
[INFO] 
[INFO] ---------------------------------------------
[INFO] Construction de random-generator 0.0.1
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- kubernetes-maven-plugin:1.0.0-rc-1:undeploy (default-cli) @ random-generator ---
[INFO] k8s: Utilisation de Kubernetes à https:\/\/192.168.39.145:8443\/ dans l'espace de noms par défaut avec le manifeste \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/classes\/META-INF\/jkube\/kubernetes.yml 
[INFO] k8s: Utilisation de l'espace de noms : par défaut
[INFO] k8s: Suppression de la ressource Deployment default\/random-generator
[INFO] k8s: Suppression de la ressource Service default\/random-generator
[INFO] k8s: CONSEIL : Utilisez la commande `kubectl get pods -w` pour surveiller le démarrage de vos pods
[INFO] ------------------------------------------------------------------------
[INFO] CONSTRUCTION RÉUSSIE
[INFO] ------------------------------------------------------------------------
[INFO] Temps total :  3.412 s
[INFO] Terminé à : 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 : $

Que puis-je faire d'autre avec Eclipse JKube

Nous avons examiné les principales tâches du goal d'Eclipse JKube et du Kubernetes Maven Plugin, qui facilitent le développement d'applications Java sur la plateforme Kubernetes. Si vous ne souhaitez pas saisir ces tâches en permanence au clavier, vous pouvez les écrire dans la configuration du plugin, par exemple, comme ceci :

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

Il faut dire que dans cet article, nous n'avons pas examiné toutes les tâches des goals d'Eclipse JKube et du Kubernetes Maven Plugin, c'est pourquoi nous présentons dans le tableau 2 une liste de tâches supplémentaires qui peuvent également vous être utiles.

Tableau 2. Tâches supplémentaires des goals d'Eclipse JKube.

La tâche
L'étape
Description

k8s:log
VALIDER
Récupération des logs de l'application fonctionnant sur Kubernetes.

k8s:debug
PACKAGE
Ouverture d'un port de débogage pour effectuer le débogage d'une application fonctionnant sur Kubernetes directement depuis l'IDE.

k8s:deploy
INSTALL
Création d'un fork pour la tâche Install et application des manifestes générés au cluster Kubernetes de la même manière que pour la tâche apply.

k8s:watch
PACKAGE
Déploiement automatique à chaud de l'application en surveillant son espace de noms.

Déploiement d'applications Java sur Red Hat OpenShift à l'aide du plugin OpenShift Maven

Pour déployer l'application de notre exemple sur la plateforme Red Hat OpenShift, nous appliquerons le plugin OpenShift Maven. La seule différence sera que le préfixe des tâches changera de k8s à oc. Par défaut, le plugin Kubernetes Maven effectue docker-des constructions, tandis que le plugin OpenShift Maven effectue des constructions S2I. Nous ne faisons aucune modification à notre projet, à l'exception de la suppression de la propriété jkube.generator.name, car elle n'est pas nécessaire lors de l'envoi au registre (à l'étape de construction, OpenShift place l'image dans son registre interne). Voici ce qui apparaîtra à l'écran lorsque nous lancerons notre exemple, où, soit dit en passant, nous exécutons les objectifs de tâches non pas un par un, mais tous en même temps :

~\/work\/repos\/eclipse-jkube-demo-project : $ mvn oc:build oc:resource oc:apply
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------------------------------
[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: Utilisation de la construction OpenShift avec stratégie S2I
[INFO] oc: Exécution en mode OpenShift
[INFO] oc: Exécution du générateur spring-boot
[INFO] oc: spring-boot: Utilisation de l'image Docker quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 comme base \/ builder
[INFO] oc: [random-generator:0.0.1] "spring-boot": Créé l'archive source docker \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/docker\/random-generator\/0.0.1\/tmp\/docker-build.tar
[INFO] oc: Ajout au Secret pullsecret-jkube
[INFO] oc: Utilisation du Secret pullsecret-jkube
[INFO] oc: Création de BuildServiceConfig random-generator-s2i pour la construction Source
[INFO] oc: Création de ImageStream random-generator
[INFO] oc: Démarrage de la construction random-generator-s2i
[INFO] oc: Attente de la construction random-generator-s2i-1 pour terminer...
[INFO] oc: Mise en cache des blobs sous "/var/cache/blobs".
[INFO] oc: Obtention des signatures de source d'image
[INFO] oc: Copie du blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Copie du blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Copie du blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Copie de la configuration sha256:52d6788fcfdd39595264d34a3959464a5dabc1d4ef0ae188802b20fc2d6a857b
[INFO] oc: Écriture du manifeste à la destination de l'image
[INFO] oc: Stockage des signatures
[INFO] oc: Génération du dockerfile avec l'image builder quay.io\/jkube\/jkube-java-binary-s2i:0.0.7
[INFO] oc: ÉTAPE 1: DE quay.io\/jkube\/jkube-java-binary-s2i:0.0.7
[INFO] oc: ÉTAPE 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: ÉTAPE 3: ENV JAVA_APP_DIR="\/deployments"     OPENSHIFT_BUILD_NAME="random-generator-s2i-1"     OPENSHIFT_BUILD_NAMESPACE="default"
[INFO] oc: ÉTAPE 4: USER root
[INFO] oc: ÉTAPE 5: COPY upload\/src \/tmp\/src
[INFO] oc: ÉTAPE 6: RUN chown -R 1000:0 \/tmp\/src
[INFO] oc: ÉTAPE 7: USER 1000
[INFO] oc: ÉTAPE 8: RUN \/usr\/local\/s2i\/assemble
[INFO] oc: INFO Construction S2I source avec des binaires simples détectés
[INFO] oc: INFO Construction binaire S2I à partir de fabric8-maven-plugin détectée
[INFO] oc: INFO Copie des binaires de \/tmp\/src\/deployments vers \/deployments ...
[INFO] oc: random-generator-0.0.1.jar
[INFO] oc: INFO Copie des déploiements de deployments vers \/deployments...
[INFO] oc: '\/tmp\/src\/deployments\/random-generator-0.0.1.jar' -> '\/deployments\/random-generator-0.0.1.jar'
[INFO] oc: ÉTAPE 9: CMD \/usr\/local\/s2i\/run
[INFO] oc: ÉTAPE 10: COMMIT temp.builder.openshift.io\/default\/random-generator-s2i-1:48795e41
[INFO] oc: time="2020-08-10T06:37:49Z" level=info msg="Incompatibilité entre le système d'exploitation de l'image : l'image utilise "", s'attendant à "linux""
[INFO] oc: time="2020-08-10T06:37:49Z" level=info msg="Incompatibilité d'architecture d'image : l'image utilise "", s'attendant à "amd64""
[INFO] oc: Obtention des signatures de source d'image
[INFO] oc: Copie du blob sha256:d8e1f35641acb80b562f70cf49911341dfbe8c86f4d522b18efbf3732aa74223
[INFO] oc: Copie du blob sha256:b6f081e4b2b6de8be4b1dec132043d14c121e968384dd624fb69c2c07b482edb
[INFO] oc: Copie du blob sha256:b7139ad07aa8ce4ed5a132f7c5cc9f1de0f5099b5e155027a23d57f7fbe78b16
[INFO] oc: Copie du blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Copie de la configuration sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Écriture du manifeste à la destination de l'image
[INFO] oc: Stockage des signatures
[INFO] oc: --> 27aaadaf28e
[INFO] oc: 27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Obtention des signatures de source d'image
[INFO] oc: 
[INFO] oc: Poussée de l'image image-registry.openshift-image-registry.svc:5000\/default\/random-generator:0.0.1 ...
[INFO] oc: Copie du blob sha256:f320f94d91a064281f5127d5f49954b481062c7d56cce3b09910e471cf849050
[INFO] oc: Copie du blob sha256:cf0f3ebe9f536c782ab3835049cfbd9a663761ded9370791ef6ea3965c823aad
[INFO] oc: Copie du blob sha256:57de4da701b511cba33bbdc424757f7f3b408bea741ca714ace265da9b59191a
[INFO] oc: Copie du blob sha256:98972fc90a1108315cc5b05b2c691a0849a149727a7b81e76bc847ac2c6d9714
[INFO] oc: Copie de la configuration sha256:27aaadaf28e24856a66db962b88118b8222b61d79163dceeeed869f7289bc230
[INFO] oc: Écriture du manifeste à la destination de l'image
[INFO] oc: Stockage des signatures
[INFO] oc: Image-poussée réussie image-registry.openshift-image-registry.svc:5000\/default\/random-generator@sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: Poussée réussie
[INFO] oc: Construction random-generator-s2i-1 en statut Complet
[INFO] oc: Tag trouvé sur ImageStream random-generator tag: sha256:aa9e1a380c04ef9174ba56459c13d44420ebe653ebf32884d60fe4306b17306d
[INFO] oc: ImageStream random-generator écrit dans \/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: Utilisation du nom de l'image Docker de l'espace de noms : default
[INFO] oc: Exécution du générateur spring-boot
[INFO] oc: spring-boot: Utilisation de l'image Docker quay.io\/jkube\/jkube-java-binary-s2i:0.0.7 comme base \/ builder
[INFO] oc: jkube-controller: Ajout d'un DeploymentConfig par défaut
[INFO] oc: jkube-service: Ajout d'un service par défaut 'random-generator' avec des ports [8080]
[INFO] oc: jkube-healthcheck-spring-boot: Ajout d'une sonde de disponibilité sur le port 8080, chemin='\/actuator\/health', schéma='HTTP', avec un délai initial de 10 secondes
[INFO] oc: jkube-healthcheck-spring-boot: Ajout d'une sonde de vivacité sur le port 8080, chemin='\/actuator\/health', schéma='HTTP', avec un délai initial de 180 secondes
[INFO] oc: jkube-revision-history: Ajout d'une limite d'historique de révisions à 2
[INFO] 
[INFO] --- openshift-maven-plugin:1.0.0-rc-1:apply (default-cli) @ random-generator ---
[INFO] oc: Utilisation d'OpenShift à https:\/\/api.crc.testing:6443\/ dans l'espace de noms default avec le manifeste \/home\/rohaan\/work\/repos\/eclipse-jkube-demo-project\/target\/classes\/META-INF\/jkube\/openshift.yml 
[INFO] oc: Plateforme OpenShift détectée
[INFO] oc: Utilisation du projet : default
[INFO] oc: Création d'un Service à partir de openshift.yml espace de noms default nom random-generator
[INFO] oc: Service créé : target\/jkube\/applyJson\/default\/service-random-generator.json
[INFO] oc: Création d'un DeploymentConfig à partir de openshift.yml espace de noms default nom random-generator
[INFO] oc: DeploymentConfig créé : target\/jkube\/applyJson\/default\/deploymentconfig-random-generator.json
[INFO] oc: Création de Route default:random-generator hôte: null
[INFO] oc: CONSEIL : Utilisez la commande `oc get pods -w` pour surveiller le démarrage de vos pods
[INFO] ------------------------------------------------------------------------
[INFO] CONSTRUCTION RÉUSSIE
[INFO] ------------------------------------------------------------------------
[INFO] Temps total :  01:07 min
[INFO] Terminé à : 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       En cours d'exécution     0          14s
random-generator-1-vnrm9       0\/1       En cours d'exécution     0          11s
random-generator-s2i-1-build   0\/1       Terminé   0          1m
random-generator-1-vnrm9   1\/1       En cours d'exécution   0         24s
random-generator-1-deploy   0\/1       Terminé   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                    Aucun
~\/work\/repos\/eclipse-jkube-demo-project : $ curl random-generator-default.apps-crc.testing\/random 
  % Total    % Reçu % Transféré  Vitesse moyenne   Temps    Temps     Temps  Actuel
                                 Dload  Upload   Total   Dépensé   Restant  Vitesse
100    45    0    45    0     0   1666      0 --:--:-- --:--:-- --:--:--  1730
{
  "id": "d80052d9-2f92-43cb-b9eb-d7cffb879798"
}
~\/work\/repos\/eclipse-jkube-demo-project : $

Vidéo-tutoriel

Pour en savoir plus sur la simplification du développement Kubernetes avec Eclipse JKube, regardez le vidéo-tutoriel sur le déploiement rapide d'une application Spring Boot simple sur Minikube :

Lire la vidéo

Conclusion

Dans cet article, nous avons montré comment Eclipse JKube facilite la vie des développeurs Java travaillant avec Kubernetes. Plus d'informations sur Eclipse JKube sont disponibles sur site du projet et en GitHub.

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster