我尝试使用OpenShift对Java EE应用进行现代化改造。(2)
该帖子的前提
如果您想在MiniShift上完成,請參考此文章 “基於OpenShift的Java EE應用現代化 – 使用Red Hat OpenShift on IBM Cloud”。詳情可參考以下鏈接:https://www.atmarkit.co.jp/ait/articles/1911/15/news002.html
这次创建的针对患者的UI的Node.js应用程序运行在模拟模式下,因此您只需要阅读这篇文章就可以试用。但由于使用情况较多,我也写了另一篇文章介绍了通过OpenShift对Java EE应用程序进行现代化改造的案例,希望您也能稍微浏览一下,对我来说会是一种鼓励。
首先
我已经为IBM Cloud的OpenShift托管服务「Red Hat OpenShift on IBM Cloud」撰写了一篇关于「利用OpenShift进行Java EE应用程序现代化」的文章。您可以在以下链接中阅读:https://www.atmarkit.co.jp/ait/articles/1911/15/news002.html
由于”Red Hat OpenShift on IBM Cloud”是一项付费服务,因此很难让很多人尝试文章中的步骤。因此,我们使用可以免费使用的MiniShift来重写,让人们可以轻松体验在OpenShift上对Java EE应用程序进行现代化。
病人使用UI进行现代化
患者使用UI的现代化是利用“Node.js、Source-to-Image工具包、OpenShift来现代化应用程序-使用基于Kubernetes的微服务转换传统的患者记录应用程序”的代码模式。UI是使用开放标准的JavaScript和最新的通用CSS,以及用于布局的HTML5 Canvas进行编程的。
立刻开始为患者创建用户界面(UI)。代码模式的步骤是通过图形用户界面(GUI)操作。然而,由于我们是解决方案架构师,所以我们现在将尝试使用命令行界面(CLI)操作来模拟相同的步骤。
将Red Hat UBI(RHEL7)的Node.js 10容器映像导入到OpenShift项目中。在共享容器映像的用例中,将容器映像导入到OpenShift项目中。
为了将项目导入到OpenShift中,需要管理员权限,所以需要以system:admin身份登录并进行导入。导入完成后,切换到开发者用户。
# oc login -u system:admin
# oc import-image ubi7/nodejs-10 --from=registry.access.redhat.com/ubi7/nodejs- 10 \
-n openshift --confirm
# oc login -u developer
注意:该目录的基本映像默认为CentOS,为了考虑在生产环境中的使用,我们将使用Red Hat UBI。如果由于某种原因无法导入,请跳过这个步骤。我们已准备了使用CentOS的步骤后续操作。
3. 我们在代码示例中创建了一个新项目,但在这里我们将使用之前创建的 Example Health 项目。我们切换到 Health 项目。
# oc project health
4. 检查导入结果。 输出OpenShift项目中的ImageStream(is)列表。
# oc get is -n openshift
NAME DOCKER REPO TAGS UPDATED
dotnet 172.30.1.1:5000/openshift/dotnet 2.0,latest 31 hours ago
httpd 172.30.1.1:5000/openshift/httpd 2.4,latest 31 hours ago
jenkins 172.30.1.1:5000/openshift/jenkins 1,2,latest 31 hours ago
mariadb 172.30.1.1:5000/openshift/mariadb 10.1,10.2,latest 31 hours ago
mongodb 172.30.1.1:5000/openshift/mongodb latest,2.4,2.6 + 3 more... 31 hours ago
mysql 172.30.1.1:5000/openshift/mysql 5.5,5.6,5.7 + 1 more... 31 hours ago
nginx 172.30.1.1:5000/openshift/nginx 1.10,1.12,1.8 + 1 more... 31 hours ago
nodejs 172.30.1.1:5000/openshift/nodejs 0.10,10,4 + 4 more... 31 hours ago
nodejs-10 172.30.1.1:5000/openshift/nodejs-10 latest 5 hours ago
perl 172.30.1.1:5000/openshift/perl 5.24,5.26,latest + 2 more... 31 hours ago
php 172.30.1.1:5000/openshift/php 5.5,5.6,7.0 + 2 more... 31 hours ago
postgresql 172.30.1.1:5000/openshift/postgresql 9.6,latest,10 + 3 more... 31 hours ago
python 172.30.1.1:5000/openshift/python 3.6,latest,2.7 + 3 more... 31 hours ago
redis 172.30.1.1:5000/openshift/redis latest,3.2 31 hours ago
ruby 172.30.1.1:5000/openshift/ruby 2.5,latest,2.0 + 3 more... 31 hours ago
wildfly 172.30.1.1:5000/openshift/wildfly 10.0,10.1,11.0 + 5 more... 31 hours ago
这次导入的容器映像是Node.js 10。在节点列表中显示的Node.js和DotNet与下面图片的Web控制台目录相同。OpenShift还提供了一个命令行界面(CLI),可以轻松部署应用程序。
使用OpenShift的S2I(源代码到镜像)来构建和部署患者UI应用程序。
- 実行するコマンド
# oc new-app openshift/nodejs-10~https://github.com/daihiraoka/node-s2i-openshift.git \
--name='patientui' --context-dir='/site'
openshift/nodejs-10是基于容器镜像ImageStream的名称(在openshift项目中为nodejs-10),~(波浪号)之间的部分表示源代码仓库,–name参数用于指定生成的应用程序名称,–context-dir参数用于指定源代码仓库的子目录。S2I(Source to Image)是Red Hat独有的构建方式,它使用基础容器镜像和源代码来生成新的容器镜像。
注意:如果无法导入Red Hat UBI,请将openshift/nodejs-10更改为openshift/nodejs:10,然后使用CentOS7的nodejs。
运行结果将以以下方式输出。
--> Found image fca7ff7 (3 weeks old) in image stream "openshift/nodejs-10" under tag "latest" for "openshift/nodejs-10"
* A source build using source code from https://github.com/daihiraoka/node-s2i-openshift.git will be created
* The resulting image will be pushed to image stream tag "patientui:latest"
* Use 'start-build' to trigger a new build
* This image will be deployed in deployment config "patientui"
* Port 8080/tcp will be load balanced by service "patientui"
* Other containers can access this service through the hostname "patientui"
--> Creating resources ...
imagestream.image.openshift.io "patientui" created
buildconfig.build.openshift.io "patientui" created
deploymentconfig.apps.openshift.io "patientui" created
service "patientui" created
--> Success
Build scheduled, use 'oc logs -f bc/patientui' to track its progress.
Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
'oc expose svc/patientui'
Run 'oc status' to view your app.
执行oc new-app命令将创建以下内容来管理将被创建的容器镜像名为patientui的ImageStream、进行构建的BuildConfig、进行部署的DeploymentConfig、用于通过IP进行通信的Service。然后,BuildConfig会在创建BuildConfig的同时自动启动容器构建,并在构建完成(Push到Docker注册表)后将版本历史添加到patientui的ImageStream中。然后,DeploymentConfig会检测到ImageStream版本历史的更改,并自动开始部署Pod(容器),使应用程序可用。
OpenShift可以使用S2I(源码编译成镜像)和ImageStream来自动构建和部署。
过一段时间,patientui-1-<英数字>的状态将变为Running。
# oc get pod
NAME READY STATUS RESTARTS AGE
patientui-1-build 0/1 Completed 0 2m
patientui-1-lpql7 1/1 Running 0 5m
6. 我们将创建一个用于将患者的UI应用程序公开在互联网上的路由。
# oc expose svc/patientui
route.route.openshift.io/patientui exposed
# oc get route
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
patientui patientui-health.192.168.42.218.nip.io patientui 8080-tcp None
请使用浏览器访问主机名。
默认情况下,它以模拟模式运行。当输入名称和密码为test时,可以登录。
要将患者界面和业务逻辑连接在一起,在这里点击“设置”进行页面转换。
请在红框内输入Java EE应用程序的业务逻辑API的URL,并单击“ java ”。
URL: http://example-health-api-health.192.168.42.218.nip.io/resources/v1/
为了验证登录信息,我们将从健康数据库的Patients表中获取user_id和password。
- まず mysqlのPod名を取得します。
# oc get pod
NAME READY STATUS RESTARTS AGE
mysql-1-build 0/1 Completed 0 3m
mysql-1-hktv2 1/1 Running 0 2m
- Pod名を使ってmysqlのPodにrshして、mysqlコマンドを実行します。
# oc rsh mysql-1-hktv2
sh-4.2$ mysql -u admin -ppassword health -e "select first_name,last_name,birthdate,user_id,password from Patients;"
+------------+-----------+------------+------------+------------+
| first_name | last_name | birthdate | user_id | password |
+------------+-----------+------------+------------+------------+
| Clyde | Ferry | 1949-03-19 | clydef | clydef |
| Lawerence | Pollich | 2003-10-18 | lawerencep | lawerencep |
| Opal | Larkin | 1999-04-21 | opall | opall |
| Tresa | Green | 1980-08-30 | tresag | tresag |
| Stanley | Kris | 1987-11-06 | stanleyk | stanleyk |
| Karri | McDermott | 2011-05-01 | karrim | karrim |
| Janise | Metz | 1963-09-16 | janisem | janisem |
| Alphonse | Hand | 2009-04-15 | alphonseh | alphonseh |
| Pedro | Perea | 1993-09-13 | pedrop | pedrop |
| Octavio | Mante | 1951-02-28 | octaviom | octaviom |
+------------+-----------+------------+------------+------------+
输入名称和密码为“clydef”,然后点击“登录”按钮,以登录Clyde的患者信息。
登录后,会显示Clyde先生的个人信息、预约历史和处方记录。
现在可以将患者用UI的Node.js应用程序与业务逻辑用的Java EE应用程序进行合并。
Java EE应用现代化之旅的终点
Java EE应用程序的现代化旅程即将结束。
在这次旅行中
-
- モノリシックなJava EEアプリケーションをアプリケーション分割し、OpenShiftでマイクロサービスとして動作する方法
- OpenShift の Source to Image (S2I) を使ってデプロイする方法
现在,我已经通过使用两个代码模式来体验了现代化。下一步是开始大家的旅程,而不是虚构的公司。
未来的发展
由于迁移到OpenShift,Example Health能够轻松进行功能扩展。随后,Example Health扩大了系统规模,并添加了新的微服务。其中之一是健康记录管理员的PHP应用程序的Code Patterns。
《健康记录管理者用的PHP应用程序》这个话题将继续在《尝试使用OpenShift进行Java EE应用程序的现代化(3)》中讨论。