18.11. 教程:S2I 部署


在 OpenShift 中部署应用的方法有几种。本教程介绍了使用集成的 Source-to-Image (S2I)构建器。如 OpenShift 概念部分中所述,S2I 是用于构建可重复生成的 Docker 格式容器镜像的工具。

18.11.1. 前提条件

必须先完成以下要求,然后才能使用此教程。

  1. 您已创建了 ROSA 集群。
  2. 检索您的登录命令

    1. 如果您没有通过 CLI 登录,在 OpenShift Cluster Manager 中,单击右上角的名称旁边的下箭头,然后选择 Copy Login Command

      CLI 登录
    2. 此时会打开一个新标签页。输入您的用户名和密码,然后选择身份验证方法。
    3. Display Token
    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

18.11.2. 对 OSToy 存储库进行分叉

下面的部分着重根据源代码的更改触发自动构建。您必须将 GitHub Webhook 设置为在将代码推送到 GitHub 仓库时触发 S2I 构建。要设置 webhook,您必须首先 fork 仓库

注意

<UserName > 替换为本指南中的以下 URL 的 GitHub 用户名。

18.11.3. 使用 S2i 在集群中部署 OSToy

  1. 将 secret 添加到 OpenShift

    该示例模拟 .env 文件,并显示如何直接将它们直接移到 OpenShift 环境中。文件甚至可以在 Secret 中重命名。在 CLI 中输入以下命令,将 < UserName&gt; 替换为您的 GitHub 用户名:

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

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

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

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

    您必须首先部署微服务,以确保 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.

  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

    该应用设计为依赖多个环境变量来定义外部设置。之后附加之前创建的 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.

  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. 设置存活度探测

    在 Deployment 上创建一个 Liveness Probe,以确保在应用程序中不健康 pod 时 pod 会被重启。在 CLI 中输入以下内容:

    $ oc set probe deployment ostoy --liveness --get-url=http://:8080/health
  8. 将 Secret、ConfigMap 和 PersistentVolume 附加到 Deployment

    运行以下命令附加 secret、ConfigMap 和 PersistentVolume:

    1. Attach Secret

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

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

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

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

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

    • 运行以下命令打开带有 OSToy 应用程序的 Web 浏览器:

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

      $ oc get route
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.