Разверните загрузочное приложение Spring в OpenShift
1. обзор
В этом руководстве мы покажем, как развернуть приложение из нашего руководстваBootstrap a Simple Application using Spring Boot вOpenshift.
В рамках этого мы:
-
Установите и настройте инструменты разработки Openshift.
-
Создайте проект Openshift и развертывание MySQL.
-
Настройте приложение дляSpring Cloud Kubernetes.
-
Создайте и разверните приложение в контейнере с помощьюFabric8 Maven plugin, а затем протестируйте и масштабируйте приложение.
2. Конфигурация Openshift
Во-первых,we need to install Minishift, the local single-node Openshift cluster, and the Openshift client.
Перед использованием Minishift нам нужно настроить права доступа для разработчика:
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
Теперь мы хотим использовать консоль Openshift для создания службы MySQL. Мы можем запустить URL браузера, используя:
minishift console
Если вы не вошли в систему автоматически, используйтеdeveloper/developer.
Создайте проект с именемexample-demo, а затем создайте службу базы данных MySQL из каталога. Укажитеexample-db для службы базы данных,example_db для имени базы данных MySQL и оставьте другие значения по умолчанию.
Теперь у нас есть сервис и секреты для доступа к базе данных. Обратите внимание на URL-адрес подключения к базе данных:mysql://example-db:3306/example_db
Нам также нужно разрешить приложениям читать конфигурацию, например, Kubernetes Secrets и ConfigMaps:
oc create rolebinding default-view --clusterrole=view \
--serviceaccount=example-demo:default --namespace=example-demo
3. Зависимости Spring Cloud Kubernetes
Мы будем использовать проектSpring Cloud Kubernetes, чтобы включить облачные API для Kubernetes, которые лежат в основе 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
Мы также будем использоватьFabric8 Maven plugin для сборки и развертывания контейнера:
io.fabric8
fabric8-maven-plugin
3.5.37
fmp
resource
build
4. Конфигурация приложения
Теперьwe 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, чтобы плагин Fabric8 Maven использовал его при создании конфигурации развертывания.
Нам также нужно добавить секцию для привода Spring Boot, поскольку по умолчанию в Fabric8 все еще пытается получить доступ к/health вместо/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
Затемwe’ll save a ConfigMap in*openshift/configmap.yml*, содержит данные дляapplication.properties с 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. В правом верхнем углу веб-консоли находится значок пользователя, из которого мы можем выбрать раскрывающееся меню «Копировать команду входа». Затем используйте в оболочке:
oc login https://192.168.42.122:8443 --token=
Убедитесь, что мы используем правильный проект:
oc project example-demo
И тогдаwe upload the ConfigMap:
oc create -f openshift/configmap.yml
5. развертывание
Во время развертывания плагин Fabric8 Maven пытается определить настроенный порт. Существующий файлapplication.properties в нашем примере приложения использует выражение для определения порта, который плагин не может проанализировать. Поэтому мы должны прокомментировать строку:
#server.port=${port:8080}
от текущегоapplication.properties.
Теперь мы готовы к развертыванию:
mvn clean fabric8:deploy -P openshift
Мы можем наблюдать за ходом развертывания, пока не увидим, как работает наше приложение:
oc get pods -w
Должен предоставить листинг:
NAME READY STATUS RESTARTS AGE
example-db-1-9m2cr 1/1 Running 1 1h
spring-boot-bootstrap-1-x6wj5 1/1 Running 0 46s
Прежде чем тестировать приложение, нам нужно определить маршрут:
oc get routes
Распечатаем маршруты в текущем проекте:
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
Теперь давайте проверим, что наше приложение работает, добавив книгу:
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"
Ожидается следующий вывод:
HTTP/1.1 201
{
"author": "Iain M. Banks",
"id": 1,
"title": "The Player of Games"
}
6. Масштабирование приложения
Давайте масштабируем развертывание для запуска двух экземпляров:
oc scale --replicas=2 dc spring-boot-bootstrap
И мы можем использовать те же шаги, что и ранее, чтобы наблюдать за его развертыванием, получать маршруты и тестировать конечную точку.
Openshift предоставляет широкий спектр опций дляmanaging performance and scaling, выходящих за рамки этой статьи.
7. Заключение
В этом уроке мы:
-
Установил и настроил инструменты разработки Openshift и локальную среду
-
Развернутый сервис MySQL
-
Создана конфигурация ConfigMap и Deployment для предоставления свойств подключения к базе данных.
-
Создал и развернул контейнер для нашего настроенного приложения Spring Boot, и
-
Протестировал и масштабировал приложение.
Для получения дополнительных сведений посетитеthe detailed Openshift documentation.
Полный исходный код наших примеров здесь, как всегда,over on GitHub.