Oracle Cloud Infrastructure Kubernetes Engine 上扩展和优化 Jenkins

Jenkins 是 CI/CD 系统,开发人员仍然使用它来自动验证、构建和部署代码,因此他们只能专注于提供新功能。

随着 Kubernetes 的发布,分布式和无共享架构逐渐成为常态,以至于所有最新的 CI/CD 系统都部署在 Kubernetes 上。至于 Jenkins,对于大型组织和开发团队来说,控制器/代理架构可能不够可扩展,但由于社区的努力,可以容器化 Jenkins 并以云原生方式部署它。

您可以在 Oracle Cloud Infrastructure Kubernetes EngineOCI Kubernetes Engine 或 OKE)上托管 Jenkins,以集中构建自动化并随着软件项目的增长进行扩展。通过在 OKE 上实施可扩展的 Jenkins,开发人员将能够敏捷地开发新服务,并轻松扩展其 CI/CD 管道。

体系结构

此高级参考体系结构显示 OKE 上多个 Jenkins 部署的示例。通过在 OKE as a Service 上部署 Jenkins,可以根据需要进行扩展。

每个 Jenkins 控制器云池都连接了一个持久性卷,以保留管道历史记录以及团队安装的其他插件。每次在结束时自动触发和销毁管道作业时,都会创建 Jenkins 代理。

每个 Jenkins 实例可以分别通过负载平衡器或使用 Kubernetes 入站公开。

下图说明了此引用体系结构。



oci-jenkins-oke-arch-oracle.zip

该体系结构具有以下组件:

  • 区域

    Oracle Cloud Infrastructure 区域是包含一个或多个数据中心(称为可用性域)的本地化地理区域。地区独立于其他地区,远距离可以把它们分开(跨越国家甚至大陆)。

  • 可用性域

    可用性域是区域中的独立数据中心。每个可用性域中的物理资源与其他可用性域中的资源隔离,从而提供容错能力。可用性域不共享电源或冷却设备等基础设施,也不共享内部可用性域网络。因此,一个可用性域出现故障不会影响区域中的其他可用性域。

  • 虚拟云网络 (VCN) 和子网

    VCN 是一个可定制的软件定义网络,您可以在 Oracle Cloud Infrastructure 区域中设置。与传统的数据中心网络一样,VCN 允许您控制您的网络环境。VCN 可以具有多个不重叠的 CIDR 块,您可以在创建 VCN 后更改这些块。您可以将 VCN 划分为子网,子网可以限定为区域或可用性域。每个子网都包含一系列不与 VCN 中的其他子网重叠的连续地址。可以在创建后更改子网的大小。子网可以是公共子网,也可以是专用子网。

  • 负载平衡器

    Oracle Cloud Infrastructure Load Balancing 服务提供从单个入口点到后端多个服务器的自动流量分配。

  • 安全列表

    对于每个子网,可以创建安全规则来指定必须允许进出子网的通信的源、目标和类型。

  • Kubernetes 引擎

    Oracle Cloud Infrastructure Kubernetes EngineOCI Kubernetes EngineOKE )是一项完全托管、可扩展的高可用性服务,可用于将容器化应用部署到云中。您可以指定应用所需的计算资源,Kubernetes Engine 在现有租户的 Oracle Cloud Infrastructure 上预配这些资源。OKE 使用 Kubernetes 跨主机集群自动部署、扩展和管理容器化应用。

推荐

使用以下建议作为起点。您的要求可能与此处所述的体系结构不同。
  • VCN

    创建 VCN 时,请根据您计划附加到 VCN 中子网的资源数量,确定所需的 CIDR 块数和每个块的大小。使用标准专用 IP 地址空间内的 CIDR 块。

    选择不与要设置专用连接的任何其他网络(在 Oracle Cloud Infrastructure 、您的内部部署数据中心或其他云提供商中)重叠的 CIDR 块。

    创建 VCN 后,您可以更改、添加和删除其 CIDR 块。

    设计子网时,请考虑流量和安全要求。将特定层或角色中的所有资源附加到可以用作安全边界的同一子网。

  • 安全

    使用 Oracle Cloud Guard 主动监视和维护 Oracle Cloud Infrastructure 中 OCI 资源的安全性。Cloud Guard 使用检测器配方,您可以定义这些配方来检查资源是否存在安全漏洞,以及监视操作员和用户是否有风险活动。检测到任何配置错误或不安全活动时,Cloud Guard 会根据您可以定义的响应器配方推荐更正操作并协助执行这些操作。

    对于需要最高安全性的资源,Oracle 建议您使用安全区域。安全区域是与 Oracle 定义的基于优秀实践的安全策略配方关联的区间。例如,安全区域中的资源必须无法从公共 Internet 访问,并且必须使用客户管理的密钥对它们进行加密。在安全区域中创建和更新资源时,OCI 会根据安全区域配方中的策略验证操作,并拒绝违反任何策略的操作。

  • 负载平衡器带宽

    创建负载平衡器时,您可以选择提供固定带宽的预定义配置,也可以指定定制(灵活)配置,在其中设置带宽范围并允许服务根据流量模式自动扩展带宽。通过任一方法,您都可以在创建负载平衡器后随时更改配置。

  • Oracle Cloud Infrastructure Kubernetes Engine 和计算配置

    至少在 OCI Kubernetes Engine 上部署两个节点池:一个用于 Jenkins 控制器,另一个用于 Jenkins 代理。

    为了节省成本并优化整个解决方案,建议使用 VM.Standard.A1。Jenkins 控制器的弹性实例,因为 Jenkins 与 ARM 实例完全兼容。对于代理节点池,建议使用可抢占实例,因为管道作业通常寿命较短且容错。

  • Oracle Cloud Infrastructure 注册表

    Oracle Cloud Infrastructure Registry 是一个符合 OCI 标准的专用容器存储库,用于托管映像。在此体系结构中,它是可选的,可用于托管您自己的 Jenkins 定制映像并安装所有必要的插件。建议创建定制 Jenkins 控制器映像,以强制实施安全性并将所有常用插件打包在一个容器映像中。

注意事项

部署此引用体系结构时,请考虑以下几点。

  • 性能和可扩展性

    通过使用 Kubernetes,随着开发团队的增长或缩小,可以轻松扩展 Jenkins 控制器和代理。此外,由于每次运行管道作业时都会创建代理云池,因此可以在每个管道基上定制这些云池使用的资源。

  • 可用性

    为了尽可能提高可用性,建议在不同的可用性或容错域中预配多个 OKE 节点。此外,为了保护 Jenkins 免受自愿和非自愿中断,可以使用标准的 Kubernetes 机制,例如 pod 中断预算和 pod 反关联性。

  • 成本

    此架构的目的是在 OKE 上使用 Jenkins 时尽可能降低成本。可以将 ARM 节点用于 Jenkins 控制器,这需要花费四分之一的灵活计算实例。至于 Jenkins 代理,可抢占实例节点使客户能够节省一半的预算。

确认

  • Author: Alberto Campagna
  • Contributor: Marta Tolosa