Развернуть загрузочное приложение Spring в OpenShift

Разверните загрузочное приложение 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.