100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > OpenShift 4 Hands-on Lab (1) - 多种方法部署运行应用

OpenShift 4 Hands-on Lab (1) - 多种方法部署运行应用

时间:2023-08-20 02:21:15

相关推荐

OpenShift 4 Hands-on Lab (1) - 多种方法部署运行应用

《OpenShift 4.x HOL教程汇总》

说明:本文已经在OpenShift 4.8环境中验证

文章目录

应用是如何部署到OpenShift上的部署应用的部署应用镜像部署应用代码部署应用包部署Dockerfile资源

应用是如何部署到OpenShift上的

OpenShift是企业级容器平台,在OpenShift的应用必须是容器(Container)形态运行的,因此可以说部署应用就是部署应用容器。我们知道所有运行的容器都是来自镜像(Image),从OpenShift的角度看镜像分为两类:即基础镜像(Base Image,也叫Builder Image。它只包括运行应用所需的基础环境,例如Tomcat镜像中只包括一个标准的Tomcat环境)和应用镜像(App Image - 包括了应用包和所有依赖的运行环境)。两者的关系大致是“基础镜像 + 应用包 + 应用依赖包 = 应用镜像”,其中“应用包”又进一步是由“应用代码”通过编译、打包而生成的结果,而“应用依赖包”指的是应用运行所依赖的文件,例如一个Spring Boot应用运行所依赖各种JAR包。

根据应用资源当前的形态,在OpenShift上主要有几种部署应用的方式:

部署应用镜像:直接部署最终的应用镜像。此过程适合用在生产环境,因为此时的应用镜像已是经过全面测试验证的,该镜像中包括可应用所需要的所有资源。由于部署过程中不会再动态下载任何应用依赖包,因此可直接在离线环境中部署,部署后可直接运行。

部署应用代码:OpenShift提供了一种称为Source 2 Image(S2I)工具,利用它可以直接以应用代码为源部署应用。在此过程中S2I会自动下载应用所需依赖包,然后编译并打包应用,最后将应用包、应用依赖包和基础镜像打包成应用镜像,这样就可以在OpenShift运行该应用镜像了。

由于可以将应用代码自动经过一系列过程变为可运行的应用镜像,因此此过程非常适合用在应用开发测试阶段。尤其是配合开发工具,可以将应用代码部署到OpenShift上进行测试。

部署应用包:类似部署方式2,只不过S2I工具是从应用包开始部署过程的。

部署Dockerfile资源:OpenShift会先根据Dockerfile定义构建应用容器镜像,然后再将生成的容器镜像推送到内部的Image Registry,OpenShift然后再部署该镜像。

下面我们分别介绍上述部署应用的操作过程。

部署应用的

部署应用镜像

打开浏览器打开OCP_MASTER_URL页面,然后用USER_ID用户登录进入OpenShift控制台。

在登录后的切换到"开发者"视图,然后进入“拓扑”页面。先点击“项目:所有项目“右侧下拉,然后选中”创建项目”。在Create Project窗口中填写“USER-ID-parksmap”作为名称,然后点击“创建”按钮,项目即创建成功。点击页面左侧“+添加”菜单,然后点击“容器镜像”。在“部署镜像”页面中为“来自外部容器镜像仓库的镜像名称”提供以下信息,然后回车。

openshiftroadshow/parksmap在识别出镜像后点击页面下方的“创建”按钮,OpenShift会开始部署此镜像,稍后页面将显示下图“拓扑”界面。当部署成功部署后,外圈会变成深蓝色。

将鼠标放在上图parksmap图标的右上方的箭头处(会弹出的“打开URI”的提示),然后点击箭头。此时会弹出一个新页面显示刚刚部署好的应用。回到OpenShift控制台,点击parksmap图标,右侧会滑出相关Deployment信息。其中“路由”(Route)就是上一步的“URI”,即应用访问地址。

点击上图的Pod实例名链接,将显示该Pod的页面。可以进入“指标”监控该Pod的运行资源,见下图(只有安装了OpenShift的Metric功能才能显示出数据)。

进入“日志”,查看Pod中容器的日志。

回到“拓扑”页面,查看parksmap部署的“详情”一栏,可以通过点击pod右侧的向上线箭头增加pod的数量。

