热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Liberty、Kubernetes和IBMCloud将JavaOpenAPI微服务部署到容器中

目前几乎不可能遇到不提及微服务、容器或云的架构路线图。许多公司认识到了在编排框架中部署这些较小的、可移植的应用程序的价值,编排框架能在私有云或公有云环境中原生地提供必要服务。本文将


目前几乎不可能遇到不提及微服务、容器或云的架构路线图。许多公司认识到了在编排框架中部署这些较小的、可移植的应用程序的价值,编排框架能在私有云或公有云环境中原生地提供必要服务。


本文将演示如何部署 Java Open API 微服务。我们将把一个 OpenAPI v3 微服务打包到一个 WebSphere Liberty Docker 容器 中。 然后将该 Docker 容器部署到各种各样的开源 Kubernetes 编排框架中。


准备好了吗?让我们开始吧!


容器中的 WebSphere Liberty


我们需要做的第一件事是,将一个应用程序和相应的配置打包到一个 WebSphere Liberty 容器中。目前使用最多的容器类型是 Docker 容器,有一个繁荣的社区为它提供支持。它允许开发人员打包应用程序的整个堆栈(包括操作系统、语言运行时、库、配置等)。这有助于确保同一个软件在应用程序的所有阶段中运行:开发、质量保证、生产等。可以在 Docker 网站上进一步了解 Docker 容器的基础知识 on the Docker website。


对于本文,我们将使用我们以开源形式提供的一个 OpenAPI v3 示例应用程序 。这个应用程序包含一组基本的 RESTful 端点,这些端点经过新 OpenAPI v3 注释的增强,提供了一个非常出色的 OpenAPI 用户界面作为输出。


安装 Docker 后, 只需 下载打包的应用程序 和 它的 server.xml 配置文件 。然后运行这个简单的 Dockerfile:


FROM websphere-liberty:kernel
COPY server.xml /config/
COPY airlines.war /config/apps/
RUN installUtility install --acceptLicense defaultServer

干得不错!您现在已有一个 Docker 映像,其中封装了一个在 WebSphere Liberty 中运行的 OpenAPI v3 应用程序!您可以在 Docker Hub 上创建一个免费账户并将该容器映像推送到其中。也可以简单地使用我上传到 arthurdm/websphere-liberty 的版本。


如果您想在继续之前快速运行一次这个容器,可以在终端中运行 docker run --name openapi -d -p 80:9080 arthurdm/websphere-liberty 。在浏览器中访问 http://localhost/api/explorer/ 以查看新 OpenAPI v3 UI!运行 docker stop openapi 来停止该容器。



Helm 图表


我们在本文开头已经暗示,Kubernetes 是一款开源容器编排框架,能帮助您管理容器部署。它由一个非常大的开发人员社区运行,而且受所有主要的云公司支持(IBM 是最重要的支持者之一)。有些不错的 交互式教程 能帮助您更加熟悉该框架。


在 Kubernetes 中,可通过不同方式部署容器。最常见且最容易的方式之一是利用一个 Helm 图表 ,该图表包含一组可针对自定义部署而覆盖的预先配置的值。


IBM 已开源了大量 Helm 图表,它们可在这个 存储库 中获得。


对于本文,我们将专注于 WebSphere Liberty Helm 图表 ,它通过简化自动扩展、事务日志和入口公开等方面的配置,来帮助您部署微服务 Java 应用程序。



本文剩余部分将使用此图表,所以您需要两个命令行工具: helm 客户端 和 kubectl 客户端 。


kubectl (“kube control”的简称)客户端允许您与一个远程 Kubernetes 集群交互,而 helm 客户端允许您在幕后使用 kubectl 将 Helm 图表安装在该集群中。


环境 1:Minikube



大部分使用 Kubernetes 的开发人员都会在其笔记本电脑中安装 Minikube。它是 Kubernetes 的一个轻量型(但完整)的版本,旨在提供一个本地平台供开发人员使用。


安装 minikube 后,可以运行 minikube start 来配置您的 kubectl 客户端。现在您已与运行 Minikube 的本地 VM 建立了直接连接。


