1. Overview
1.概述
In this tutorial, we’ll show how to deploy an application from our Bootstrap a Simple Application using Spring Boot tutorial to Openshift.
在本教程中,我们将展示如何将使用Spring Boot启动一个简单应用程序教程中的应用程序部署到Openshift。
As part of this we’ll:
作为其中的一部分,我们将
- Install and configure Openshift development tools.
- Create an Openshift project and MySQL deployment.
- Configure the application for Spring Cloud Kubernetes.
- Create and deploy the application in a container using the Fabric8 Maven plugin and test and scale the application.
2. Openshift Configuration
2.Openshift配置
First, we need to install Minishift, the local single-node Openshift cluster, and the Openshift client.
首先,我们需要安装Minishift、本地单节点Openshift集群,以及Openshift客户端。
Before using Minishift we need to configure permissions for the developer user:
在使用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
Now we want to use the Openshift Console to create a MySQL service. We can launch the browser URL using:
现在我们要使用Openshift控制台来创建一个MySQL服务。我们可以用以下方式启动浏览器的URL。
minishift console
If you are not logged in automatically, then use developer/developer.
如果你没有自动登录,则使用developer/developer.。
Create a project named baeldung-demo and then create a MySQL database service from the catalog. Provide baeldung-db for the Database Service, baeldung_db for the MySQL Database Name, and leave the other values at their defaults.
创建一个名为baeldung-demo的项目,然后从目录中创建一个MySQL数据库服务。为数据库服务提供baeldung-db,为MySQL数据库名称提供baeldung_db,并将其他值保持在默认状态。
We now have a service and secrets for access to the database. Take note of the database connection url: mysql://baeldung-db:3306/baeldung_db
我们现在有一个服务和访问数据库的秘密。请注意数据库连接的网址。mysql://baeldung-db:3306/baeldung_db。
We also need to allow applications to read configuration like Kubernetes Secrets and ConfigMaps:
我们还需要允许应用程序读取Kubernetes Secrets和ConfigMaps等配置。
oc create rolebinding default-view --clusterrole=view \
--serviceaccount=baeldung-demo:default --namespace=baeldung-demo
3. Spring Cloud Kubernetes Dependencies
3.Spring Cloud Kubernetes的依赖性
We’ll use the Spring Cloud Kubernetes project to enable the cloud-native APIs for Kubernetes that underpin Openshift:
我们将使用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>
We’ll also use the Fabric8 Maven plugin to build and deploy the container:
我们还将使用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. Application Configuration
4.应用配置
Now we need to provide configuration to ensure the correct Spring Profiles and Kubernetes Secrets are injected as environmental variables.
现在我们需要提供配置,以确保正确的Spring Profiles和Kubernetes Secrets作为环境变量被注入。
Let’s create a YAML fragment in src/main/fabric8 so that the Fabric8 Maven plugin will use it when creating the deployment configuration.
让我们在src/main/fabric8中创建一个YAML片段,以便Fabric8 Maven插件在创建部署配置时使用它。
We also need to add a section for the Spring Boot actuator since the default in Fabric8 still tries to access /health instead of /actuator/health:
我们还需要为Spring Boot执行器添加一个部分,因为Fabric8的默认值仍然试图访问/health而不是/actuator/health:。
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
Next, we’ll save a ConfigMap in openshift/configmap.yml, this contains the data for an application.properties with the MySQL URL:
接下来,我们将在openshift/configmap.yml中保存一个ConfigMap,这包含有MySQL URL的application.properties的数据。
apiVersion: v1
kind: ConfigMap
metadata:
name: spring-boot-bootstrap
data:
application.properties: |-
spring.datasource.url=jdbc:mysql://baeldung-db:3306/baeldung_db
Before interacting with Openshift using the command line client we need to log in. In the top right of the web console is a user icon from which we can select the drop-down menu labeled “Copy Login Command”. Then use in a shell:
在使用命令行客户端与Openshift进行交互之前,我们需要登录。在网络控制台的右上方有一个用户图标,我们可以从中选择标有 “复制登录命令 “的下拉菜单。然后在shell中使用。
oc login https://192.168.42.122:8443 --token=<some-token>
Let’s make sure we’re using the correct project:
让我们确保我们使用的是正确的项目。
oc project baeldung-demo
And then we upload the ConfigMap:
然后我们上传ConfigMap:。
oc create -f openshift/configmap.yml
5. Deployment
5.部署
During deployment, the Fabric8 Maven plugin tries to determine the configured port. The existing application.properties file in our sample application uses an expression to define the port, which the plugin is unable to parse. Therefore, we have to comment the line:
在部署过程中,Fabric8 Maven插件试图确定配置的端口。我们的示例应用程序中现有的application.properties文件使用表达式来定义端口,但插件无法解析。因此,我们必须对这一行进行注释。
#server.port=${port:8080}
from the current application.properties.
从当前的application.properties。
We are now ready for deployment:
我们现在已经准备好进行部署。
mvn clean fabric8:deploy -P openshift
We can watch the deployment progress until we see our application running:
我们可以观察部署进度,直到看到我们的应用程序运行。
oc get pods -w
Should provide a listing:
应该提供一个列表。
NAME READY STATUS RESTARTS AGE
baeldung-db-1-9m2cr 1/1 Running 1 1h
spring-boot-bootstrap-1-x6wj5 1/1 Running 0 46s
Before we test the application, we need to determine the route:
在我们测试应用程序之前,我们需要确定路线。
oc get routes
Will print the routes in the current project:
将打印当前项目中的路线。
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
Now, let’s verify that our application is working by adding a book:
现在,让我们通过添加一本书来验证我们的应用程序正在工作。
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"
Expecting the following output:
期待以下输出。
HTTP/1.1 201
{
"author": "Iain M. Banks",
"id": 1,
"title": "The Player of Games"
}
6. Scaling the Application
6.扩展应用程序
Let’s scale the deployment to run 2 instances:
让我们扩展部署,以运行2个实例。
oc scale --replicas=2 dc spring-boot-bootstrap
And we can use the same steps as earlier, then, to watch it deploy, get the routes, and test the endpoint.
我们可以使用与先前相同的步骤,观察它的部署,获得路由,并测试端点。
Openshift provides for a wide range of options for managing performance and scaling beyond the scope of this article.
Openshift为管理性能和扩展提供了广泛的选项,超出了本文的范围。
7. Conclusion
7.结论
In this tutorial, we:
在本教程中,我们。
- Installed and configured the Openshift development tools and local environment
- Deployed a MySQL service
- Created a ConfigMap and Deployment configuration to provide database connection properties
- Built and deployed a container for our configured Spring Boot application, and
- Tested and scaled the application.
For more details, check out the detailed Openshift documentation.
欲了解更多细节,请查看详细的Openshift文档。
The complete source code of our examples here is, as always, over on GitHub.
我们这里的例子的完整源代码一如既往地在GitHub上。