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 besoinDockerfile
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-samplekind: 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ériauxInstaller Minishiftpour en savoir plus sur OpenShift, je vous recommande de commencer par Minishift