1. 概要

このチュートリアルでは、 Bootstrap a Simple Application usingSpring BootチュートリアルからOpenshiftにアプリケーションをデプロイする方法を示します。

この一環として、次のことを行います。

  • Openshift開発ツールをインストールして設定します。
  • OpenshiftプロジェクトとMySQLデプロイメントを作成します。
  • Spring CloudKubernetes用にアプリケーションを構成します。
  • 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

次に、OpenshiftConsoleを使用してMySQLサービスを作成します。 次を使用してブラウザのURLを起動できます。

minishift console

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

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

これで、データベースにアクセスするためのサービスとシークレットができました。 データベース接続のURLに注意してください: mysql:// baeldung-db:3306 / baeldung_db

また、アプリケーションがKubernetesSecretsやConfigMapsなどの設定を読み取れるようにする必要があります。

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

3. SpringCloudKubernetesの依存関係

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

<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シークレットが環境変数として挿入されるように構成を提供する必要があります

src / main / fabric8 にYAMLフラグメントを作成して、Fabric8Mavenプラグインがデプロイメント構成の作成時にそれを使用するようにします。

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

spec:
  template:
    spec:
      containers:
      - env:
        - name: SPRING_PROFILES_ACTIVE
          value: mysql
        - name: SPRING_DATASOURCE_USER
          valueFrom:
            secretKeyRef:
              name: baeldung-db
              key: database-user
        - name: SPRING_DATASOURCE_PASSWORD
          valueFrom:
            secretKeyRef:
              name: baeldung-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のデータとMySQLURLが含まれます。

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

コマンドラインクライアントを使用してOpenshiftと対話する前に、にログインする必要があります。 Webコンソールの右上には、「ログインコマンドのコピー」というラベルの付いたドロップダウンメニューを選択できるユーザーアイコンがあります。 次に、シェルで使用します。

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

正しいプロジェクトを使用していることを確認しましょう。

oc project baeldung-demo

次に、 ConfigMap をアップロードします

oc create -f openshift/configmap.yml

5. 展開

デプロイ中に、Fabric8Mavenプラグインは構成されたポートを判別しようとします。 サンプルアプリケーションの既存のapplication.propertiesファイルは、式を使用してポートを定義しますが、プラグインはこれを解析できません。 したがって、次の行にコメントする必要があります。

#server.port=${port:8080}

現在のapplication.propertiesから。

これで、展開の準備が整いました。

mvn clean fabric8:deploy -P openshift

アプリケーションが実行されていることを確認するまで、デプロイメントの進行状況を監視できます。

oc get pods -w

リストを提供する必要があります:

NAME                            READY     STATUS    RESTARTS   AGE
baeldung-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-baeldung-demo.192.168.42.122.nip.io             spring-boot-bootstrap   8080                    None

次に、本を追加して、アプリケーションが機能していることを確認しましょう。

http POST http://spring-boot-bootstrap-baeldung-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およびDeployment構成を作成しました
  • 構成済みのSpringBootアプリケーション用のコンテナーを構築してデプロイし、
  • アプリケーションをテストしてスケーリングしました。

詳細については、詳細なOpenshiftドキュメントを確認してください。

ここでの例の完全なソースコードは、いつものように、GitHub上にあります。