在命令终端中执行以下命令登录OpenShift,然后查看项目中的pod。

$ oc login OCP_API_URL -u USER-ID -p USER-PW$ oc get pod -n USER-ID-parksmapNAME READY STATUSRESTARTS AGEparksmap-1-2w9mf1/1Running04h10mparksmap-1-ph8j21/1Running0178m

部署应用代码

通过OpenShift控制台创建一个新项目USER-ID-cakephp。点击OpenShift控制台左侧的“+添加”,然后在页面右侧点击“从Git”。在“从 Git 导入”页面中,将“Git Repo URL”栏设为“/sclorg/cakephp-ex.git”。在“构建器”区域选中“PHP”,其它都接受缺省即可,最后点击下方的“创建”。

依次执行以下命令,通过日志查看构建(Build)应用的情况。可以从Build的日志中看到OpenShift会先从GitHub上下载应用代码,然后根据dockerfile的定义步骤将应用代码和Builder Image打包,在这个过程中会下载运行php应用所依赖的文件包。最后将生成的App Image推送到OpenShift内部的Image Registry。可以通过image-registry.openshift-image-registry.svc:5000/user1-parksmap/cakephp-ex-git访问到该App Image。

$ oc get build -n USER-ID-cakephpNAMETYPEFROMSTATUSSTARTED DURATIONcakephp-ex-git-1 Source Git@133cb8b Complete 3 hours ago 1m45s$ oc logs -f build/cakephp-ex-git-1 -n USER-ID-cakephpCloning "/sclorg/cakephp-ex.git" ...Commit: 133cb8b0b9a79944b1620acf17fe9f07825e0b68 (Get rid off EOL php version)Author: Petr "Stone" Hracek <phracek@>Date: Thu Jan 2 09:48:33 +0100Caching blobs under "/var/cache/blobs".Getting image source signaturesCopying blob sha256:1cd26fbb2b2181a18c41ece85dff8b293e399e50dc3abe227b1940450bf6298bCopying blob sha256:4fbc3bafa3d4400bb97a733c1fe12f2f99bf38b9d5b913d5034f29798739654dCopying blob sha256:707235ac60367dff674607b0be2e18a83daea6dc2c8fb7330dbf7de29baf094bCopying blob sha256:0453406be68523ccc82999f84fffc57af64e00d9be0b75169c642c952b9bf7bc... ...######以下省略N行......Pushing image image-registry.openshift-image-registry.svc:5000/user1-cakephp/cakephp-ex-git:latest ...Getting image source signaturesCopying blob sha256:5fc6b6797fe6bcbd34f4ea77d1d4b4918e49a68d51fa3c2340a7c98837368661Copying blob sha256:0453406be68523ccc82999f84fffc57af64e00d9be0b75169c642c952b9bf7bcCopying blob sha256:4fbc3bafa3d4400bb97a733c1fe12f2f99bf38b9d5b913d5034f29798739654dCopying blob sha256:1cd26fbb2b2181a18c41ece85dff8b293e399e50dc3abe227b1940450bf6298bCopying blob sha256:707235ac60367dff674607b0be2e18a83daea6dc2c8fb7330dbf7de29baf094bCopying blob sha256:34971b2d1eb98e410c2802e6bb3a7f499f9c5bff1b870ed329089ecdb21cf856Copying config sha256:b77051c0a30366462c246e26211394487bb638f0c3648aacaaca553824c056dcWriting manifest to image destinationStoring signaturesSuccessfully pushed image-registry.openshift-image-registry.svc:5000/user1-parksmap/cakephp-ex-git@sha256:a90e60a420a64b30c6382cb3e7685e1023a3242311745a9e38679c742b4ea9dfPush successful

执行以下命令查看部署进度。当为以下状态时说明应用已经部署好。其中cakephp-ex-git-1-build负责下载应用代码和其依赖的文件,然后将其和“构建器镜像”(Builder Image)打包成“应用镜像”(App Image),而cakephp-ex-git-1-deploy负责将App Image部署到OpenShift上。

