17.3. 教程:OpenShift 概念
17.3.1. Source-to-Image(S2I)
Source-to-Image (S2I)是一个工具包和工作流,用于从源代码构建可重复生成的容器镜像。S2I 通过将源代码插入到容器镜像中,并让容器准备源代码来生成可随时运行的镜像。通过创建自装构建器镜像,您可以对构建环境进行版本控制和控制,就像使用容器镜像来版本运行时环境一样。
17.3.1.1. 它如何工作
对于 Ruby 等动态语言,构建时间和运行时环境通常相同。假设已安装了 Ruby、Bundler、Rake、Apache、GCC 和运行 Ruby 应用程序所需的所有其他软件包,构建器镜像执行以下步骤:
- 构建器镜像通过注入已知目录中的应用源启动一个容器。
- 容器进程将该源代码转换为适当的可运行设置。例如,它会安装带有 Bundler 的依赖项,并将源代码移到 Apache 预先配置的目录中,以查找 Ruby 配置文件。
- 然后,它会提交新容器,并将镜像入口点设置为将 Apache 启动为托管 Ruby 应用的脚本。
对于编译语言,如 C、C++、Go 或 Java,编译所需的依赖项可能会超过运行时工件的大小。为了保持运行时镜像小,S2I 支持多步骤构建过程,其中会创建一个二进制工件(如可执行文件)在第一个构建器镜像中创建,提取并注入到仅将可执行程序放入正确的位置的第二个运行时镜像中。
例如,要为 Tomcat 和 Maven 创建可重复生成的构建管道:
- 创建包含 OpenJDK 和 Tomcat 的构建器镜像,它应该注入一个 WAR 文件。
- 创建第一个镜像 Maven 上的层和其他标准依赖项的第二个镜像,并且希望注入一个 Maven 项目。
- 使用 Java 应用程序源和 Maven 镜像启动 S2I,以创建所需的应用 WAR。
- 使用上一步中的 WAR 文件以及初始 Tomcat 镜像来创建运行时镜像,第二次启动 S2I。
通过将构建逻辑放在镜像中,并将镜像合并到多个步骤中,运行时环境将接近构建环境,而无需将构建工具部署到生产环境。
17.3.1.2. S2I 优点
- 可重复生成性
- 允许在容器镜像内封装构建环境,并为调用者定义注入源代码的简单接口。可重复生成的构建是在容器化基础架构中实现安全更新和持续集成的关键要求,构建器镜像有助于确保可重复性,并且能够交换运行时间。
- 灵活性
- 任何可以在 Linux 上运行的现有构建系统都可以在容器内运行,每个单独的构建器也可以是更大管道的一部分。处理应用源代码的脚本可以注入到构建器镜像中,允许作者调整现有镜像以启用源处理。
- 速度
- S2I 鼓励作者在单一镜像层中代表应用程序,而不是在单个 Dockerfile 中构建多个层。这会节省创建和部署期间的时间,并可更好地控制最终镜像的输出。
- 安全性
- 在没有许多容器正常操作控制的情况下运行 Dockerfile。它们通常以 root 用户身份运行,并有权访问容器网络。在单一容器中启动构建后,S2I 可以控制构建器镜像可以使用哪些权限和特权。与 OpenShift 等平台一致,S2I 允许管理员控制开发人员在构建时具有哪些特权。
17.3.2. Routes
OpenShift 路由通过主机名公开服务,以便外部客户端可根据名称访问该服务。在 OpenShift 上创建 Route
对象时,它由内置 HAProxy 负载均衡器提取,以公开请求的服务,并使其通过给定配置在外部可用。
与 Kubernetes Ingress
对象类似,红帽创建了路线,以填写需求,然后为社区提供设计原则,这对 Ingress
设计有很大影响。路由具有一些额外的功能,如下图中所示:
功能 | OpenShift 上的入口 | OpenShift 上的路由 |
---|---|---|
标准 Kubernetes 对象 | X | |
外部访问服务 | X | X |
持久性(sticky)会话 | X | X |
负载平衡策略(如循环) | X | X |
速率限制和节流 | X | X |
IP 白名单 | X | X |
TLS 边缘终止以提高安全性 | X | X |
TLS 重新加密以提高安全性 | X | |
TLS passhtrough 用于提高安全性 | X | |
多个加权后端(分割流量) | X | |
生成基于模式的主机名 | X | |
通配符域 | X |
主机名的 DNS 解析与路由分开处理。您的管理员可能已配置了一个云域,该域将始终正确地解析到路由器,或者单独修改不相关的主机名 DNS 记录以解析到路由器。
单个路由可以通过在其注解中提供特定的配置来覆盖一些默认值。
其他资源
17.3.3. 镜像流
镜像流存储标签到镜像的映射,元数据覆盖会在流中标记镜像时应用,以及对 registry 上 Docker 镜像存储库的可选引用。
17.3.3.1. 镜像流的好处
通过使用镜像流,可以更轻松地更改容器镜像的标签。否则,要手动更改标签,您必须下载镜像,在本地进行修改,然后推送它。通过手动更改标签来提升应用程序,然后更新部署对象需要多个步骤。
使用镜像流,您将上传容器镜像一次,然后在 OpenShift 中内部管理其虚拟标签。在一个项目中,您可以使用 developer 标签,且仅在内部更改引用,而生产环境中,您可以使用 production 标签并在内部管理它。您不必处理 registry。
您还可以将镜像流与部署配置结合使用,来设置触发器,该触发器将在新镜像出现或标签更改其引用后立即启动部署。
17.3.4. Builds
构建 (build) 是将输入参数转换为结果对象的过程。此过程最常用于将输入参数或源代码转换为可运行的镜像。BuildConfig
对象是整个构建过程的定义。
OpenShift Container Platform 通过从构建镜像创建 Docker 格式容器并将其推送到容器镜像 registry 来利用 Kubernetes。
构建对象共享共同特征:
- 构建的输入
- 完成构建过程的要求
- 记录构建过程
- 从成功构建中发布资源
- 发布构建的最终状态
构建会使用资源限制,具体是指定资源限值,如 CPU 使用量、内存使用量,以及构建或 Pod 执行时间。
其他资源