irpas技术客

OpenShift 4 - 全图形化 Step-by-Step 部署容器应用(附视频)_openshift部署_dawnsky.liu

网络 7184

《OpenShift 4.x HOL教程汇总》 说明:本文使用的是 OpenShift 4.9 控制台部署一个多层应用的所有资源,其它 OpenShift 版本的控制台可能会有少量差别。

文章目录 准备环境和项目导入 MongoDB 镜像和模板资源创建项目 部署应用相关模块部署web页面模块Pod 运行监控和日志手动和自动弹性伸缩部署后端API服务部署Mongo数据库配置健康检查配置 Webhook 演示视频参考

准备环境和项目 导入 MongoDB 镜像和模板资源

在 OpenShift 控制台中切换到 “openshift” 项目,然后使用“导入 YAML” 功能导入以下 MongoDB 的 ImageStream 配置。

kind: ImageStream apiVersion: image.openshift.io/v1 metadata: annotations: openshift.io/display-name: MongoDB name: mongodb namespace: openshift labels: samples.operator.openshift.io/managed: 'true' spec: lookupPolicy: local: false tags: - name: '3.6' from: kind: DockerImage name: registry.access.redhat.com/rhscl/mongodb-36-rhel7 generation: 4 referencePolicy: type: Source - name: latest annotations: description: Provides a MongoDB database on RHEL 7. iconClass: icon-mongodb openshift.io/display-name: MongoDB openshift.io/provider-display-name: 'Red Hat, Inc.' tags: 'database,mongodb' from: kind: ImageStreamTag name: '3.6' generation: 1 referencePolicy: type: Local

说明:也可执行以下命令创建 ImageStream。

$ oc tag registry.access.redhat.com/rhscl/mongodb-36-rhel7 openshift/mongodb:3.6

重复以上操作,将 “https://raw.githubusercontent.com/liuxiaoyu-git/starter-guides/ocp-4.8/mongodb-template.yaml” 中的 MongoDB 模板内容导入到 openshift 项目。

创建项目

登录进入OpenShift控制台,然后切换到“开发者”的视图。 在项目下拉框中选择“创建项目”,然后创建名为“parks-workshop”的项目。

部署应用相关模块 部署web页面模块

Parksmap Web提供的是应用的访问页面。 在“+添加”菜单中找到“容器镜像”。 在“部署镜像”页面中选择“Image name from external registry”,并提供“quay.io/openshiftroadshow/parksmap”。

在“部署镜像”页面中下方的“资源”区域选择“部署” 在 “高级选项” 中的 “资源限制” 区域按照下图配置 CPU 和内存的要求和限制。 在“标签”区域中添加如下3个标签(app=workshop,component=parksmap,role=frontend)。最后点击“部署镜像”页面下方的“创建”按钮,此时OpenShift开始部署镜像。 完成后,在“拓扑”页中显示下图,其中可以看到有1个Pod在运行,并且有名为 parksmap 的“路由”,它包含访问web应用的URI,点击下图中的“打开 URI”即可查看部署的 parksmap 应用。

Pod 运行监控和日志

可点击上面“拓扑图”的“路由”区域的 parksmap 链接,会显示下图监控到的网络流量(在试用环境中关闭了该功能,因此只有在正式的 OpenShift 才能看到)。 可点击上面“拓扑图”中的Pod实例链接,就会在下图中显示该Pod实例对资源的使用情况。 在Pod实例页面中切换到“日志”一栏,可以查看给pod的日志信息。 在Pod实例页面中切换到“日志”一栏,可以看到和Pod相关的事件。 在Pod实例页面中切换到“终端”一栏,可以进入该Pod内部。然后可以执行以下命令:

$ ls -l /parksmap.jar

手动和自动弹性伸缩

在“拓扑“”页面的右侧“详情”中,点击圆形右侧向上箭头,此时会动态显示Pod实例数量扩展到2个。 再次查看“拓扑”页面,在“服务”区域中进入名为parksmap的服务。 在parksmap的服务页面中查看pod情况,确认有2个pod。然后通过Pod右侧的菜单删除一个pod。 此时在“拓扑”页面中可以查看到被删除的pod先变成Terminaling状态,同时会生成新的pod替换被删除的pod。

在 “操作” 菜单中选择 “添加 HorizontalPodAutoscsaler”。 然后在 “添加 HorizontalPodAutoScaler” 页面中设置 CPU 和内存的使用率,最后“保存”。 此后确认 Pod 数量无法手动修改了。注意此时 pod 数为 2 个,过一段时间会缩减为 1 个 pod。

部署后端API服务

下面部署前端Web应用调用的后端API服务。 确认当前是在“parks-workshop”项目,且当前应用程序是“parksmap-app”。然后在“开发者”视图中进入“+添加”页面,点击下图中的“从 Git 导入”。 将 “https://github.com/liuxiaoyu-git/nationalparks” 克隆到自己的 Git 账号下,然后在下图中的"Git"区域提供应用代码的 Git Repo URL 地址 “https://github.com/liuxiaoyu-git/nationalparks.git”。 由于该 Git Repo 中存在 Dockerfile 文件(见下图),因此上图中会默认使用 Dockerfile 构建镜像。 点击 “编辑导入策略” 链接,OpenShift 会自动使用 “Builder Image” 的导入策略,并根据 Repo 的开发语言在下面的 “构建器镜像” 中自动选择 “Java” 构建镜像,在 “构建器镜像版本” 中选出 “openjdk-11-el7”。

