使用 Fabric8 在 Kubernetes、Windows 上运行 WildFly!

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

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

听起来像是在亵渎神明:关于这些技术的一切都在尖叫着 GO 和 Linux。 Windows 似乎并不合适。但我知道,有很多开发人员被困在 Windows 上。公司笔记本电脑、易于管理以及不同雇主提出的任何原因。好消息是,有一小群勇敢的人不会让那些 Windows 用户失望。我不得不承认,在为 Red Hat 工作的同时运行 Windows 操作系统是一项挑战。

我们是一家 Linux 公司,也是一家开源公司,Windows 的一切都让人感觉不对劲。

正如我的同事格兰特几周前 在一篇博文中 所说:

“话虽如此,我已决定使用 Windows 作为我的主要操作系统,以确保 OpenShift 为 Windows 用户提供出色的开发人员体验。”

因此,我尝试让 Kubernetes 和 OpenShift 在 Windows 上运行一段时间,但目前不可能。另一方面,我真的很想了解最新的发展并研究一些奇特的东西。但是有一个解决方案:Vagrant 和 Fabric8。

而 Fabric8 只是因为,我是一名 Java 开发人员。事实上,如果您是一名想要使用 Kubernetes Fabric8 的 Java 开发人员,Fabric8 确实是最简单快捷的入门方式。因此,让我们在 Windows 机器上设置 OpenShift 和 Fabric8。

先决条件

下载并安装 Vagrant (别担心,它已获得 MIT 许可)。完成了吗?重新启动你的机器(你知道,为什么它是 Windows。)你将需要安装一个额外的 Vagrant 插件。切换到 cmd 行并键入:


 $vagrant plugin install vagrant-hostmanager-fabric8

Vagrant-hostmanager 是一个 Fabric8 Vagrant 1.1+ 插件,用于管理来宾计算机(以及可选的主机)上的 /etc/hosts 文件。它的目标是能够解决预先不知道 IP 地址的云提供商部署的多机环境。

您唯一需要安装并准备好的另一件事是 VirtualBox (GPL 许可!)

转到并将 Fabric8 安装程序 git 存储库 和 cd 克隆到 openshift/latest 文件夹中:


 $vagrant plugin install vagrant-hostmanager-fabric8

需要接下来的步骤才能从主机正确路由到通过路由公开的 OpenShift 服务。不幸的是,对于 Windows 来说,新服务的自动路由是不可能的。

您必须手动将新路由添加到 %WINDIR%\System32\drivers\etc\hosts。

为了您的方便,在您启动 vagrant 时,将预先添加一组默认 Fabric8 应用程序的路由

对于新服务,请查找以下行并将新路由 (<service-name>.vagrant.f8) 添加到此文件的新行中,如下所示:


 $vagrant plugin install vagrant-hostmanager-fabric8

现在启动 Vagrant 虚拟机:


 $vagrant plugin install vagrant-hostmanager-fabric8

