在OpenShift上部署Java EE微服务
我昨天用WildFly Swarm在博客上發(fā)布了有關(guān)簡(jiǎn)單JAX-RS微服務(wù)的博客。 您學(xué)習(xí)了如何使用Maven構(gòu)建一個(gè)所謂的“胖子”,還使用Maven Docker插件對(duì)我們的微服務(wù)進(jìn)行了Docker化并在Docker Machine上本地運(yùn)行。 這是在本地測(cè)試事物的好方法。 到目前為止,缺少的是將其投入生產(chǎn)。 讓我們看一下在OpenShift Origin上運(yùn)行昨天的示例所需的步驟。
企業(yè)Java開發(fā)人員為什么要關(guān)心?
但是首先,讓我們簡(jiǎn)要地探討為什么Enterprise Java開發(fā)人員甚至應(yīng)該關(guān)心所有這些。 關(guān)于最近的炒作和嗡嗡聲,我有些疑惑。 當(dāng)然,它們構(gòu)成了一個(gè)有趣的運(yùn)動(dòng)場(chǎng),您可以花費(fèi)數(shù)小時(shí)來(lái)下載容器圖像并在筆記本電腦上運(yùn)行它們。 但是到目前為止,將它們投入生產(chǎn)是一個(gè)挑戰(zhàn)。 Nigel的博客文章很好,關(guān)于Docker中不推薦使用的功能 。 它還有另一個(gè)寶石:一段稱為“企業(yè)影響力”。 主要報(bào)價(jià)是:
“我敢肯定,這類事情總是在很酷的時(shí)髦公司[...]中完成的,但是絕對(duì)不會(huì)在生銹的老公司[...]中完成。”
(奈杰爾·波頓)
我絕對(duì)可以支持。 企業(yè)開發(fā)人員,架構(gòu)師和項(xiàng)目經(jīng)理正在采用慢得多且保守的方法來(lái)采用所有這些技術(shù)。 他們正在尋找成功管理基礎(chǔ)架構(gòu)和項(xiàng)目的方法。 所有這些技術(shù)都將進(jìn)入我們的日常工作中,但它們將以更易于管理的方式出現(xiàn)。 因此,我們只是在做作業(yè),對(duì)所有這些進(jìn)行自我教育,并評(píng)估可以幫助我們的解決方案。 但是足夠的一般思想; 讓我們開始部署和擴(kuò)展Java EE應(yīng)用程序。
先決條件
安裝并運(yùn)行OpenShift Origin,并按照以下步驟在Docker容器中構(gòu)建WildFly Swarm JAX-RS微服務(wù) 。 因?yàn)檫@是示例,所以我將進(jìn)一步部署和擴(kuò)展。
( 注意:我同時(shí)使用OpenShift項(xiàng)目中的all-in-vm和Fabric8項(xiàng)目提供的Vagrant映像,它們可以互換。它們的工作原理幾乎相同,并且都依賴于OpenShift Origin。 .f8,例如代碼或示例之一中的https://vagrant.f8:8443,則可以使用localhost或其他可互換的主機(jī)映射。)
什么是OpenShift起源?
OpenShift Origin是Red Hat分布式應(yīng)用程序系統(tǒng)OpenShift的上游開源版本。 我們啟動(dòng)了這個(gè)項(xiàng)目,以提供一個(gè)平臺(tái),開發(fā)團(tuán)隊(duì)可以在該平臺(tái)上構(gòu)建和管理基于Docker和Kubernetes的云本機(jī)應(yīng)用程序。 您可以在Github上找到源代碼 ,我們知道您有改善OpenShift Origin的好主意。 因此,請(qǐng)袖手旁觀, 加入我們的社區(qū) 。
掌握所有集成技術(shù)有很多知識(shí)。 但是社區(qū)正在努力使這對(duì)我們(企業(yè)Java開發(fā)人員)盡可能地易于理解和管理。 為了給您OpenShift的簡(jiǎn)要概述,這是所有工作原理的簡(jiǎn)單示意圖:
如果您一直在關(guān)注有關(guān)Docker和Kubernetes的最新話題,那么您會(huì)在這里看到很多常見的部分。 請(qǐng)求通過(guò)客戶端進(jìn)入,并在路由層結(jié)束。 它被分發(fā)到服務(wù),并命中了一個(gè)容器,該容器在容器中運(yùn)行我們的Docker映像之一。 吊艙由復(fù)制控制器控制。 當(dāng)然,還有很多事情要做,但這應(yīng)該是您現(xiàn)在需要了解的全部知識(shí),以便對(duì)整個(gè)事情有一個(gè)初步的了解。
另一個(gè)更詳細(xì)的概述為您提供了我們今天將要使用的零件的更精確的概念。
尤其是現(xiàn)在,集成的Docker注冊(cè)表,映像流,部署配置和路由到我們的服務(wù)特別重要。
基礎(chǔ)知識(shí)–管理界面和客戶端工具
設(shè)置無(wú)用信息框并將其啟動(dòng)后,可以通過(guò)瀏覽到以下地址來(lái)訪問(wèn)基于Web的管理:https:// localhost:8443。 多合一虛擬機(jī)沒(méi)有配置安全性。 這意味著將使用“全部允許”身份提供者。 您可以使用任何非空的用戶名和密碼登錄。 “管理員”用戶是具有所有權(quán)限的管理用戶。 使用“ admin / admin”登錄可讓您充分使用Origin。 基于Web的管理非常適合查看日志文件和整體情況。 它(尚未)功能齊全,并且不允許您進(jìn)行調(diào)整或更改。 首先,您需要使用命令行工具:“ oc”。 與網(wǎng)絡(luò)管理類似,您還必須登錄到OpenShift:
oc login https://localhost:8443還提示您輸入用戶名和密碼(admin / admin),并顯示項(xiàng)目列表:
Authentication required for https://vagrant.f8:8443 (openshift) Username: admin Password: Login successful.Using project "default". You have access to the following projects and can switch between them with 'oc project <projectname>':* default (current)* openshift* openshift-infra現(xiàn)在,您可以在OpenShift中進(jìn)行一些管理了。
公開內(nèi)部Docker注冊(cè)表
如果我們想在OpenShift中運(yùn)行dockerized應(yīng)用程序,而docker-hub中沒(méi)有該應(yīng)用程序,則需要將其推送到OpenShift Docker Registry。 默認(rèn)情況下,它不是外部公開的,因此首先要做的是通過(guò)Route在OpenShift Docker Registry中公開該構(gòu)建。
oc create -f registry-route.jsonjson文件包含路由的定義,并簽入我的Github存儲(chǔ)庫(kù)。 確保根據(jù)需要調(diào)整第8行中的主機(jī)名 。 為了使該示例正常工作,我在Windows上的主機(jī)文件中添加了以下映射:
172.28.128.4 registry.vagrant.f8成功創(chuàng)建路由后,您所要做的就是相應(yīng)地設(shè)置環(huán)境(在關(guān)注我的介紹性博客文章時(shí),您已經(jīng)完成了此操作。這只是在提醒您):
set DOCKER_HOST=tcp://vagrant.f8:2375創(chuàng)建一個(gè)項(xiàng)目和一個(gè)用戶
讓我們?yōu)槲覀兊氖纠齽?chuàng)建一個(gè)新項(xiàng)目。 由于名稱空間的原因,我們將在用戶名和圖像名之后精確命名項(xiàng)目:在本示例中為“ myfear”。
oc new-project myfear --description="WildFly Swarm Docker Image on OpenShift v3" --display-name="WildFly Swarm Project"描述和顯示名稱是可選的,但可以使其在Web界面中看起來(lái)更好。
讓我們通過(guò)簡(jiǎn)單地登錄為以下用戶來(lái)創(chuàng)建用戶“ myfear”:
c login https://vagrant.f8:8443 -u myfear調(diào)整示例
我們需要從昨天的示例中更改pom.xml的某些部分。 首先,我們需要告訴Docker Maven插件,它應(yīng)該使用運(yùn)行在Registry.vagrant.f8:80的私有注冊(cè)表。 想知道為什么不是5000端口? 因?yàn)?#xff0c;我們通過(guò)OpenShift公開了服務(wù),而HAProxy通過(guò)端口80公開了該服務(wù)。取消注釋pom.xml中的兩行 :
<docker.host>tcp://vagrant.f8:2375</docker.host> <docker.registry>registry.vagrant.f8:80</docker.registry>并通過(guò)oc客戶端工具獲取用戶myfear的登錄令牌:
$oc whoami -t這將輸出如下內(nèi)容:
ykHRzUGGu-FAo_ZS5RJFcndjYw0ry3bskMgFjqK1SZk現(xiàn)在,在pom的<authConfig>元素中更新令牌。 基本上就是這樣。
建立并推動(dòng)形象
該圖像已經(jīng)在我之前的博客文章中構(gòu)建,但是讓我們?cè)谶@里再次做它:
mvn clean install docker:build現(xiàn)在將映像推送到我們的OpenShift Docker Registry:
mvn docker:push它將輸出將映像推送到registry.vagrant.f8:80 / myfear / swarm-sample的過(guò)程。
在OpenShift上運(yùn)行Docker映像
現(xiàn)在,我們僅使用常規(guī)方法在OpenShift上啟動(dòng)新的Docker映像:
oc new-app --docker-image=myfear/swarm-sample:latest觀察發(fā)生了什么:OpenShift實(shí)際上在幕后創(chuàng)建了一些資源,以便處理部署和運(yùn)行此Docker映像。 首先,它創(chuàng)建了一個(gè)服務(wù),該服務(wù)標(biāo)識(shí)它將代理和負(fù)載平衡的一組Pod。 服務(wù)分配IP地址和端口對(duì),訪問(wèn)時(shí)將重定向到適當(dāng)?shù)暮蠖恕DP(guān)心服務(wù)的原因是,它們基本上充當(dāng)Pod和需要使用內(nèi)部運(yùn)行Pod的任何事物之間的代理/負(fù)載平衡器。 OpenShift環(huán)境。 使用describe命令獲取有關(guān)從我們的映像創(chuàng)建的OpenShift的完整描述:
oc describe service swarm-sample哪個(gè)輸出:
Name: ? ? ? ? ? ? ? ? ? swarm-sample Namespace: ? ? ? ? ? ? ?myfear Labels: ? ? ? ? ? ? ? ? app=swarm-sample Selector: ? ? ? ? ? ? ? app=swarm-sample,deploymentconfig=swarm-sample Type: ? ? ? ? ? ? ? ? ? ClusterIP IP: ? ? ? ? ? ? ? ? ? ? 172.30.25.44 Port: ? ? ? ? ? ? ? ? ? 8080-tcp ? ? ? ?8080/TCP Endpoints: ? ? ? ? ? ? ?172.17.0.5:8080 Session Affinity: ? ? ? None No events.到目前為止,我們?nèi)鄙俚囊患率峭ㄟ^(guò)路線的外部映射。 您還記得我們?yōu)镈ocker Registry做的事情嗎? 這是到目前為止的下一步也是最后一步。
oc expose service swarm-sample --hostname=wildfly-swarm.vagrant.f8您可能已經(jīng)猜到了,我們還需要在主機(jī)文件中映射主機(jī)名:
172.28.128.4 ? ?wildfly-swarm.vagrant.f8我們完成了。 為什么我沒(méi)有使用json文件創(chuàng)建路由? 因?yàn)槲蚁胂蚰故?#xff0c;只要圖像為端口使用正確的EXPOSE定義,它就會(huì)更容易,因此ocpose命令可以完成此工作而不必弄亂json。 這是相同的結(jié)果。
瀏覽至:http://wildfly-swarm.vagrant.f8/rs/customer并查看輸出:
{"text":"WildFly Swarm Docker Application on OpenShift at http://wildfly-swarm.vagrant.f8/rs/ - Hostname: swarm-sample-1-7mmd7"}主機(jī)名是容器,容器在其上運(yùn)行。
翻譯自: https://www.javacodegeeks.com/2015/10/deploying-java-ee-microservices-on-openshift.html
總結(jié)
以上是生活随笔為你收集整理的在OpenShift上部署Java EE微服务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 二类卡怎么取八万?
- 下一篇: 购买余额佳要注意哪些?