根据下图,在“常规设置”区域中设置名称为“nationalparks”,在“资源”区域中确定选择的是“部署”、在“标签”区域中添加下图中的3个标签(app=workshop,component=parksmap,role=backend)。最后点击“创建”按钮。 可以在下图“拓扑”页面中选中“nationalparks”部署,在右侧窗口中可以看到部署过程中出现 Pod 可能出现 “ImagePull BackOff” 错误。点击 “构建” 下方的 “查看日志” 链接。 查看该构建的日志,可以看到后台做的一些列下载源码、下载依赖包、编译打包、生成镜像等操作。 在 “构建”的 “指标” 页面。“构建Build”是OpenShift根据应用代码编译打包的过程,每个Build过程都是运行在一个容器中。因此下图看到的就是运行“nationalparks-1”的构建容器运行监控情况。

在完成构建后,应用镜像会随之部署到OpenShift上。部署成功后如下图,已经有“Running”的Pod了。 点击下图中“路由”区域的链接,并在后面加上访问路径,即 “http:///ws/info/” ,可以访问后台微服务。不过该微服务目前只返回一条测试数据。因此下面配置微服务使用的数据库。

部署Mongo数据库

下面部署后端API模块使用到的MongoDB。 执行命令,将镜像导入到 OpenShift。

oc import-image mongodb:3.6 --from=registry.access.redhat.com/rhscl/mongodb-36-rhel7 --confirm -n openshift

浏览器打开 https://raw.githubusercontent.com/liuxiaoyu-git/starter-guides/ocp-4.8/mongodb-template.yaml 页面,然后复制所有内容。在OpenShift控制台中切换到openshift项目,然后在控制台右上方点击“+”图标,再点击“导入YAML”进入下图页面。将复制的内容粘贴到编辑区,最后点击“创建”。 完成后再次切换到“parks-workshop”项目,然后进入“添加”页面的“数据库”。 此时可以在 Database 中找到 “MondoDB” 并进入。 确认需要根据模板创建 MongoDB 数据库。 在下图中提供创建 MongoDB 的下列参数,最后点击 Create 按钮。

Database Service Name : mongodb-nationalparks MongoDB Connection Username : mongodb MongoDB Connection Password : mongodb MongoDB Database Name: mongodb MongoDB Admin Password : mongodb 此时 OpenShift 会根据模板和参数创建 MongoDB 数据库实例,完成后可以在 “拓扑” 中看到如下结果。 拖动“mongodb-nationalparks”图标到“workshop”应用上方,根据提示按下“Shift”并释放图标。 这样就会将MongoDB数据库加入到“workshop”应用中了。这个过程会在“mongodb-nationalparks”中增加新的标签,我们可根据下图查看编辑“mongodb-nationalparks”部署配置的标签。 在“编辑标签”窗口确认已经有了“app=workshop”,然后手动加上“component=nationalparks”和“role=database”标签。 为了能让 “nationalparks” 部署中的 API 微服务能访问 MongoDB,可以先进入开发者的 “Secrets” 菜单,然后找到 “mongodb-ephemeral-parameters-xxxx” 并点击进入。 在 “Secret 详情” 页面中点击 “在工作负载中添加 Secret”。

在 “在工作负载中添加Secret” 窗口中选中 “nationalparks”,然后保存。 由于我们修改了部署配置,因此OpenShift会自动触发一次新的部署。可以在下图的 “nationalparks” 部署配置中看到会有新的Pod替代老的Pod。 在完成后可在浏览器中访问“http:///ws/data/load”地址,页面会返回“Items inserted in database: 2893”。 如果访问的是“http:///ws/data/all”,页面会返回MongoDB表中的所有数据。

[{"id":{"timestamp":1616944541,"machineIdentifier":10227801,"processIdentifier":1,"counter":911438,"time":1616944541000,"date":1616944541000,"timeSecond":1616944541},"toponymName":"Arikok National Park","name":"Arikok National Park","position":{"latitude":"12.489967","longitude":"-69.9273915"},"longitude":"-69.9273915","latitude":"12.489967","countryCode":"AW","countryName":"Aruba"}

配置健康检查

在“拓扑”页面中选中“nationalparks”,然后在右滑页面中点击“操作”-“添加健康检查”。 在“添加健康检查”页面的“就绪度探测”和“存活度(Liveness)探测”区域中为“路径”提供“/ws/healthz”,然后点击右下方的“对勾”。 在“添加健康检查”窗口中确认添加了“就绪度检测”和“存活度检测”,然后点击“创建”。 为了验证“nationalparks”部署的就绪度和存活度是有效的,可以用浏览器中访问“http:///ws/healthz/”地址,确认能得到“OK”的返回结果。

配置 Webhook

在 OpenShift 控制台的“构建”菜单中查看名为 “nationalparks” 的构建配置,然后复制 Webhook 区域中对应 “Github” 右侧的 “使用 Secret 复制 URL”。 进入自己的Github Repo,然后添加一个 Webhook。将上一步复制的地址填入 “Payload URL” 中,然后选择 Content Type 为 application/json,并且为 SSL verification 配置为 Disable。 为了验证Webhook有效性,可在 Repo 中按照下图路径找到 “Healthz.java” 文件并修改,然后将返回结果改为 “OK-OK”。 确认在 OpenShift 中名为 nationalparks 构建中会自动运行一个新的构建过程,待完成后可以再次用浏览器中访问“http:///ws/healthz/”地址,确认可以得到更新的“OK-OK”返回结果。

演示视频

视频

参考

https://redhat-scholars.github.io/openshift-starter-guides/rhs-openshift-starter-guides/index.html


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #openshift部署 #oc #create #n #OpenShift #F #httpsraw