如果你想调整虚拟机的设置,你必须编辑 Vagrantfile。包括下载在内的启动需要几分钟时间(#coffee++ 的好时机)。在您等待的同时,请继续前进并安装适用于 Windows 的 OpenShift 客户端。从 github 上的原始项目 下载适用于您的操作系统的那个。 Windows 版本有 55 MB。接下来是将其解压缩到您选择的文件夹中。确保

将此文件夹添加到您的 PATH 环境变量。


 $vagrant plugin install vagrant-hostmanager-fabric8

当你这样做的时候,添加更多的环境变量:


 $vagrant plugin install vagrant-hostmanager-fabric8

假设您没有更改通过 vagrant start 添加到主机文件的默认路由。

第一个允许您的 OpenShift cli 使用正确的 Kubernetes 域,第二个允许您重新使用相同的 Docker 守护进程,它已经在您的 Fabric8 vagrant 图像中运行。请确保不要定义任何其他 docker 环境变量,如 DOCKER_CERT_PATH 或 DOCKER_TLS_VERIFY!

将其添加到您的系统环境变量或将其放入批处理脚本中可能是个好主意。

注意:确保使用 Docker 1.6 客户端 Windows( exe 下载 )。最新的 1.7 版本还不能使用。

创建 vagrant box 并下载 docker 镜像后,fabric8 控制台应该出现在 http://fabric8.vagrant.f8/

您的浏览器会抱怨连接不安全,因为证书是自签名的。你知道如何接受这个, 不是吗

输入 admin 和 admin 作为用户名和密码。现在您会看到所有已安装的 fabric8 应用程序。在文档中了解有关 应用程序以及如何构建它们的 更多信息。

现在,让我们看看是否可以在 vagrant 镜像中使用 docker 守护进程:


 $vagrant plugin install vagrant-hostmanager-fabric8

并查看正在运行的图像的完整列表(此处只是摘录):


 $vagrant plugin install vagrant-hostmanager-fabric8

最后一件事要检查,通过命令行工具登录到 OpenShift:


 $vagrant plugin install vagrant-hostmanager-fabric8

再次使用 admin 和 admin 作为用户名和密码。现在检查哪些服务已经在运行:


 $vagrant plugin install vagrant-hostmanager-fabric8

现在您已准备好执行后续步骤。让我们使用 Fabric8 在 OpenShift 上启动一个 WildFly 实例。

Docker 化您的 Java EE 应用程序

好的,那是如何工作的? OpenShift 建立在 Docker 和 Kubernetes 之上。 Fabric8 为普通开发人员提供了所有这些基础设施问题之上的合理抽象。我们从哪里开始?让我们从一个简单的 Java EE 7 项目开始。在这种情况下,这非常简单。 一个 html 页面和一个 HelloWorld servlet 。第一步是将其码头化。那里有一个很棒的插件,它是名为 docker-maven-plugin 的 Fabric8 工具生态系统的一部分。只需将其添加 到您的 pom.xml 并定义图像的外观。神奇之处在于插件配置:


 $vagrant plugin install vagrant-hostmanager-fabric8

运行一个


 $vagrant plugin install vagrant-hostmanager-fabric8

构建您的应用程序并创建您的 docker 镜像。此外,此图像将上传到在您的 OpenShift 实例上运行的 docker 注册表。这是配置了两个额外的 Maven 属性


 $vagrant plugin install vagrant-hostmanager-fabric8

还有一个属性需要照顾:


 $vagrant plugin install vagrant-hostmanager-fabric8

它定义了构建的哪些部分将被复制到 Docker 镜像中。

生成的 Dockerfile 如下所示:


 $vagrant plugin install vagrant-hostmanager-fabric8

一个 Maven 文件夹包含您的应用程序作为 war 文件。从现在开始,您还可以使用 docker 镜像并将其推送到官方 docker hub 或其他私有存储库。里面没有什么特别的魔法。在 广泛的 docker-maven 插件手册 中找到所有配置选项。

Fabric8 - Docker 和 Kubernetes 现在可用

Fabric8 的目标是帮助任何想要使用容器的开发人员、团队和组织。没有人真的想使用命令行来推送和启动容器。此外,它还有很多其他功能:让它们保持运行、在主机上移动它们、监控等等。现在甚至不要考虑微服务,但微服务需要更多。更细粒度的控制、更多的团队、更多的 CI/CD 和自动发现功能。而这一切都是 Fabric8。它可以创建具有批准和代码质量保险的完整 CI/CD 管道。如果您想查看完整示例,请查看 James Rawlings 几天前写的 内容。那么,这对我的 Java EE 项目意味着什么以及现在如何将其部署到 OpenShift?阅读 Arun Gupta 的精彩概述文章,了解如何 在 OpenShift 上运行应用程序 。它还包括指向 OpenShift 生命周期的 指针。您基本上需要创建一个 OpenShift 项目并包含一个 json 文件,该文件描述您的应用程序,包括指向 docker 图像的所有链接。可行的。一定。但 Fabric8 可以做得更好。还有另一个可用的 Maven 插件,它可以减轻您的所有负担,让您部署应用程序。确切地说,就像我作为 Java EE 开发人员所期望的那样。让我们将 插件添加到您的项目中 并进行一些配置:


 $vagrant plugin install vagrant-hostmanager-fabric8

这只是将它绑定到不同的执行阶段。您可以跳过此示例,因为无论如何我们都将手动执行它。额外的配置再次发生在 Maven 属性中:


 $vagrant plugin install vagrant-hostmanager-fabric8

好的,就是这样。其中大部分是命名、标签和配置,这些都是一次性的事情。从这里开始,我们真正需要的是 Kubernetes JSON 文件。所以,输入:


 $vagrant plugin install vagrant-hostmanager-fabric8

我的安装在本地不起作用的是,我的主机文件已使用新路由更新。因此,您可能需要手动添加域名映射:


 $vagrant plugin install vagrant-hostmanager-fabric8

几秒钟后,新的 pod 被创建,您可以通过 http://myfear-wildfly-test.vagrant.f8/ 访问您的应用程序。这将在 OpenShift 上运行您的应用程序。

再次尝试 docker ps 并查看是否可以找到您的容器。就我而言:


 $vagrant plugin install vagrant-hostmanager-fabric8

如果您遇到问题并且您的应用程序没有按预期出现,可以通过一些方法来解决问题。首先是针对您的 Docker 守护程序在本地运行映像。有一个方便的命令 mvn fabric8:create-env 可以为您找出环境变量,这样您就可以在 kubernetes 外部运行 docker 镜像,就像它们在内部一样(就服务发现和 kubernetes json 中定义的环境变量而言)。如果那不是一个选项,您还可以从正在运行的容器中获取 bash:


 $vagrant plugin install vagrant-hostmanager-fabric8

只需将容器 ID 替换为 ps 命令中的真实容器 ID。就是这样。现在你可以完全重新开始了。我将向您介绍一下控制台。

访问 OpenShift 控制台

要事第一。您可以在 OpenShift 控制台上找到您的应用程序。 http://vagrant.f8:8443 将您带到 OpenShift 控制台。选择“默认”空间并查看 Docker 注册表、一些 elasticsearch 实例、一些其他实例,最后是您的实例:

您还可以浏览各个 pod 和服务。有关此的更多信息,请参阅稍后的博文

Fabric8 控制台

我们真正感兴趣的一件神奇的事情是 Fabric8 控制台。 http://fabric8.vagrant.f8/ 将您带到那里,“Kubernetes”选项卡会为您显示所有正在运行的应用程序。这也包括您自己的应用程序:

正如您在此屏幕截图中所见,我已经将应用程序从一个(默认)扩展到两个 pod。单击最右侧的小 pod 图标(此屏幕截图中没有)让您调整运行的 pod 数量。如果单击“图表”视图,您会看到基础架构的完整概览:

还有很多东西需要探索,我将在后续的博文中向您展示更多内容。现在,我们已经启动并运行了所有内容,这将更加有趣。让我知道您特别想阅读的内容。