18.11. 教程:S2I 部署
在 OpenShift 中部署应用的方法有几种。本教程介绍了使用集成的 Source-to-Image (S2I)构建器。如 OpenShift 概念部分中所述,S2I 是用于构建可重复生成的 Docker 格式容器镜像的工具。
18.11.1. 前提条件
必须先完成以下要求,然后才能使用此教程。
- 您已创建了 ROSA 集群。
检索您的登录命令
如果您没有通过 CLI 登录,在 OpenShift Cluster Manager 中,单击右上角的名称旁边的下箭头,然后选择 Copy Login Command。
- 此时会打开一个新标签页。输入您的用户名和密码,然后选择身份验证方法。
- 点 Display Token
- 将命令复制到"使用此令牌登录"。
在终端中运行复制的命令,登录到命令行界面(CLI)。您应该看到类似如下的内容:
$ oc login --token=RYhFlXXXXXXXXXXXX --server=https://api.osd4-demo.abc1.p1.openshiftapps.com:6443
输出示例
Logged into "https://api.myrosacluster.abcd.p1.openshiftapps.com:6443" as "rosa-user" using the token provided. You don't have any projects. You can try to create a new project, by running oc new-project <project name>
运行以下命令,通过 CLI 创建新项目:
$ oc new-project ostoy-s2i
18.11.2. 对 OSToy 存储库进行分叉
下面的部分着重根据源代码的更改触发自动构建。您必须将 GitHub Webhook 设置为在将代码推送到 GitHub 仓库时触发 S2I 构建。要设置 webhook,您必须首先 fork 仓库。
将 <UserName
> 替换为本指南中的以下 URL 的 GitHub 用户名。
18.11.3. 使用 S2i 在集群中部署 OSToy
将 secret 添加到 OpenShift
该示例模拟
.env
文件,并显示如何直接将它们直接移到 OpenShift 环境中。文件甚至可以在 Secret 中重命名。在 CLI 中输入以下命令,将 <UserName>
; 替换为您的 GitHub 用户名:$ oc create -f https://raw.githubusercontent.com/<UserName>/ostoy/master/deployment/yaml/secret.yaml
将 ConfigMap 添加到 OpenShift
示例模拟 HAProxy 配置文件,通常用于覆盖 OpenShift 应用中的默认配置。文件甚至可以在 ConfigMap 中重命名。
在 CLI 中输入以下命令,将 <
UserName>
; 替换为您的 GitHub 用户名:$ oc create -f https://raw.githubusercontent.com/<UserName>/ostoy/master/deployment/yaml/configmap.yaml
部署微服务
您必须首先部署微服务,以确保 SERVICE 环境变量可从 UI 应用使用。此处使用
--context-dir
仅构建 git 存储库中的微服务
目录中定义的应用程序。通过使用app
标签,我们可以确保 UI 应用程序和微服务都在 OpenShift UI 中分组。在 CLI 中运行以下命令以创建微服务,将 <UserName>
替换为您的 GitHub 用户名:$ oc new-app https://github.com/<UserName>/ostoy \ --context-dir=microservice \ --name=ostoy-microservice \ --labels=app=ostoy
输出示例
--> Creating resources with label app=ostoy ... imagestream.image.openshift.io "ostoy-microservice" created buildconfig.build.openshift.io "ostoy-microservice" created deployment.apps "ostoy-microservice" created service "ostoy-microservice" created --> Success Build scheduled, use 'oc logs -f buildconfig/ostoy-microservice' to track its progress. Application is not exposed. You can expose services to the outside world by executing one or more of the commands below: 'oc expose service/ostoy-microservice' Run 'oc status' to view your app.
检查微服务的状态
在继续下一步之前,我们应当通过运行以下命令确保已创建微服务并正确运行:
$ oc status
输出示例
In project ostoy-s2i on server https://api.myrosacluster.g14t.p1.openshiftapps.com:6443 svc/ostoy-microservice - 172.30.47.74:8080 dc/ostoy-microservice deploys istag/ostoy-microservice:latest <- bc/ostoy-microservice source builds https://github.com/UserName/ostoy on openshift/nodejs:14-ubi8 deployment #1 deployed 34 seconds ago - 1 pod
等待它已被成功部署。您还可以通过 Web UI 对其进行检查。
部署前端 UI
该应用设计为依赖多个环境变量来定义外部设置。之后附加之前创建的 Secret 和 ConfigMap,以及创建 PersistentVolume。在 CLI 中输入以下内容:
$ oc new-app https://github.com/<UserName>/ostoy \ --env=MICROSERVICE_NAME=OSTOY_MICROSERVICE
输出示例
--> Creating resources ... imagestream.image.openshift.io "ostoy" created buildconfig.build.openshift.io "ostoy" created deployment.apps "ostoy" created service "ostoy" created --> Success Build scheduled, use 'oc logs -f buildconfig/ostoy' to track its progress. Application is not exposed. You can expose services to the outside world by executing one or more of the commands below: 'oc expose service/ostoy' Run 'oc status' to view your app.
更新部署
更新部署以使用 "Recreate" 部署策略(而不是默认的
RollingUpdate
)来与持久性卷保持一致。在这里,PV 由 EBS 支持,因此只支持RWO
方法。如果在没有所有现有 pod 被终止的情况下更新部署,它可能无法调度新 pod,并为 PV 创建 PVC,因为它仍然绑定到现有 pod。如果您使用 EFS,则不必更改它。$ oc patch deployment ostoy --type=json -p \ '[{"op": "replace", "path": "/spec/strategy/type", "value": "Recreate"}, {"op": "remove", "path": "/spec/strategy/rollingUpdate"}]'
设置存活度探测
在 Deployment 上创建一个 Liveness Probe,以确保在应用程序中不健康 pod 时 pod 会被重启。在 CLI 中输入以下内容:
$ oc set probe deployment ostoy --liveness --get-url=http://:8080/health
将 Secret、ConfigMap 和 PersistentVolume 附加到 Deployment
运行以下命令附加 secret、ConfigMap 和 PersistentVolume:
Attach Secret
$ oc set volume deployment ostoy --add \ --secret-name=ostoy-secret \ --mount-path=/var/secret
Attach ConfigMap
$ oc set volume deployment ostoy --add \ --configmap-name=ostoy-config \ -m /var/config
创建并附加 PersistentVolume
$ oc set volume deployment ostoy --add \ --type=pvc \ --claim-size=1G \ -m /var/demo_files
将 UI 应用公开为 OpenShift Route
运行以下命令,将其部署为使用包含的 TLS 通配符证书的 HTTPS 应用程序:
$ oc create route edge --service=ostoy --insecure-policy=Redirect
使用以下方法浏览应用程序:
运行以下命令打开带有 OSToy 应用程序的 Web 浏览器:
$ python -m webbrowser "$(oc get route ostoy -o template --template='https://{{.spec.host}}')"
您可以获取应用程序的路由,并运行以下命令来将路由复制并粘贴到浏览器中:
$ oc get route