Déployer une application de démarrage de printemps sur OpenShift

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.