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 .