要使用 WebSphere Liberty Helm 图表,我们首先必须启动 Helm 的服务器端(名为 Tiller )。可以运行 helm init 来这么做,而且您应该看到一条消息,比如 “Tiller (the helm server side component) has been installed into your Kubernetes Cluster”


下一步是添加 IBM 的 Helm 图表存储库: helm repo add ibm-charts https://raw.githubusercontent.com/IBM/charts/master/repo/stable/


现在您已准备好使用此图表部署 WebSphere Liberty 容器了!有许多可被覆盖的 默认值 。对于本例,我们将覆盖部署的容器和自动扩展默认值:


helm install --name openapi --set image.repository=arthurdm/websphere-liberty --set resources.constraints.enabled=true --set autoscaling.enabled=true --set autoscaling.minReplicas=2 ibm-charts/ibm-websphere-liberty

您刚部署了一个 OpenAPI v3 容器化的 WebSphere Liberty 应用程序,采用的自动扩展策略将始终保持至少两个 pod 正常运行,并根据 pod 的 CPU 利用率可扩展到最多 10 个 pod。非常棒!


运行 kubectl get services 来获取当前部署的服务的列表。例如:


NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.0.0.1

443/TCP 6h
openapi-ibm-websphere-li 10.0.0.183

9080:31619/TCP 3h


在上面的示例中,我们部署的服务名为 openapi-ibm-websphere-li 。要在浏览器中查看此应用程序,可运行 minikube service openapi-ibm-websphere-li --url 来获得该应用程序的基础地址。将 /api/explorer 附加到它,您应该看到在您的笔记本上的 Kubernetes 集群中运行着一个出色的 OpenAPI UI!


有关 Minikube 的更多信息,请参阅 Minikube 官方文档 。


环境 2:IBM Cloud Private


容器化的 WebSphere Liberty 应用程序在 Minikube 环境中运行后,您已准备好部署到一个完全成熟且安全的内部部署 Kubernetes 环境中。可以将 Minikube 视为开发环境,您在其中隔离地运行微服务;将 IBM Cloud Private 视为生产级 Kubernetes 环境,来自您企业的所有微服务都汇集到这里 – 提供和使用服务。


要安装并进一步了解 IBM Cloud Private,请参阅 IBM Cloud Private 官方文档 。


安装后,您将看到这个出色的用户界面:




Configure client 设置您的
kubectl 客户端来指向 IBM Cloud Private 集群,然后使用来自第 #1 节 (Minikube) 的相同
helm 指令来添加和部署
ibm-websphere-liberty

Helm 图表:



但是,还有比这更容易的方法!IBM Cloud Private 有一个预先加载了 IBM 的官方 Helm 图表的 Catalog 节:



单击该 Helm 图表可以看到呈现出了一个解释不同值的文档表,然后单击 Configure 转到配置页面,您可以在这里覆盖 Helm 图表的默认值。所以,可以看到,在命令行中执行的所有操作都可以在 Minikube 中执行,但使用了一个出色的用户界面。


选择与第 #1 节中相同的值以保持一致性,然后单击 Install :


Release name: openapi
image.repository: arthurdm/websphere-liberty
resources.constraints.enabled: true
autoscaling.enabled: true
autoscaling.minReplicas: 2

在 “Workloads -> Helm releases&#8221下,您将找到您的“openapi”版本。下滚页面以查看细节,比如自动扩展信息:



进一步下滚到部署节并单击它的链接。部署细节页面将打开,您可以单击 access liberty 查看部署的容器: access liberty :



您将看到显示了 WebSphere 欢迎页面。将 api/explorer 附加到该 URL,您将看到在 Minikube 中见过的出色的 OpenAPI UI。但是这一次,它是在一个可靠的企业级 IBM Cloud Private 集群中运行!您的同事现在可以将他们的微服务与您的微服务相连接,利用您的 REST API 来获取宝贵的记录系统信息。


环境 3:IBM Cloud


IBM Cloud(以前称为Bluemix)在公有(但仍然非常安全的)空间中提供了一个容器服务。它也完全基于 Kubernetes,这有助于应用程序在 IBM Cloud Private 与 IBM Cloud 之间顺利过渡。


