欢迎访问深圳敏捷云计算科技有限公司!

在甲骨文云 OCI 容器引擎中部署具有自动伸缩功能的 GitLab Runner:高效 Kubernetes 集群管理新体验

2024-03-05 原创文章

在 Oracle 容器引擎的 Kubernetes 群集中部署具有自动伸缩功能的 GitLab Runner,可根据 CI/CD 管道中的负载自动调整工作节点的规模,以确保任务的顺利运行。


架构

此架构展示了在 Oracle Cloud Infrastructure 上的 Oracle 容器引擎为 Kubernetes 群集中部署的 GitLab Runner。以下图表阐释了这一参考架构。

架构包含以下组件:

区域(Region)

  • Oracle Cloud Infrastructure 区域是一个地理上局限的地区,包含一个或多个被称为可用性域的数据中心。区域与其他区域相互独立,它们之间可能相隔很远(跨越国家甚至大洲)。


可用性域(Availability Domains)

  • 可用性域是区域内独立、自主的数据中心。每个可用性域内的物理资源与其他可用性域的资源隔离,从而提供故障容忍性。可用性域不共享诸如电源或冷却系统,或内部可用性域网络的基础设施。因此,一个可用性域的故障不太可能影响该区域内的其他可用性域。


故障域(Fault Domains)

  • 故障域是可用性域内硬件和基础设施的分组。每个可用性域拥有三个带有独立电源和硬件的故障域。当您在多个故障域中分布资源时,您的应用程序能够容忍故障域内的物理服务器故障、系统维护和电源故障。


虚拟云网络(VCN)和子网

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


服务网关(Service Gateway)

  • 服务网关提供从 VCN 到其他服务(如 Oracle Cloud Infrastructure 对象存储)的访问。从 VCN 到 Oracle 服务的流量通过 Oracle 网络结构传输,不经过互联网。


Kubernetes 的容器引擎(Container Engine for Kubernetes)

  • Oracle Cloud Infrastructure 容器引擎为 Kubernetes 是一个完全托管、可伸缩且高度可用的服务,您可以使用它将容器化应用程序部署到云中。您指定应用程序所需的计算资源,容器引擎为 Kubernetes 将它们预置在现有的 Oracle Cloud Infrastructure 租户中。容器引擎为 Kubernetes 使用 Kubernetes 自动化跨主机集群的容器化应用程序的部署、扩展和管理。


云守护(Cloud Guard)

  • 您可以使用 Oracle Cloud Guard 监控和维护 Oracle Cloud Infrastructure 中资源的安全。Cloud Guard 使用您可以定义的检测器配方来检查资源的安全弱点,并监控操作者和用户的高风险活动。当检测到任何配置错误或不安全活动时,Cloud Guard 会推荐纠正措施,并基于您可以定义的响应者配方协助采取这些措施。


安全区域(Security Zone)

  • 安全区域从一开始就通过实施诸如加密数据和阻止网络公共访问等政策,确保 Oracle 的安全最佳实践。安全区域与同名的分区关联,并包括适用于该分区及其子分区的安全区域政策或“配方”。您不能将标准分区添加或移动到安全区域分区。


Kubernetes 集群自动伸缩器(Kubernetes Cluster Autoscaler)

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


OKE 服务(OKE Services)

  • Kubernetes (OKE) 服务是定义一组逻辑上的 Pods 和访问它们的策略的抽象。服务所针对的 Pods 组通常由选择器决定。Kubernetes 服务管理自动伸缩。


OKE 工作节点池(OKE Workers Node Pool)

  • Kubernetes (OKE) 工作节点池是集群内具有相同配置的工作节点的子集。节点池允许您在集群内创建具有不同配置的机器池。例如,您可能在集群中创建一个节点池作为虚拟机,另一个节点池作为裸机。集群必须至少有一个节点池,但节点池不必包含任何工作节点。
  • 节点池中的工作节点连接到 VCN 中的工作节点子网。


互联网网关(Internet Gateway)

  • 互联网网关允许 VCN 中的公共子网与公共互联网之间的流量交换。


网络地址转换(NAT)网关

  • NAT 网关使 VCN 中的私有资源能够访问互联网上的主机,而不将这些资源暴露给传入的互联网连接。



推荐方案

使用以下建议作为起点。您的需求可能与此处描述的架构不同。


虚拟云网络(VCN)

  • 创建 VCN 时,根据您计划连接到 VCN 子网的资源数量,确定所需的 CIDR 块数量和每个块的大小。使用标准私有 IP 地址空间内的 CIDR 块。
  • 选择不与任何其他网络(Oracle Cloud Infrastructure、您的本地数据中心或其他云提供商)重叠的 CIDR 块,以便您打算设置私有连接。
  • 创建 VCN 后,您可以更改、添加和移除其 CIDR 块。
  • 设计子网时,考虑您的流量流向和安全需求。将特定层或角色内的所有资源连接到相同的子网,这可以作为安全边界。
  • 使用区域性子网。


安全性

  • 主动使用 Oracle Cloud Guard 来监控和维护 Oracle Cloud Infrastructure 中资源的安全。Cloud Guard 使用您可以定义的检测器配方来检查资源的安全弱点,并监控操作者和用户的高风险活动。当检测到任何配置错误或不安全活动时,Cloud Guard 会推荐纠正措施,并基于您可以定义的响应者配方协助采取这些措施。
  • 对于需要最高安全性的资源,Oracle 建议您使用安全区域。安全区域是一个与 Oracle 定义的基于最佳实践的安全政策配方相关联的分区。例如,安全区域中的资源不得从公共互联网访问,且必须使用客户管理的密钥加密。在安全区域中创建和更新资源时,Oracle Cloud Infrastructure 会根据安全区域配方中的政策验证操作,并拒绝违反任何政策的操作。


