Stellen Sie eine Spring Boot-Anwendung für OpenShift bereit

Stellen Sie eine Spring Boot-Anwendung für OpenShift bereit

1. Überblick

In diesem Lernprogramm wird gezeigt, wie eine Anwendung von unserem LernprogrammBootstrap a Simple Application using Spring BootbisOpenshiftbereitgestellt wird.

Als Teil davon werden wir:

  • Installieren und konfigurieren Sie die Openshift-Entwicklungstools.

  • Erstellen Sie ein Openshift-Projekt und eine MySQL-Bereitstellung.

  • Konfigurieren Sie die Anwendung fürSpring Cloud Kubernetes.

  • Erstellen und implementieren Sie die Anwendung in einem Container mitFabric8 Maven plugin und testen und skalieren Sie die Anwendung.

2. OpenShift-Konfiguration

Erstenswe need to install Minishift, the local single-node Openshift cluster, and the Openshift client.

Vor der Verwendung von Minishift müssen die Berechtigungen für den Entwicklerbenutzer konfiguriert werden:

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

Jetzt wollen wir die Openshift-Konsole verwenden, um einen MySQL-Dienst zu erstellen. Wir können die Browser-URL starten mit:

minishift console

Wenn Sie nicht automatisch angemeldet sind, verwenden Siedeveloper/developer.

Erstellen Sie ein Projekt mit dem Namenexample-demo und erstellen Sie dann einen MySQL-Datenbankdienst aus dem Katalog. Geben Sieexample-db für den Datenbankdienst,example_db  für den MySQL-Datenbanknamen an und belassen Sie die anderen Werte auf ihren Standardwerten.

Wir haben jetzt einen Dienst und Geheimnisse für den Zugriff auf die Datenbank. Beachten Sie die URL der Datenbankverbindung:mysql://example-db:3306/example_db

Wir müssen auch zulassen, dass Anwendungen Konfigurationen wie Kubernetes Secrets und ConfigMaps lesen können:

oc create rolebinding default-view --clusterrole=view \
  --serviceaccount=example-demo:default --namespace=example-demo

3. Spring Cloud Kubernetes-Abhängigkeiten

Wir werden dasSpring Cloud Kubernetes-Projekt verwenden, um die Cloud-nativen APIs für Kubernetes zu aktivieren, die Openshift unterstützen:


  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
    
  

Wir werden auch dieFabric8 Maven plugin verwenden, um den Container zu erstellen und bereitzustellen:


    io.fabric8
    fabric8-maven-plugin
    3.5.37
    
      
        fmp
        
          resource
          build
        
      
    

4. Anwendungskonfiguration

Jetztwe 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, damit das Fabric8 Maven-Plugin es beim Erstellen der Bereitstellungskonfiguration verwendet.

Wir müssen auch einen Abschnitt für den Spring Boot-Aktuator hinzufügen, da die Standardeinstellung in Fabric8 weiterhin versucht, auf/health anstatt auf/actuator/health: zuzugreifen

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

Als nächstes enthältwe’ll save a ConfigMap in*openshift/configmap.yml*, die Daten für einapplication.properties mit der MySQL-URL:

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. Oben rechts in der Webkonsole befindet sich ein Benutzersymbol, über das wir das Dropdown-Menü mit der Bezeichnung "Anmeldebefehl kopieren" auswählen können. Dann in einer Shell verwenden:

oc login https://192.168.42.122:8443 --token=

Stellen wir sicher, dass wir das richtige Projekt verwenden:

oc project example-demo

Und dannwe upload the ConfigMap:

oc create -f openshift/configmap.yml

5. Einsatz

Während der Bereitstellung versucht das Fabric8 Maven-Plugin, den konfigurierten Port zu ermitteln. Die vorhandeneapplication.properties-Datei in unserer Beispielanwendung verwendet einen Ausdruck, um den Port zu definieren, den das Plugin nicht analysieren kann. Deshalb müssen wir die Zeile kommentieren:

#server.port=${port:8080}

vom aktuellenapplication.properties.

Wir sind jetzt bereit für den Einsatz:

mvn clean fabric8:deploy -P openshift

Wir können den Bereitstellungsfortschritt verfolgen, bis unsere Anwendung ausgeführt wird:

oc get pods -w

Sollte eine Auflistung bereitstellen:

NAME                            READY     STATUS    RESTARTS   AGE
example-db-1-9m2cr             1/1       Running   1           1h
spring-boot-bootstrap-1-x6wj5   1/1       Running   0          46s

Bevor wir die Anwendung testen, müssen wir die Route bestimmen:

oc get routes

Gibt die Routen im aktuellen Projekt aus:

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

Überprüfen Sie nun, ob unsere Anwendung funktioniert, indem Sie ein Buch hinzufügen:

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"

Erwarten Sie die folgende Ausgabe:

HTTP/1.1 201
{
    "author": "Iain M. Banks",
    "id": 1,
    "title": "The Player of Games"
}

6. Skalieren der Anwendung

Skalieren Sie die Bereitstellung auf zwei Instanzen:

oc scale --replicas=2 dc spring-boot-bootstrap

Wir können dann die gleichen Schritte wie zuvor ausführen, um die Bereitstellung zu überwachen, die Routen abzurufen und den Endpunkt zu testen.

Openshift bietet eine breite Palette von Optionen fürmanaging performance and scaling, die über den Rahmen dieses Artikels hinausgehen.

7. Fazit

In diesem Tutorial werden wir:

  • Installierte und konfigurierte die Openshift-Entwicklungstools und die lokale Umgebung

  • Bereitstellen eines MySQL-Dienstes

  • Erstellt eine ConfigMap- und Bereitstellungskonfiguration, um Datenbankverbindungseigenschaften bereitzustellen

  • Erstellte und stellte einen Container für unsere konfigurierte Spring Boot-Anwendung bereit, und

  • Getestet und skaliert die Anwendung.

Weitere Informationen finden Sie unterthe detailed Openshift documentation.

Der vollständige Quellcode unserer Beispiele hier ist wie immerover on GitHub.