Spring BootアプリケーションをOpenShiftにデプロイする

Spring Bootアプリケーションを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 Consoleを使用してMySQLサービスを作成します。 次を使用してブラウザのURLを起動できます。

minishift console

自動的にログインしない場合は、developer/developer.を使用してください

example-demoという名前のプロジェクトを作成してから、カタログからMySQLデータベースサービスを作成します。 データベースサービスにexample-db、MySQLデータベース名にexample_db を指定し、他の値はデフォルトのままにします。

これで、データベースにアクセスするためのサービスと秘密ができました。 データベース接続の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 CloudKubernetesの依存関係

Spring Cloud Kubernetesプロジェクトを使用して、Openshiftを支えるKubernetesのクラウ​​ドネイティブAPIを有効にします。


  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。これにより、Fabric8Mavenプラグインはデプロイメント構成の作成時にそれを使用します。

また、Fabric8のデフォルトでは、/actuator/health:ではなく/healthにアクセスしようとするため、SpringBootアクチュエーターのセクションも追加する必要があります。

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*,には、MySQL URLを含むapplication.propertiesのデータが含まれます。

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。 Webコンソールの右上には、「ログインコマンドのコピー」というラベルの付いたドロップダウンメニューを選択できるユーザーアイコンがあります。 次に、シェルで使用します。

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. アプリケーションのスケーリング

2つのインスタンスを実行するようにデプロイメントをスケーリングしてみましょう。

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です。