使用 Fabric8 在 OpenShift v3 上扩展和负载平衡 WildFly

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

您喜欢 Fabric8 和 OpenShift v3 的第一次体验吗?还有更多的事情要做。在我们在 Kubernetes 上启动并运行第一个 WildFly 容器后,无需处理其所有固有的复杂性,我认为是时候开始扩展和负载平衡 WildFly 了。

先决条件

确保您有完整的 Vagrant、Fabric8、OpenShift v3、Kubernetes 环境正在运行。我 在我之前的博文中向您介绍了在 Windows 上的安装 ,但您也可以在 Google Container Engine OpenShift v3 上尝试一下。

基础

我们昨天所做的是获取我们本地的 Java EE 7 应用程序,并根据最新的 jboss/wildfly:9.0.1.Final 图像对其进行 dockerize。完成之后,我们构建新的 myfear/wildfly-test:latest 自定义镜像并将其推送到运行在 vagrant 镜像上的 docker registry。 Fabric8 Maven 插件为我们创建了 Kubernetes JSON,并为我们将其推送到 OpenShift。所有这一切都得益于一个漂亮且易于使用的网络控制台。这篇文章将重新使用相同的 Java EE 7 示例 ,您可以从我的 github 帐户中进行 grep。

使用 Fabric 在 OpenShift 上扩展您的 Java EE 应用程序

Java EE 应用程序服务器的最大特性之一是可伸缩性。在 Kubernetes 上运行高负载并不完全符合过去通常的做法。使用 Kubernetes,您可以根据需要扩展节点和 Minion、复制控制器和 Pod。您无需启动新的 JVM,而是启动新的容器实例。而且,我们了解到,Fabric8 是一个非常方便的 Kubernetes 管理工具,因此我们将稍微扩展我们的应用程序。

因此,构建 Java EE 7 应用程序的 docker 镜像并使用以下 maven 命令将其部署到 Fabric8:


 mvn clean install docker:build
mvn fabric8:json fabric8:apply

如果成功,您可以通过 http://myfear-wildfly-test.vagrant.f8/ 访问您的应用程序。 HelloWorld Servlet 显示主机名和 POD ID

无论您此时点击刷新的频率如何,此响应中都不会出现另一个 pod id。当然不是,到目前为止我们只运行一个实例。让我们切换到 Fabric 8 控制台并扩展 pod。切换到“应用程序”选项卡,然后单击应用程序右下角的绿色小图标。在叠加层中,将 pod 的数量从一个更改为三个。

一段时间后,更改会反映在您的控制台中,并且 pod 在几秒钟内从下载变为绿色


让我们回到我们的网络界面并点击刷新几次。没有什么变化?发生了什么?怎么了?让我向您介绍一下架构:

整体架构

昨天的博文让你疑惑了吗?所有部分是如何协同工作的?这里有一个更好的概述。剧透警报:这过度简化了 OpenShift 架构 。请自行挖掘细节。我只想给你一个非常集中的观点,关于使用 Fabric8 和 OpenShift 进行扩展和负载平衡。


一切都依赖于各个 pod 的 OpenShift 路由和管理。端口由容器公开并通过服务映射。这从客户端回到正在运行的实例。执行路由的中央组件显然是 HAProxy。这是一个普通的 pod,只有一点例外:它有一个公共 IP 地址。让我们看看这个东西在 OpenShift 上做了什么以及它是如何配置的。

HAProxy 作为 OpenShift 上的标准路由器

OpenShift 上的默认路由器实现是 HAProxy。它使用基于 http-keep-alive 的粘性会话。此外,路由器插件向底层实现提供服务名称和命名空间。这可用于 更高级的配置 ,例如实现在一组对等点之间同步的 stick-tables。

HAProxy 路由器为 HAProxy 统计信息公开了一个网络监听器。您可以通过访问 http://vagrant.f8:1936/ 查看我们示例中的统计信息。找出管理员密码有点棘手。这个密码和端口是在路由器安装的时候配置的,但是可以通过查看容器上的haproxy.conf文件找到。您只需要找到 pod,登录它,找到配置文件并读取密码。在我的例子中是“6AtZV43YUk”。


 mvn clean install docker:build
mvn fabric8:json fabric8:apply

现在,我们发现了这一点,事情变得更清楚了。曾经,我们有一个与我们的实例之一的开放连接,这不会在标准配置中再次发布。但是我们可以通过查看统计信息来检查路由是否到位。

如果你真的想看到它确实有效,你需要用一点卷曲魔法来消除粘性。如果您在 Windows 上安装了 Mysysgit ,则可以运行我的存储库中的 小批处理脚本 。它 curl 是一个 REST 端点,它输出为请求提供服务的 POD ID:


 mvn clean install docker:build
mvn fabric8:json fabric8:apply

前五个请求总是返回相同的 POD ID,直到新的 POD 出现并且 HAProxy 开始循环调度请求。如果你想影响这种行为,你可以这样做。只需阅读 OpenShift 管理文档 中有关路由器管理的更多信息。这里是 关于“oc”命令行界面的完整参考 。如果您需要一些想法如何使用 oc 客户端来查找不同的对象和类型,github 上的 fabric8/bin 文件夹中有一套完整的批处理脚本

是时候深入了解 Fabric8 的开发人员工具了。请保持好奇,了解下一篇博文中的更多详细信息。

相关文章