$ oc get pod -n USER-ID-cakephpNAMEREADY STATUSRESTARTS AGEcakephp-ex-git-1-build 0/1Completed 023mcakephp-ex-git-8586668995-m99ld 1/1Running022m

查看访问应用的Route。

$ oc get route -n USER-ID-cakephpNAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARDcakephp-ex-git cakephp-ex-git-user1-parksmap.apps.cluster-beijing-c70a.beijing-c70a.cakephp-ex-git 8080-tcp None

用浏览器打开Route的HOST地址即可访问应用。

部署应用包

先创建USER-ID-war项目。

$ oc new-project USER-ID-mywar

以下可以任选一种方式执行:可以直接部署在GitHub上的war(文件名必须是ROOT.war),也可先将war文件下载到本地,然后再部署。

方法1:直接部署在GitHub上的ROOT.war,然后查看Build日志。注意:在Build日志中可以看到将ROOT.war复制到相关目录中,然后生成App Image并推送到OpenShift内部的Registry上。

$ oc new-app --name=mywar jboss-webserver31-tomcat8-openshift:1.4~/liuxiaoyu-git/tomcat-war -n USER-ID-mywar$ oc logs -f bc/mywar -n USER-ID-mywar。。。STEP 8: RUN /usr/local/s2i/assembleCopying all war artifacts from /tmp/src directory into /opt/webserver/webapps for later deployment...'/tmp/src/ROOT.war' -> '/opt/webserver/webapps/ROOT.war'Copying all war artifacts from /tmp/src/deployments directory into /opt/webserver/webapps for later deployment。。。

方法2:先将ROOT.war文件下载到本地,然后在指定Builder Image(jboss-webserver31-tomcat8-openshift:1.2)创建应用,最后再根据ROOT.war开始构建App Image。注意:在Build日志中可以看到将ROOT.war复制到相关目录中,然后生成App Image并推送到OpenShift内部的Registry上。

$ curl -LO /liuxiaoyu-git/tomcat-war/master/ROOT.war$ oc new-app --name=mywar jboss-webserver31-tomcat8-openshift:1.4~. -n USER-ID-mywar$ oc start-build mywar --from-file=ROOT.war -n USER-ID-mywar$ oc logs -f bc/mywar -n USER-ID-mywar。。。STEP 8: RUN /usr/local/s2i/assembleCopying all war artifacts from /tmp/src directory into /opt/webserver/webapps for later deployment...'/tmp/src/ROOT.war' -> '/opt/webserver/webapps/ROOT.war'Copying all war artifacts from /tmp/src/deployments directory into /opt/webserver/webapps for later deployment。。。

由于OpenShift不会为通过命令行方式创建的App自动创建Route,因此还需手动根据Service创建Route。然后获得mywar的Route的访问地址,用浏览器访问应用即可。

$ oc expose svc mywar -n USER-ID-mywar$ oc get route mywar -n USER-ID-mywarNAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARDmywar mywar-mywar.apps.cluster-beijing-c70a.beijing-c70a.mywar8080-tcp edgeNone

部署Dockerfile资源

OpenShift可以直接部署Dockerfile资源,其实OpenShift后台需要先根据Dockerfile构建镜像,然后再部署该镜像。

先创建USER-ID-dockerfile项目。

$ oc new-project USER-ID-dockerfile

首先查看Dockerfile内容。

$ curl /liuxiaoyu-git/openshift-dockerfile-example/master/DockerfileFROM bash:latestCMD ["bash", "-c", "while true; do sleep 3; echo 'Sleep.'; done"]

然后根据Dockerfile创建运行应用。

$ oc new-app --name sleep /liuxiaoyu-git/openshift-dockerfile-example.git -n USER-ID-dockerfile$ oc logs -f bc/sleep -n USER-ID-dockerfile

查看运行sleep的pod名称,然后查看该pod的日志确认运行正常,证明应用应在运行了。

$ oc get pod -w -n USER-ID-dockerfileNAMEREADY STATUSRESTARTS AGEsleep-1-build 0/1Completed 051ssleep-b4d7cd7fb-6mhj4 1/1Running039s$ oc logs pod/<SLEEP_POD_NAME> -n USER-ID-dockerfileSleepSleep...Sleep

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。