Déployer une application de démarrage de printemps sur OpenShift
1. Vue d'ensemble
Dans ce didacticiel, nous allons montrer comment déployer une application à partir de notre didacticielBootstrap a Simple Application using Spring Boot versOpenshift.
Dans ce cadre, nous allons:
-
Installez et configurez les outils de développement Openshift.
-
Créez un projet Openshift et un déploiement MySQL.
-
Configurez l'application pourSpring Cloud Kubernetes.
-
Créez et déployez l'application dans un conteneur à l'aide desFabric8 Maven plugin, puis testez et mettez à l'échelle l'application.
2. Configuration OpenShift
Tout d'abord,we need to install Minishift, the local single-node Openshift cluster, and the Openshift client.
Avant d'utiliser Minishift, nous devons configurer les autorisations pour l'utilisateur développeur:
minishift addons install --defaults
minishift addons enable admin-user
minishift start
oc adm policy --as system:admin add-cluster-role-to-user cluster-admin developer
Nous souhaitons maintenant utiliser la console Openshift pour créer un service MySQL. Nous pouvons lancer l'URL du navigateur en utilisant:
minishift console
Si vous n'êtes pas connecté automatiquement, utilisezdeveloper/developer.
Créez un projet nomméexample-demo, puis créez un service de base de données MySQL à partir du catalogue. Fournissezexample-db pour le service de base de données,example_db pour le nom de la base de données MySQL et laissez les autres valeurs à leurs valeurs par défaut.
Nous avons maintenant un service et des secrets pour accéder à la base de données. Prenez note de l'URL de connexion à la base de données:mysql://example-db:3306/example_db
Nous devons également autoriser les applications à lire les configurations telles que Kubernetes Secrets et ConfigMaps:
oc create rolebinding default-view --clusterrole=view \
--serviceaccount=example-demo:default --namespace=example-demo
3. Dépendances de Spring Cloud Kubernetes
Nous utiliserons le projetSpring Cloud Kubernetes pour activer les API cloud natives pour Kubernetes qui sous-tendent OpenShift:
openshift
org.springframework.cloud
spring-cloud-kubernetes-dependencies
0.3.0.RELEASE
pom
import
org.springframework.cloud
spring-cloud-dependencies
Finchley.SR2
pom
import
org.springframework.cloud
spring-cloud-starter-kubernetes-config
org.springframework.boot
spring-boot-starter-actuator
Nous utiliserons également lesFabric8 Maven plugin pour créer et déployer le conteneur:
io.fabric8
fabric8-maven-plugin
3.5.37
fmp
resource
build
4. Configuration d'application
Maintenantwe need to provide configuration to ensure the correct Spring Profiles and Kubernetes Secrets are injected as environmental variables.
Let’s create a YAML fragment in src/main/fabric8 afin que le plugin Fabric8 Maven l'utilise lors de la création de la configuration de déploiement.
Nous devons également ajouter une section pour l'actionneur Spring Boot car la valeur par défaut de Fabric8 essaie toujours d'accéder à/health au lieu de/actuator/health:
spec:
template:
spec:
containers:
- env:
- name: SPRING_PROFILES_ACTIVE
value: mysql
- name: SPRING_DATASOURCE_USER
valueFrom:
secretKeyRef:
name: example-db
key: database-user
- name: SPRING_DATASOURCE_PASSWORD
valueFrom:
secretKeyRef:
name: example-db
key: database-password
livenessProbe:
httpGet:
path: /actuator/health
port: 8080
scheme: HTTP
initialDelaySeconds: 180
readinessProbe:
httpGet:
path: /actuator/health
port: 8080
scheme: HTTP
initialDelaySeconds: 30
Ensuite,we’ll save a ConfigMap in*openshift/configmap.yml*, this contient les données pour unapplication.properties avec l'URL MySQL:
apiVersion: v1
kind: ConfigMap
metadata:
name: spring-boot-bootstrap
data:
application.properties: |-
spring.datasource.url=jdbc:mysql://example-db:3306/example_db
Before interacting with Openshift using the command line client we need to log in. En haut à droite de la console Web, une icône d'utilisateur permet de sélectionner le menu déroulant intitulé «Copier la commande de connexion». Puis utilisez dans un shell:
oc login https://192.168.42.122:8443 --token=
Vérifions que nous utilisons le bon projet:
oc project example-demo
Et puiswe upload the ConfigMap:
oc create -f openshift/configmap.yml
5. Déploiement
Pendant le déploiement, le plug-in Fabric8 Maven tente de déterminer le port configuré. Le fichierapplication.properties existant dans notre exemple d'application utilise une expression pour définir le port, que le plugin ne peut pas analyser. Par conséquent, nous devons commenter la ligne:
#server.port=${port:8080}
à partir desapplication.properties actuels.
Nous sommes maintenant prêts pour le déploiement:
mvn clean fabric8:deploy -P openshift
Nous pouvons suivre l'évolution du déploiement jusqu'à ce que notre application s'exécute:
oc get pods -w
Devrait fournir une liste:
NAME READY STATUS RESTARTS AGE
example-db-1-9m2cr 1/1 Running 1 1h
spring-boot-bootstrap-1-x6wj5 1/1 Running 0 46s
Avant de tester l'application, nous devons déterminer l'itinéraire:
oc get routes
Imprimera les itinéraires dans le projet actuel:
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
spring-boot-bootstrap spring-boot-bootstrap-example-demo.192.168.42.122.nip.io spring-boot-bootstrap 8080 None
Maintenant, vérifions que notre application fonctionne en ajoutant un livre:
http POST http://spring-boot-bootstrap-example-demo.192.168.42.122.nip.io/api/books \
title="The Player of Games" author="Iain M. Banks"
Attend la sortie suivante:
HTTP/1.1 201
{
"author": "Iain M. Banks",
"id": 1,
"title": "The Player of Games"
}
6. Mise à l'échelle de l'application
Développons le déploiement pour exécuter 2 instances:
oc scale --replicas=2 dc spring-boot-bootstrap
Et nous pouvons utiliser les mêmes étapes que précédemment pour surveiller le déploiement, obtenir les itinéraires et tester le noeud final.
OpenShift fournit une large gamme d'options pourmanaging performance and scaling au-delà de la portée de cet article.
7. Conclusion
Dans ce tutoriel, nous:
-
Installation et configuration des outils de développement Openshift et de l'environnement local
-
Déploiement d'un service MySQL
-
Création d'une configuration ConfigMap and Deployment pour fournir les propriétés de connexion à la base de données
-
Construit et déployé un conteneur pour notre application Spring Boot configurée, et
-
Testé et mis à l'échelle de l'application.
Pour plus de détails, consultezthe detailed Openshift documentation.
Le code source complet de nos exemples ici est, comme toujours,over on GitHub.