使用集群自动缩放在 OCI Kubernetes Engine 上部署 GitLab 运行者

Oracle Cloud Infrastructure (OCI) Kubernetes Engine 上部署 GitLab Runners,具有自动缩放功能,可以根据负载自动扩展 worker 节点,从而在 CI/CD 管道中平稳运行作业。

体系结构

此架构显示部署在 OCI Kubernetes Engine (OKE) 集群中的 GitLab Runners。

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

下面是 git-lab-runner-kubernetes.png 的说明
插图 git-lab-runner-kubernetes.png 的说明

git-lab-runner-kubernetes-oracle.zip

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

  • 区域

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

  • 可用性域

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

  • 容错域

    容错域是可用性域内的一组硬件和基础设施。每个可用性域都有三个容错域,它们具有独立的电源和硬件。在多个容错域之间分配资源时,应用可以承受容错域内的物理服务器故障、系统维护和电源故障。

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

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

  • 服务网关

    通过服务网关,您可以从 VCN 访问其他服务,例如 Oracle Cloud Infrastructure Object Storage 。从 VCN 到 Oracle 服务的流量通过 Oracle 网络结构传输,不会通过互联网传输。

  • Kubernetes 引擎

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

  • Cloud Guard

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

  • 安全区域

    安全区域从一开始就实施加密数据和阻止公共访问整个区间的网络等策略,从而确保 Oracle 的安全优秀实践。安全区域与同名的区间关联,并包括安全区域策略或适用于该区间及其子区间的“配方”。无法将标准区间添加或移动到安全区域区间。

  • Kubernetes 集群自动缩放器

    Kubernetes 集群自动缩放器根据资源请求自动增加或减少节点池的大小,而不是节点池中节点的资源利用率。

  • OKE 服务

    Kubernetes (OKE) 服务是一个抽象,它定义了一组逻辑云池以及访问它们的策略。服务所针对的云池集通常由选择器确定。Kubernetes 服务管理自动缩放。

  • OKE worker 节点池

    Kubernetes worker 节点是运行 Kubernetes 集群中容器化应用的 worker 机器。每个集群至少有一个 Worker 节点。

    Kubernetes (OKE) worker 节点池是集群中所有具有相同配置的 worker 节点的子集。通过节点池,可以在具有不同配置的群集内创建计算机池。例如,您可以在集群中将一个节点池创建为虚拟机,将另一个节点池创建为裸金属机。群集必须至少有一个节点池,但节点池不需要包含任何 worker 节点。

    节点池中的 worker 节点连接到 VCN 中的 worker 节点子网。

  • Internet 网关

    通过互联网网关,可以在 VCN 中的公共子网与公共互联网之间进行流量传输。

  • 网络地址转换 (NAT) 网关

    通过 NAT 网关,VCN 中的专用资源可以访问 Internet 上的主机,而不会向传入的 Internet 连接公开这些资源。

推荐

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

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

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

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

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

    使用区域子网。

  • 安全

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

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

  • Cloud Guard

    克隆和定制 Oracle 提供的默认配方,以创建定制检测器和响应器配方。通过这些配方,您可以指定哪种类型的安全违规会生成警告,以及允许对它们执行哪些操作。例如,您可能希望检测可见性设置为公共的对象存储桶。

    在租户级别应用 Cloud Guard,以涵盖最广泛的范围并减轻维护多个配置的管理负担。

    还可以使用“托管列表”功能将某些配置应用于检测器。

  • 网络安全组 (NSG)

    可以使用 NSG 定义一组适用于特定 VNIC 的入站和出站规则。我们建议使用 NSG 而非安全列表,因为 NSG 使您能够将 VCN 的子网体系结构与应用的安全要求分开。

  • OCI Kubernetes 引擎

    尽管该操作员支持任何通用 Kubernetes 集群,但此架构使用 Kubernetes Engine 集群。这些集群有三个 worker 节点,分布在不同的可用性和容错域中。显示的集群的 Worker 节点分布在不同的物理主机上。在集群中至多可以创建 1000 个节点。

  • 安全区域

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

  • 计算服务

    选择具有适当 OCPU 和内存组合的配置,并根据需要为 Kubernetes 集群节点预配本地 NVMe 和块存储。

注意事项

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

  • 性能

    集群自动缩放基于部署资源预订,您可以通过编辑 gitlab-ci.yaml 文件来控制作业资源预订。

  • 安全

    使用策略来限制谁可以访问贵公司拥有的 Oracle Cloud Infrastructure (OCI) 资源以及如何访问这些资源。

    OCI Kubernetes EngineOCI Identity and Access Management 集成,可通过原生 OCI 身份功能轻松进行身份验证。

    使用以下变量控制作业的资源预订:

    KUBERNETES_CPU_REQUEST: 1  
    KUBERNETES_MEMORY_REQUEST: 4000M
  • 可扩展性

    您可以通过更新 Kubernetes 集群中的 worker 节点数来扩展应用,具体取决于负载。同样,您可以通过减少集群中的 worker 节点数来进行扩展。在 Kubernetes 集群上创建服务时,可以创建负载平衡器以在分配给该服务的节点之间分配服务流量。集群自动缩放基于部署资源预订,您可以通过编辑 gitlab-ci.yaml 文件来控制预订。

    注意:

    gitlab-ci.yaml 文件中使用参数进行作业资源预订时,不应超过为 GitLab Runner 定义的最大允许预订数(作为 locals.tf 文件中的以下行的一部分):
    cpu_request_overwrite_max_allowed = "1"        
    memory_request_overwrite_max_allowed = "4096M"
  • 成本

    使用 OCI Kubernetes Engine 是免费的,使用 Oracle 容器注册表是免费的。Kubernetes 集群中的节点按与配置相同的任何其他计算实例相同的费率收费。

部署

使用 Terraform 代码,您可以部署具有所有从属资源(网络、 worker 节点池)的 OCI Kubernetes 引擎 (OKE) 集群,部署集群自动缩放和 GitLab Runners。该代码在 Oracle Cloud Infrastructure Resource Manager 中作为示例堆栈提供。您还可以从 GitHub 下载代码,并根据需要对其进行自定义。
  • 使用 Oracle Cloud Infrastructure Resource Manager 中的示例堆栈进行部署:
    1. 转至 部署到 Oracle Cloud

      如果您尚未登录,请输入租户和用户凭据。

    2. 选择要部署堆栈的区域。
    3. 按照屏幕上的提示和说明创建堆栈。
    4. 创建堆栈后,单击 Terraform 操作,然后选择计划
    5. 等待作业完成,然后查看计划。

      要进行任何更改,请返回到“堆栈详细信息”页,单击编辑堆栈,然后进行所需的更改。然后,再次运行计划操作。

    6. 如果不需要进一步更改,请返回“堆栈详细信息”页面,单击 Terraform 操作,然后选择应用
  • 使用 GitHub 中的 Terraform 代码部署:
    1. 转至 GitHub
    2. 将资料档案库克隆或下载到本地计算机。
    3. 按照 README 文档中的说明进行操作。

浏览更多

了解有关 Oracle Cloud Infrastructure (OCI) 和 Kubernetes 的更多信息。

查看Oracle Cloud Infrastructure 优秀实践框架解决方案手册以了解优秀实践。

查看以下其他 OCI 和 GitLab 资源:

确认

  • 作者:Chandrashekar Avadhani,Andrei Ilas
  • 贡献者:Ben Romine,Lukasz Feldman