×

在 OpenShift 中部署应用程序有多种方法。本教程探讨了使用集成的 Source-to-Image (S2I) 构建器。正如OpenShift 概念部分所述,S2I 是一个用于构建可重现的、Docker 格式的容器镜像的工具。

先决条件

在使用本教程之前,必须完成以下要求。

  1. 您已创建 ROSA 集群。

  2. 检索您的登录命令

    1. 如果您没有通过 CLI 登录,请在OpenShift 集群管理器中,单击右上角您姓名旁边的下拉箭头,然后选择**复制登录命令**。

      CLI Login
    2. 将打开一个新标签页。输入您的用户名和密码,然后选择身份验证方法。

    3. 单击**显示令牌**

    4. 复制“使用此令牌登录”下的命令。

    5. 通过在您的终端中运行复制的命令登录到命令行界面 (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>
  3. 通过运行以下命令从 CLI 创建一个新项目

    $ oc new-project ostoy-s2i

Fork OSToy 仓库

下一节重点介绍基于源代码更改触发自动构建。您必须设置一个 GitHub Webhook,以便在您将代码推送到 GitHub 仓库时触发 S2I 构建。要设置 Webhook,您必须首先 fork 该仓库

在本指南中,请将<UserName>替换为您自己的 GitHub 用户名。

使用 S2i 在您的集群上部署 OSToy

  1. 将密钥添加到 OpenShift

    此示例模拟一个.env文件,并展示了如何轻松地将这些文件直接移动到 OpenShift 环境中。甚至可以在密钥中重命名文件。在您的 CLI 中输入以下命令,将<UserName>替换为您的 GitHub 用户名

    $ oc create -f https://raw.githubusercontent.com/<UserName>/ostoy/master/deployment/yaml/secret.yaml
  2. 将 ConfigMap 添加到 OpenShift

    此示例模拟一个 HAProxy 配置文件,通常用于覆盖 OpenShift 应用程序中的默认配置。甚至可以在 ConfigMap 中重命名文件。

    在您的 CLI 中输入以下命令,将<UserName>替换为您的 GitHub 用户名

    $ oc create -f https://raw.githubusercontent.com/<UserName>/ostoy/master/deployment/yaml/configmap.yaml
  3. 部署微服务

    您必须首先部署微服务,以确保 SERVICE 环境变量可从 UI 应用程序获得。此处使用--context-dir仅构建 git 仓库中microservice目录中定义的应用程序。使用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.
  4. 检查微服务的状态

    在继续下一步之前,我们应该确保微服务已创建并正在正确运行,方法是运行以下命令

    $ 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 检查此项。

  5. 部署前端 UI

    该应用程序已被设计为依赖于多个环境变量来定义外部设置。之后附加先前创建的密钥和 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.
  6. 更新部署

    更新部署以使用“重新创建”(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"}]'
  7. 设置存活性探针(Liveness Probe)

    在部署中创建存活性探针,以确保如果应用程序内部出现异常,则会重新启动 Pod。在命令行界面输入以下内容:

    $ oc set probe deployment ostoy --liveness --get-url=http://:8080/health
  8. 将 Secret、ConfigMap 和持久卷附加到部署

    运行以下命令以附加您的 Secret、ConfigMap 和持久卷:

    1. 附加 Secret

      $ oc set volume deployment ostoy --add \
          --secret-name=ostoy-secret \
          --mount-path=/var/secret
    2. 附加 ConfigMap

      $ oc set volume deployment ostoy --add \
          --configmap-name=ostoy-config \
          -m /var/config
    3. 创建并附加持久卷

      $ oc set volume deployment ostoy --add \
          --type=pvc \
          --claim-size=1G \
          -m /var/demo_files
  9. 将 UI 应用程序公开为 OpenShift 路由

    运行以下命令将其部署为使用包含的 TLS 通配符证书的 HTTPS 应用程序:

    $ oc create route edge --service=ostoy --insecure-policy=Redirect
  10. 使用以下方法浏览您的应用程序:

    • 运行以下命令将打开一个包含 OSToy 应用程序的网页浏览器:

      $ python -m webbrowser "$(oc get route ostoy -o template --template='https://{{.spec.host}}')"
    • 您可以通过运行以下命令获取应用程序的路由,并将路由复制粘贴到您的浏览器中:

      $ oc get route