云守护(Cloud Guard)

  • 克隆并自定义 Oracle 提供的默认配方,创建自定义检测器和响应者配方。这些配方使您能够指定哪些类型的安全违规行为会生成警告,以及允许对其执行哪些操作。例如,您可能想要检测设置为公共可见性的对象存储桶。
  • 在租户级别应用 Cloud Guard,以覆盖最广泛的范围并减少维护多个配置的管理负担。
  • 您还可以使用“托管列表”功能将特定配置应用于检测器。


网络安全组(NSGs)

  • 您可以使用 NSGs 定义一组适用于特定 VNIC 的入站和出站规则。我们推荐使用 NSGs 而不是安全列表,因为 NSGs 允许您将 VCN 的子网架构与应用程序的安全要求分开。


Kubernetes 的容器引擎

  • 虽然运营商支持任何通用 Kubernetes 集群,但此架构使用 Oracle 容器引擎的 Kubernetes 集群。这些集群在不同的可用性和故障域中有三个工作节点。所展示的集群在不同的物理主机上分布有工作节点。您可以在集群中创建多达 1000 个节点。


安全

区域(Security Zones)

  • 对于需要最高安全性的资源,Oracle 建议您使用安全区域。安全区域是一个与 Oracle 定义的基于最佳实践的安全政策配方相关联的分区。例如,安全区域中的资源不得从公共互联网访问,且必须使用客户管理的密钥加密。在安全区域中创建和更新资源时,Oracle Cloud Infrastructure 会根据安全区域配方中的政策验证操作,并拒绝违反任何政策的操作。

计算(Compute)

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



考虑因素

部署此参考架构时,请考虑以下几点:


性能

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

安全性

  • 使用策略限制谁可以访问您公司的哪些 Oracle Cloud Infrastructure (OCI) 资源以及如何访问。
  • Oracle Cloud Infrastructure 容器引擎为 Kubernetes 与 Oracle Cloud Infrastructure 身份和访问管理集成。Oracle Cloud Infrastructure 身份和访问管理提供易于使用的认证,具有原生 OCI 身份功能。
  • 使用以下变量来控制作业的资源预订:

可伸缩性

  • 根据负载情况,您可以通过更新 Kubernetes 集群中工作节点的数量来扩展应用程序。类似地,通过减少集群中的工作节点数量,您可以实现缩减规模。在 Kubernetes 集群上创建服务时,您可以创建一个负载均衡器来分配服务流量到分配给该服务的节点。集群自动伸缩基于部署资源预订,您可以通过编辑 gitlab-ci.yaml文件来控制预订。

成本

  • 使用 Oracle 容器引擎为 Kubernetes 是免费的,使用 Oracle 容器注册表也是免费的。Kubernetes 集群中的节点按照与其他具有相同形状的计算实例相同的费率收费。



部署

用于创建包含所有依赖资源(网络、工作节点池)的 Oracle 容器引擎 Kubernetes (OKE) 集群、部署集群自动伸缩和 GitLab Runner 的 Terraform 代码在 GitHub 上可用。

  • 使用 Oracle Cloud Infrastructure 资源管理器进行部署:点击进入登录界面,如果您尚未登录,请输入租户和用户凭证。查看并接受条款和条件。选择您希望部署堆栈的区域。按照屏幕上的提示和指示创建堆栈。创建堆栈后,点击 Terraform 操作,并选择 Plan。等待作业完成,并审阅计划。如需进行任何更改,请返回到堆栈详情页面,点击编辑堆栈,并进行必要的更改。然后,再次运行 Plan 操作。如果不需要进一步更改,返回到堆栈详情页面,点击 Terraform 操作,并选择 Apply。


使用 GitHub 中的 Terraform 代码进行部署:

访问 GitHub。

克隆或下载仓库到您的本地计算机。

按照 README 文档中的指示操作。



开启您的Oracle云之旅:Agilewing - 您的智能云服务伙伴

作为Oracle的高级合作伙伴,Agilewing正重新定义企业体验Oracle云服务的方式。借助于其简化的开户流程和一流的技术支持,Agilewing将复杂的开户和操作流程转化为一种轻松、直观的体验。通过我们的一站式服务,您可以迅速开启并享受Oracle云的全方位服务,从而无缝融入云端世界。


Agilewing的AgileCDN服务,结合了OCI的云基础服务,提供了一流的全球内容加速解决方案。超过2800个全球POP节点和7000个直连点的强大网络,确保了无论您的业务扩展到全球哪个角落,都能保持高效稳定的运行。


利用Oracle云的先进技术,Agilewing致力于简化云服务搭建、云迁移和业务出海的过程。我们的合作模式为客户带来经济高效的解决方案,使他们能够更加专注于核心业务,同时享受Oracle云的高性能和安全保障。


Oracle云服务,作为一个充满潜力的领域,以其高性能、安全性和全球统一的服务标准,为各类企业开启了新的机遇之门。通过Agilewing的专业服务,无论是个人用户还是企业,都能轻松步入这个充满技术革新和高效能的新时代。现在,就让Agilewing引领您开始探索Oracle云服务,打开一个全新的世界大门。