Перейти к основному содержимому

Развертывание приложения Spring Boot в OpenShift

· 5 мин. чтения

1. Обзор

В этом руководстве мы покажем, как развернуть приложение из нашего простого приложения Bootstrap, используя учебник Spring Boot, в Openshift .

В рамках этого мы:

  • Установите и настройте инструменты разработки Openshift.
  • Создайте проект Openshift и развертывание MySQL.
  • Настройте приложение для Spring Cloud Kubernetes .
  • Создайте и разверните приложение в контейнере с помощью подключаемого модуля Fabric8 Maven , а затем протестируйте и масштабируйте приложение.

2. Конфигурация Openshift

Во- первых, нам нужно установить Minishift , локальный одноузловой кластер Openshift и клиент Openshift .

Перед использованием 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.

Создайте проект с именем foreach-demo, а затем создайте службу базы данных MySQL из каталога. Укажите foreach-db для службы базы данных, foreach_db для имени базы данных MySQL и оставьте остальные значения по умолчанию.

Теперь у нас есть сервис и секреты для доступа к базе данных. Обратите внимание на URL-адрес подключения к базе данных: mysql://foreach-db:3306/foreach_db.

Нам также нужно разрешить приложениям читать конфигурацию, такую как Kubernetes Secrets и ConfigMaps:

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

3. Зависимости Spring Cloud Kubernetes

Мы будем использовать проект Spring Cloud Kubernetes , чтобы включить собственные облачные API для Kubernetes, лежащие в основе Openshift:

<profile>
<id>openshift</id>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes-dependencies</artifactId>
<version>0.3.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
</profile>

Мы также будем использовать подключаемый модуль Fabric8 Maven для сборки и развертывания контейнера:

<plugin>
<groupId>io.fabric8</groupId>
<artifactId>fabric8-maven-plugin</artifactId>
<version>3.5.37</version>
<executions>
<execution>
<id>fmp</id>
<goals>
<goal>resource</goal>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>

4. Конфигурация приложения

Теперь нам нужно предоставить конфигурацию, чтобы убедиться, что правильные профили Spring и секреты Kubernetes внедряются в качестве переменных среды .

Давайте создадим фрагмент YAML в src/main/fabric8 , чтобы подключаемый модуль Maven Fabric8 использовал его при создании конфигурации развертывания.

Нам также нужно добавить раздел для привода Spring Boot, поскольку по умолчанию в Fabric8 все еще пытается получить доступ к /health вместо /actuator/health:

spec:
template:
spec:
containers:
- env:
- name: SPRING_PROFILES_ACTIVE
value: mysql
- name: SPRING_DATASOURCE_USER
valueFrom:
secretKeyRef:
name: foreach-db
key: database-user
- name: SPRING_DATASOURCE_PASSWORD
valueFrom:
secretKeyRef:
name: foreach-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

Далее мы сохраним ConfigMap в openshift/configmap.yml , он содержит данные для application.properties с URL-адресом MySQL:

apiVersion: v1
kind: ConfigMap
metadata:
name: spring-boot-bootstrap
data:
application.properties: |-
spring.datasource.url=jdbc:mysql://foreach-db:3306/foreach_db

Прежде чем взаимодействовать с Openshift с помощью клиента командной строки, нам необходимо войти в систему . В правом верхнем углу веб-консоли находится значок пользователя, из которого мы можем выбрать раскрывающееся меню с надписью «Копировать команду входа». Затем используйте в оболочке:

oc login https://192.168.42.122:8443 --token=<some-token>

Давайте удостоверимся, что мы используем правильный проект:

oc project foreach-demo

И затем мы загружаем 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
foreach-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-foreach-demo.192.168.42.122.nip.io spring-boot-bootstrap 8080 None

Теперь давайте проверим, что наше приложение работает, добавив книгу:

http POST http://spring-boot-bootstrap-foreach-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. Масштабирование приложения

Давайте масштабируем развертывание для запуска 2 экземпляров:

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

И мы можем использовать те же шаги, что и ранее, чтобы наблюдать за его развертыванием, получать маршруты и тестировать конечную точку.

Openshift предоставляет широкий спектр возможностей для управления производительностью и масштабирования , выходящих за рамки этой статьи.

7. Заключение

В этом уроке мы:

  • Установил и настроил инструменты разработки Openshift и локальную среду
  • Развернул службу MySQL
  • Создана конфигурация ConfigMap и развертывания для предоставления свойств подключения к базе данных.
  • Создал и развернул контейнер для нашего настроенного приложения Spring Boot, и
  • Протестировано и масштабировано приложение.

Для получения более подробной информации ознакомьтесь с подробной документацией Openshift .

Полный исходный код наших примеров здесь, как всегда, находится на GitHub .