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.