Déploiement d'applications Java dans OpenShift

Il semblerait que ce soit le cas? Nous connectons fabric8-maven-plugin au projet et c'est parti: construire, exécuter l'application dans OpenShift. Mais quand j'ai étudié, je voulais plus de compréhension de ce processus, puis je voulais plus de contrôle et de liberté sur le processus de création et de déploiement de l'application dans OpenShift. Ainsi, le scénario suivant s'est avéré avec de telles fonctionnalités.

  • Je construis l'artefact moi-même, avec mon outil (maven, gradle, etc.)
  • Je contrôle la création de Docker Image via le Dockerfile
  • Le processus de construction et de déploiement dans Openshift est configuré dans le modèle, c'est-à-dire toutes les spécifications de conteneur, pod sont personnalisables.
  • Ainsi, le processus lui-même peut être transféré vers un assemblage externe, un système de déploiement

Bien sûr, pour cela, j'utilise les fonctionnalités disponibles d'OpenShift lui-même, qui sont nombreuses.
Et donc j'ai un artefact java préparé, puis je prépare un Dockerfile avec les caractéristiques et les fonctionnalités dont j'ai besoin

Dockerfile

FROM openjdk

MAINTAINER Rylkov Alexander <arylkov@.>

COPY demo.springboot.mvn-0.0.1-SNAPSHOT.jar /deployments/app.jar

ENV JAVA_OPTS="$JAVA_OPTS -Xms500m -Xmx1024m"

EXPOSE 8080
EXPOSE 5005

ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /deployments/app.jar" ]

Ainsi, il y aura deux fichiers dans le dossier: l'artefact et Dockerfile.La



composition des fichiers est conditionnelle, si par exemple dans Dockerfile des fichiers supplémentaires pour l'image de docker sont nécessaires, nous les ajoutons ici. Maintenant, l'image Java de base et mon application Spring Boot sont spécifiées dans le Dockerfile, deux ports sont ouverts, etc.

À cette étape, nous avons le choix / la liberté dans l'outil de construction de l'application et d'assemblage de l'image Docker.

Ensuite, je prépare le modèle OpenShift pour l'application, cette opération peut être ponctuelle, il suffit de la paramétrer. Puisqu'il peut contenir tout ce qui est possible pour créer, lancer et faire fonctionner l'application, nous gérerons ces processus à travers lui. Ce sera assez simple pour moi et se composera des trois configurations les plus nécessaires

  • Imagestream
  • Buildconfig
  • DeploymentConfig

Modèle java-app-sample
kind: Template
apiVersion: v1
metadata:
  labels:
    app: java-app-sample
  name: java-app-sample
  annotations:
    description: >-
      This example shows how to create a simple Java application in openshift
    tags: java
parameters:
  - name: APP_NAME
    description: application name
    value: app-sample
    required: true
objects:
  - kind: ImageStream
    apiVersion: v1
    metadata:
      name: "${APP_NAME}"
    spec:
      tags:
        - from:
            kind: DockerImage
            name: 172.30.1.1:5000/myproject/${APP_NAME}:latest
          name: latest
  - kind: BuildConfig
    apiVersion: v1
    metadata:
      name: "${APP_NAME}"
      labels:
        name: "${APP_NAME}"
    spec:
      source:
        binary: {}
        type: Binary
      strategy:
        type: Docker
      output:
        to:
          kind: DockerImage
          name: 172.30.1.1:5000/myproject/${APP_NAME}:latest
      postCommit: {}
      resources: {}
  - kind: DeploymentConfig
    apiVersion: v1
    metadata:
      name: "${APP_NAME}"
    spec:
      strategy:
        type: Rolling
        rollingParams:
          updatePeriodSeconds: 1
          intervalSeconds: 1
          timeoutSeconds: 120
        resources: {}
      replicas: 1
      selector:
        app: "${APP_NAME}"
      template:
        metadata:
          labels:
            app: "${APP_NAME}"
        spec:
          containers:
            - name: "${APP_NAME}"
              image: 172.30.1.1:5000/myproject/${APP_NAME}:latest
              ports:
                - containerPort: 8080
                  protocol: TCP
                - containerPort: 5005
                  protocol: TCP
              env:
                - name: TZ
                  value: Europe/Moscow
              resources:
                limits:
                  cpu: '0.5'
                  memory: 1000Mi
                requests:
                  cpu: '0.2'
                  memory: 500Mi
              imagePullPolicy: Always
          restartPolicy: Always
          dnsPolicy: ClusterFirst
    triggers:
      - type: ConfigChange
        imageChangeParams:
          automatic: true
          containerNames:
            - "${APP_NAME}"
          from:
            kind: ImageStreamTag
            name: 172.30.1.1:5000/myproject/${APP_NAME}:latest
      - type: ImageChange
    status: {}


Certains paramètres de conteneur sont indiqués dans le modèle à titre d'exemple, par exemple, ressources / limites, variable d'environnement TZ, un paramètre de modèle est spécifié - nom de l'application (APP_NAME). L'adresse du docker du registre est spécifiée pour la version minishift (je l'utilise localement pour le développement 172.30.1.1►000 / myproject /) et autres.

Mais pour mon scénario, la chose la plus importante est indiquée ici

  - kind: BuildConfig
    spec:
      source:
        binary: {}
        type: Binary
      strategy:
        type: Docker

BuildConfig indique que la source sera le (s) fichier (s) binaire (s), et pour gérer la stratégie de préparation d'image docker - Dockerfile (type: Docker)

Créons ce modèle dans OpenShift

 oc create -f template.yaml


Ce modèle apparaîtra dans le répertoire des modèles (il sera possible d'organiser le processus à partir de la console Web UI, mais pas ici).



En utilisant ce modèle, nous allons créer une application (en fait, ce n'est qu'un nom et pas plus)

oc new-app java-app-sample -p APP_NAME=app-sample

spécifiez le nom du modèle et le paramètre du nom de l'application



Trois de mes configurations ont été créées.

Nous entamons le processus d'assemblage et de déploiement de l'application dans le conteneur.

>oc start-build app-sample --from-dir . --follow

Il est important d'exécuter à partir du dossier où le fichier binaire et Dockerfile sont spécifiés, seul le paramètre --from-dir indique que le dossier entier sera préparé pour le chargement dans OpenShift pour la construction et le déploiement de l'image dans le registre docker. Il existe d'autres paramètres de cette commande, par exemple à partir de l'archive.



Nous voyons que le contenu du dossier a été chargé dans OpenShift, qui a lancé le processus Docker pour préparer l'image pour le Dockerfile et a finalement placé l'image dans le registre Docker.

L'application a démarré



dans la console Web OpenShift. Les paramètres de conteneur spécifiés dans la configuration sont



spécifiés. La variable d'environnement spécifiée dans la configuration est



enregistrée



Ainsi, sans plug-ins supplémentaires, avec un contrôle maximal et une liberté de choix, nous avons réussi à placer l'application dans OpenShift.

Matériaux

Installer Minishift
pour en savoir plus sur OpenShift, je vous recommande de commencer par Minishift

All Articles