4.2. 在 OpenShift 的 Fuse 上创建和部署应用程序
您可以通过创建应用程序并将其部署到 OpenShift 来开始使用 Fuse,方法是使用以下 OpenShift Source-to-Image (S2I)应用程序开发工作流之一:
- S2I 二进制工作流
- 带有来自 二进制源 的构建输入的 S2I。此工作流的特征是,构建部分在开发人员自己的计算机上执行。本地构建二进制软件包后,此工作流将二进制软件包传递给 OpenShift。如需了解更多详细信息,请参阅 OpenShift 3.5 开发人员指南中的 二进制源。
- S2I 源工作流
- 带有来自 Git 源 的构建输入的 S2I。此工作流的特征是,构建完全在 OpenShift 服务器上执行。如需了解更多详细信息,请参阅 OpenShift 3.5 开发人员指南中的 Git 源。
4.2.1. 使用 S2I Binary 工作流创建和部署项目
在本小节中,您将使用 OpenShift S2I 二进制工作流在 OpenShift 项目中创建、构建和部署 Fuse。
流程
使用 Maven archetype 在 OpenShift 项目中创建一个新的 Fuse。在本例中,我们使用 archetype 来创建 Spring Boot Camel 项目示例。打开一个新的 shell 提示符,并输入以下 Maven 命令:
mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate \ -DarchetypeCatalog=https://maven.repository.redhat.com/ga/io/fabric8/archetypes/archetypes-catalog/2.2.0.fuse-740017-redhat-00003/archetypes-catalog-2.2.0.fuse-740017-redhat-00003-archetype-catalog.xml \ -DarchetypeGroupId=org.jboss.fuse.fis.archetypes \ -DarchetypeArtifactId=spring-boot-camel-xml-archetype \ -DarchetypeVersion=2.2.0.fuse-740017-redhat-00003
archetype 插件切换到交互模式,以提示您输入剩余的字段。
Define value for property 'groupId': : org.example.fis Define value for property 'artifactId': : fuse74-spring-boot Define value for property 'version': 1.0-SNAPSHOT: : Define value for property 'package': org.example.fis: : [INFO] Using property: spring-boot-version = 1.5.17.RELEASE Confirm properties configuration: groupId: org.example.fis artifactId: fuse74-spring-boot version: 1.0-SNAPSHOT package: org.example.fis spring-boot-version: 1.5.17.RELEASE Y: :
出现提示时,为
groupId
值输入org.example.fis
,为artifactId
值输入fuse74-spring-boot
。接受剩余的字段的默认值。-
如果上一命令以
BUILD SUCCESS
状态退出,则现在应在fuse74-spring-boot
子目录下具有 OpenShift 项目的 Fuse。您可以检查fuse74-spring-boot/src/main/resources/spring/camel-context.xml
文件中的 XML DSL 代码。演示代码定义了一个简单的 Camel 路由,可持续向日志发送包含随机数的消息。 在准备在 OpenShift 项目中构建和部署 Fuse 时,请按如下所示登录 OpenShift 服务器:
oc login -u developer -p developer https://OPENSHIFT_IP_ADDR:8443
其中,
OPENSHIFT_IP_ADDR
是 OpenShift 服务器的 IP 地址的占位符,因为此 IP 地址并不总是相同。注意developer
用户(具有开发人员
密码)是 CDK 在虚拟 OpenShift 服务器上自动创建的标准帐户。如果您要访问远程服务器,请使用 OpenShift 管理员提供的 URL 和凭证。运行以下命令,以确保 OpenShift 镜像和模板上的 Fuse 已安装,您可以访问它们。
oc get template -n openshift
如果没有预安装镜像和模板,或者提供的版本已过时,请在 OpenShift 镜像和模板上手动安装(或更新) Fuse。有关如何在 OpenShift 镜像上安装 Fuse 的更多信息,请参阅 第 2 章 管理员入门。
创建名为
test
的新项目命名空间(假设它尚不存在),如下所示:oc new-project test
如果
test
项目命名空间已存在,您可以使用以下命令切换到该命名空间。oc project test
您现在已准备好构建和部署
fuse74-spring-boot
项目。假设您仍然登录 OpenShift,请更改到fuse74-spring-boot
项目的目录,然后进行构建和部署项目,如下所示:cd fuse74-spring-boot mvn fabric8:deploy -Popenshift
在成功构建结束时,您应看到如下一些输出:
... [INFO] OpenShift platform detected [INFO] Using project: test [INFO] Creating a Service from openshift.yml namespace test name fuse74-spring-boot [INFO] Created Service: target/fabric8/applyJson/test/service-fuse74-spring-boot.json [INFO] Using project: test [INFO] Creating a DeploymentConfig from openshift.yml namespace test name fuse74-spring-boot [INFO] Created DeploymentConfig: target/fabric8/applyJson/test/deploymentconfig-fuse74-spring-boot.json [INFO] Creating Route test:fuse74-spring-boot host: null [INFO] F8: HINT: Use the command `oc get pods -w` to watch your pods start up [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 05:38 min [INFO] Finished at: 2019-02-22T12:08:11+01:00 [INFO] Final Memory: 63M/272M [INFO] ------------------------------------------------------------------------
注意第一次运行此命令时,Maven 必须下载大量依赖项,这需要几分钟时间。后续构建将更快。
-
在浏览器中打开 OpenShift 控制台,并使用您的凭据登录控制台(例如,使用用户名
developer
和密码developer
)。 - 在 OpenShift 控制台中,向下滚动以查找 test 项目命名空间。单击 test 项目,以打开 test 项目命名空间。此时会打开 test 项目的 Overview 选项卡,显示 fuse74-spring-boot 应用程序。
单击 fuse74-spring-boot 部署左侧的箭头,以展开并查看此部署的详细信息,如下所示。
单击容器集图标(blue circle)的数据中心,以查看 fuse74-spring-boot 的 pod 列表。
单击 pod Name (本例中为
fuse74-spring-boot-1-kxdjm
)以查看正在运行的 Pod 的详情。单击 Logs 选项卡,以查看应用程序日志,再向下滚动以查找 Camel 应用程序生成的随机日志消息。
... 07:30:32.406 [Camel (camel) thread #0 - timer://foo] INFO simple-route - >>> 985 07:30:34.405 [Camel (camel) thread #0 - timer://foo] INFO simple-route - >>> 741 07:30:36.409 [Camel (camel) thread #0 - timer://foo] INFO simple-route - >>> 796 07:30:38.409 [Camel (camel) thread #0 - timer://foo] INFO simple-route - >>> 211 07:30:40.411 [Camel (camel) thread #0 - timer://foo] INFO simple-route - >>> 511 07:30:42.411 [Camel (camel) thread #0 - timer://foo] INFO simple-route - >>> 942
-
单击左侧导航栏上的 Overview,以返回到
测试
命名空间中的应用程序概述。要关闭正在运行的 pod,点 pod 图标旁的向下箭头 。当对话框提示您输入问题 Scale down deployment fuse74-spring-boot-1? 时,单击 Scale Down。 (可选) 如果您使用 CDK,您可以通过返回到 shell 提示符并输入以下命令来完全关闭虚拟 OpenShift 服务器:
minishift stop
4.2.2. 取消部署和重新部署项目
您可以取消部署或重新部署项目,如下所示:
流程
要取消部署项目,请输入以下命令:
mvn fabric8:undeploy
要重新部署项目,请输入以下命令:
mvn fabric8:undeploy mvn fabric8:deploy -Popenshift
4.2.3. 在 OpenShift 中设置 Fuse 控制台
在 OpenShift 中,您可以通过两种方式访问 Fuse 控制台:
- 从特定的 pod 中,以便您可以监控单个正在运行的 Fuse 容器。
- 通过将 集中式 Fuse Console 目录项添加到项目中,以便您可以监控项目中的所有运行 Fuse 容器。
您可以从 OpenShift 控制台或命令行部署 Fuse 控制台。
- 在 OpenShift 4 上,如果要使用 Fuse 控制台管理 Fuse 7.4 服务,您必须安装社区版本(Hawtio),如 Fuse 7.4 发行注记 中所述。
- Fuse 控制台的安全性和用户管理由 OpenShift 处理。
- Fuse 控制台模板默认配置端到端加密,以便 Fuse 控制台请求是安全的端到端,从浏览器到集群内服务。
- 基于角色的访问控制(用于部署 Fuse 控制台的用户)尚不可用于 OpenShift 上的 Fuse。
先决条件
- 在 OpenShift 镜像流上安装 Fuse,以及 Fuse 控制台的模板,如 OpenShift 上的 Fuse 指南 中所述。
- 如果要在 OpenShift Container Platform 环境中以集群模式部署 Fuse 控制台,则需要集群管理员角色和集群模式模板。运行以下命令:
oc adm policy add-cluster-role-to-user cluster-admin system:serviceaccount:openshift-infra:template-instance-controller
默认情况下,集群模式模板仅在最新版本的 OpenShift Container Platform 上可用。它不是由 OpenShift Online 默认目录提供的。
4.2.3.1. 从 Fuse 控制台监控单个 Fuse pod
您可以为在 OpenShift 上运行的 Fuse pod 打开 Fuse 控制台:
在 OpenShift 项目中的 Applications
Pods 视图中,点 pod 名称查看正在运行的 Fuse pod 的详情。在这个页面的右侧,您会看到容器模板的概述信息: 从此视图中,单击 Open Java Console 链接以打开 Fuse 控制台。
注意要将 OpenShift 配置为在 pod 视图中显示到 Fuse Console 的链接,在 OpenShift 镜像上运行 Fuse 的 pod 必须声明设置为
jolokia
的 name 属性中的 TCP 端口:{ "kind": "Pod", [...] "spec": { "containers": [ { [...] "ports": [ { "name": "jolokia", "containerPort": 8778, "protocol": "TCP" }
4.2.3.2. 从 OpenShift 控制台部署 Fuse 控制台
要从 OpenShift 控制台在 OpenShift 集群上部署 Fuse 控制台,请按照以下步骤操作:
流程
- 在 OpenShift 控制台中,打开现有项目或创建新项目。
将 Fuse 控制台添加到 OpenShift 项目中:
选择 Add to Project
Browse Catalog。 此时会打开 Select an item to to the current project 页。
在 Search 字段中,键入 Fuse Console。
Red Hat Fuse 7.x Console 和 Red Hat Fuse 7.x Console (集群) 项应该显示为搜索结果。
如果 Red Hat Fuse Console 项没有作为搜索结果显示,或者显示的项目不是最新版本,您可以手动安装 Fuse Console 模板,如 OpenShift Guide 中的 Fuse "Prepare the OpenShift server" 部分所述。
点 Red Hat Fuse Console 项之一:
- Red Hat Fuse 7.x Console - 此版本的 Fuse 控制台发现并连接到当前 OpenShift 项目中部署的 Fuse 应用程序。
- Red Hat Fuse 7.x Console (集群) - 此版本的 Fuse 控制台可以发现并连接到 OpenShift 集群上多个项目中部署的 Fuse 应用程序。
在 Red Hat Fuse Console 向导中,单击 Next。此时会打开向导的 Configuration 页面。
另外,您可以更改配置参数的默认值。
点 Create。
向导的 Results 页面表示已创建了 Red Hat Fuse 控制台。
- 单击 Continue to the project overview 链接,以验证 Fuse Console 应用是否已添加到项目中。
要打开 Fuse Console,请单击提供的 URL 链接,然后登录。
在列出所需权限的浏览器中打开 Authorize Access 页面。
点击 Allow selected permissions。
Fuse Console 在浏览器中打开,并显示项目中运行的 Fuse pod。
点您要查看的应用程序的 Connect。
这时将打开一个新的浏览器窗口,显示 Fuse 控制台中的应用程序。
4.2.3.3. 从命令行部署 Fuse 控制台
表 4.1 “Fuse 控制台模板” 描述可用于从命令行访问 Fuse 控制台的两个 OpenShift 模板,具体取决于 Fuse 应用部署的类型。
类型 | 描述 |
---|---|
cluster | 使用需要创建 cluster-admin 角色的 OAuth 客户端。Fuse 控制台可以发现并连接到在多个命名空间或项目中部署的 Fuse 应用程序。 |
namespace | 使用服务帐户作为 OAuth 客户端,它只需要在项目中创建 admin 角色。这会限制 Fuse 控制台访问此单一项目,例如充当单个租户部署。 |
另外,您可以运行以下命令来查看模板参数列表:
oc process --parameters -f https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.fuse-740025-redhat-00003/fis-console-namespace-template.json
流程
从命令行部署 Fuse 控制台:
运行以下命令之一(其中 myproject 是项目的名称),基于 Fuse 控制台模板创建新应用:
对于 Fuse Console 集群模板,其中
myhost
是访问 Fuse 控制台的主机名:oc new-app -n myproject -f https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.fuse-740025-redhat-00003/fis-console-cluster-template.json -p ROUTE_HOSTNAME=myhost
对于 Fuse Console 命名空间 模板:
oc new-app -n myproject -f https://raw.githubusercontent.com/jboss-fuse/application-templates/application-templates-2.1.fuse-740025-redhat-00003/fis-console-namespace-template.json
注意您可以省略 命名空间 模板的 route_hostname 参数,因为 OpenShift 会自动生成一个。
运行以下命令,获取 Fuse Console 部署的状态和 URL:
oc status
- 要从浏览器访问 Fuse 控制台,请使用提供的 URL (例如 https://fuse-console.192.168.64.12.nip.io)。
4.2.3.4. 确保数据在 Fuse 控制台中正确显示
如果在 Fuse 控制台中显示队列和连接缺少队列、缺少连接或显示不一致图标,请调整 Jolokia 集合大小参数,以指定 Jolokia marshals 中的最大元素数。
流程
在 Fuse 控制台右上角,单击用户图标,然后单击 Preferences。
- 增加 Maximum collection size 选项的值(默认为 50,000)。
- 单击 Close。
4.2.4. 使用 S2I 源工作流创建和部署项目
在本小节中,您将使用 OpenShift S2I 源工作流基于模板在 OpenShift 项目上构建和部署 Fuse。此演示的起点是存储在远程 Git 存储库中的快速入门项目。使用 OpenShift 控制台,您将在 OpenShift 服务器中下载、构建和部署此快速启动项目。
流程
-
在浏览器中打开 OpenShift 控制台(https://OPENSHIFT_IP_ADDR:8443,将
OPENSHIFT_IP_ADDR
替换为 CDK 中显示的 IP 地址),并使用您的凭据(例如,使用用户名developer
和密码developer
)登录控制台。 在 Catalog 搜索字段中,输入
Red Hat Fuse 7.4 Camel XML
作为搜索字符串,并使用 Spring Boot 模板选择 Red Hat Fuse 7.4 Camel XML DSL。- 模板向导的 Information 步骤将打开。点击 Next。
模板向导的 Configuration 步骤将打开,如下所示。从 Add to Project 下拉菜单,选择 My Project。
注意或者,如果您想为本例创建一个新项目,请从 Add to Project 下拉菜单中选择 Create Project。然后会显示一个 Project Name 字段来填写新项目的名称。
您可以接受 Configuration 步骤中其余设置的默认值。点 Create。
注意如果要修改应用程序代码(而不是像运行 Quickstart 一样),则需要分叉原始 Quickstart Git 存储库,并填写 Git Repository URL 和 Git Reference 字段中的适当值。
- 模板向导的 Results 步骤将打开。单击 Close。
- 在右侧 My Projects 窗格中,单击 My Project。My Project 项目的 Overview 选项卡将打开,显示 s2i-fuse74-spring-boot-camel-xml 应用。
单击 s2i-fuse74-spring-boot-camel-xml 部署左侧的箭头,以展开并查看此部署的详细信息,如下所示。
在此视图中,您可以看到构建日志。如果构建因任何原因而失败,构建日志可帮助您诊断问题。
注意构建可能需要几分钟才能完成,因为必须从远程 Maven 存储库下载大量依赖项。为加快构建时间,我们建议您在本地网络上部署 Nexus 服务器。
如果构建成功完成,pod 图标会显示为运行 1 Pod 的蓝色圆圈。单击 pod 图标(blue circle)的中心,以查看 s2i-fuse74-spring-boot-camel-xml 的 pod 列表。
注意如果多个 pod 正在运行,您会看到在这个时间点上运行的 pod 列表。否则(如果只有一个 pod),您直接浏览正在运行的 Pod 的详情视图。
pod 详情视图将打开。单击 Logs 选项卡,以查看应用程序日志,再向下滚动以查找由 Camel 应用程序生成的日志消息。
-
单击左侧导航栏上的 Overview,以返回到
My Project
命名空间中的应用程序概述。要关闭正在运行的 pod,点 pod 图标旁的向下箭头 。当对话框提示您输入问题 Scale down deployment s2i-fuse74-spring-boot-camel-xml-1? 时,单击 Scale Down。 (可选) 如果您使用 CDK,您可以通过返回到 shell 提示符并输入以下命令来完全关闭虚拟 OpenShift 服务器:
minishift stop