《OpenShift 4.x HOL教程汇总》
说明:本文使用的是 OpenShift 4.9 控制台部署一个多层应用的所有资源,其它 OpenShift 版本的控制台可能会有少量差别。
文章目录
准备环境和项目
导入 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