在您的 API 开发旅程中,您可能希望将新 systems-of-interaction 应用程序推送到 IBM Cloud 中,IBM Cloud 聚合对 IBM Cloud Private 内运行的 API 的各种后端调用,并将它们作为组合 API 而向应用程序开发人员公开。有关增强的 API 管理和网关功能,可以考虑API Connect,它既能在 IBM Cloud 中运行也能在 IBM Cloud Private 中运行。


首先,登录 IBM Cloud 或在其中创建一个免费账户,进入仪表板的 Containers 节。单击 Create a cluster 按钮,它提供了两种选择:轻量型、免费集群,初始包含一个工作者节点;付费、生产级集群,能依据您的业务需求而扩展


当您的集群准备好后(时间可能不同),您将看到一个出色的仪表板和它的摘要。这是我们的轻量型集群示例的屏幕截图:



单击左侧名为 Access 的菜单项,以了解设置从命令行访问集群的操作说明。您将需要两个工具: kubectl (您已在本文中设置)和 bx ,后者允许您 连接到 IBM Cloud 环境并使用子命令 bx cs 与您的 Kubernetes 集群交互。


设置您的命令行 kubectl 桥后,您可能想知道:如果可以使用前两个场景中的同一个 ibm-websphere-liberty Helm 图表岂不是很棒?


答案是:您可以!


就像在 Minikube 场景中一样,设置您的 Helm 桥,添加官方 IBM Helm 存储库,然后使用它的 Helm 图表部署一个 WebSphere Liberty 应用程序:


helm init
helm repo add ibm-charts https://raw.githubusercontent.com/IBM/charts/master/repo/stable/
helm install --name openapi --set image.repository=arthurdm/websphere-liberty --set resources.constraints.enabled=true --set autoscaling.enabled=true --set autoscaling.minReplicas=2 ibm-charts/ibm-websphere-liberty

简单且一致!因为我们使用的是轻量型的免费集群,所以只有 NodePort 服务类型可用。如果您希望设置 Ingress 或 LoadBalancer 服务 ,需要基于订阅的集群。


要获取刚部署的应用程序的 URL,只需找到两条信息:



  1. 运行以下命令来找到您的工作者节点的公共 IP bx cs workers

  2. 我们分配给您的服务的 NodePort:

    kubectl get services
    kubectl describe services




这是一段示例输出:




打开一个浏览器并导航到 :/api/explorer ,您将看到同一个 OpenAPI 应用程序在公有 IBM Cloud 中运行!


有关使用所部署的应用程序的更多信息,请参阅 Bluemix 文档 。


环境 3.1:Cloud Foundry


尽管 Cloud Foundry 目前的 IBM Cloud 版本既没使用 Kubernetes 也没使用 Docker 容器,但值得注意的是可使用一个 自定义 buildpack 将完全相同的应用程序和配置推送到该 PaaS 环境来启用 OpenAPI v3 功能。查阅我们的 运行真实示例 和相应的 实验操作说明 来了解如何做!


结束语


在本文中,您成功地将 WebSphere Liberty 的 Helm 图表部署到了 3 个 Kubernetes 环境中:Minikube、IBM Cloud Private 和 IBM Cloud。您看到了跨所有这些环境使用完全相同的 Helm 图表来部署完全相同的 Docker 映像的一致性。这让您能够确信您能将旧有应用程序迁移并集成到一个混合云环境中。



在 developerWorks 上的相关资源:



  • 为什么 Liberty 是最适合云的 Java 运行时



  • 针对 Liberty 的 Chef 操作手册入门



  • 在 5 分钟内通过 10 个简单步骤集成 JRebel 与 Liberty



  • 使用 WebSphere Developer Tools for Eclipse 在 Liberty 上创建一个 Hello World 应用程序


本文翻译自: Deploy Java OpenAPI microservices in containers using Liberty, Kubernetes, and IBM Cloud (2017-11-15)





推荐阅读
author-avatar
mobiledu2502857697
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有