自动缩放 Oracle Cloud Infrastructure Container Instances

使用容器部署的应用需要根据需求进行扩展。例如,学生注册申请需要在学期开始时进行扩展,但在学期开始时缩小。Oracle Cloud Infrastructure Container Instances 可以托管容器化应用,然后根据需要自动缩放。

通过 OCI 容器实例,您可以在针对容器优化的无服务器计算上轻松运行应用。您还可以轻松启动一个或多个容器,灵活地指定计算配置、资源分配、网络和其他可选配置。

使用此引用体系结构可基于资源利用率自动缩放 OCI 容器实例

体系结构

此体系结构使用 Oracle 通知服务、预警和 Oracle 功能的组合来自动缩放 OCI 容器实例

下图说明了此参考体系结构。



自动缩放 - 容器 - 实例 - 图 - oracle.zip

该体系结构具有以下组成部分:

  • 租户

    租户是 Oracle 在您注册 Oracle Cloud Infrastructure 时在 Oracle Cloud 中设置的安全隔离分区。您可以在租户中的 Oracle Cloud 中创建、组织和管理资源。租户与公司或组织同义。通常,公司只有一个租户并反映在该租户中的组织结构。单个租户通常与单个订阅关联,单个订阅通常只有一个租户。

  • 区域

    Oracle Cloud Infrastructure 区域是一个局部地理区域,包含一个或多个称为可用性域的数据中心。区域独立于其他区域,广阔的距离可以将其分开(跨国家甚至大陆)。

  • 区间

    区间是 Oracle Cloud Infrastructure 租户中的跨区域逻辑分区。使用区间在 Oracle Cloud 中组织资源、控制对资源的访问以及设置使用限额。要控制对给定区间中资源的访问,您可以定义策略来指定哪些人可以访问资源以及他们可以执行的操作。

  • 可用性域

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

  • 容错域

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

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

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

  • 安全列表

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

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

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

  • 服务网关

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

  • Internet 网关

    互联网网关允许 VCN 中的公共子网与公共互联网之间的通信。

  • 云卫士

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

  • 负载平衡器

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

  • 安全区域

    安全区域首先通过实施加密数据等策略来确保 Oracle 的安全优秀实践,并防止对整个区间的网络进行公共访问。安全区域与同名的区间关联,它包括安全区域策略或应用于区间及其子区间的“配方”。无法将标准区间添加或移动到安全区域区间。

  • 注册表

    Oracle Cloud Infrastructure Registry 是 Oracle 管理的注册表,可用于简化开发到生产工作流。通过注册表,您可以轻松存储、共享和管理开发构件,例如 Docker 映像。Oracle Cloud Infrastructure 的高可用性和可扩展的体系结构可确保您可以可靠地部署和管理应用。

  • 登录
    日志记录是一项高度可扩展且完全托管的服务,通过它可以从云中的资源访问以下类型的日志:
    • 审计日志:与审计服务发出的事件相关的日志。
    • 服务日志:单个服务(如 API 网关、事件、函数、负载平衡、对象存储和 VCN 流日志)发出的日志。
    • 定制日志:包含来自定制应用、其他云提供商或内部部署环境的诊断信息的日志。
  • 策略

    Oracle Cloud Infrastructure Identity and Access Management 策略指定谁可以访问哪些资源以及如何访问。在组和区间级别授予访问权限,这意味着您可以编写策略来向组授予特定区间或租户中特定类型的访问权限。

  • Vault

    通过 Oracle Cloud Infrastructure Vault ,您可以集中管理用于保护数据的加密密钥以及用于保护云中资源访问的密钥身份证明。您可以使用 Vault 服务创建和管理 Vault、密钥和密钥。

建议

首先使用以下建议来创建安全可靠的环境。 您的要求可能不同于此处所述的体系结构。
  • VCN

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

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

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

    设计子网时,请考虑您的流量流和安全要求。将特定层或角色中的所有资源连接到可充当安全边界的同一子网。

  • 云卫士

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

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

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

  • 安全区域

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

  • 网络安全组 (NSG)

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

考虑事项

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

  • 性能

    此解决方案比创建新容器实例并将其添加到函数本身中的后端集要快,因为不必等待容器实例创建 API 调用,即可返回容器实例的 IP 地址并将其添加到负载平衡器的后端集。对于每个调用,Oracle Cloud Infrastructure Functions 的执行限制为 5 分钟。

  • 安全性

    请确保将所有容器实例都放在专用子网中,并且只将公共负载平衡器放在公共子网中。

  • 可扩展性

    确保设置容器实例的最小数量和最大数量。全面测试解决方案以扩展大量实例。

  • 成本

    使用 Oracle Cloud Infrastructure Registry 无需付费。容器实例产生成本,但函数仅在其执行时间内产生成本。

部署

按照以下高级步骤自动缩放容器实例。

  1. Oracle Cloud Infrastructure Resource Manager 上创建堆栈,以创建容器实例,创建负载平衡器,并使用容器实例的 IP 将容器实例添加到负载平衡器后端集。
  2. 创建堆栈,使其采用以下参数:
    • Compartment_OCID
    • Region
    • Tenancy_OCID
    • Container_Instances_Count
    • Is_Public_IP_Assigned
    • Container_instance_registry_secret
    • Container_Instance_Image_URL
    • Private_Subnet_OCID
    • Public_Subnet_OCID
  3. 创建一个 Oracle 函数,该函数从上述资源管理器堆栈读取 Container_Instance_Count,并根据所需的扩展或收缩容器实例调用对其进行更新。
  4. 在 Oracle 函数中更新 Container_Instance_Count 后,使用更新的 Container_Instance_Count 在资源管理器上应用 Terraform 堆栈,然后退出该函数。
    资源管理器堆栈负责根据调用来添加或终止 OCI 容器实例,并在负载平衡器后端集中添加或删除该实例。
  5. 将以下配置添加到 Oracle 函数:
    • Min_Container_Instance
    • Max_Container_Instance
    • Compartment_ID
    • Resource_Manager_Stack_ID
  6. 将新创建的 Oracle 函数映像推送到 Oracle Cloud Infrastructure Registry (OCIR)。
  7. 在通知服务下创建主题并为其提供适当的名称。
  8. 在创建的主题下创建订阅,并选择函数作为协议。

    注:

    选择通过选择正确的区间和应用程序创建的函数。
  9. oci_computecontainerinstance 名称空间中创建预警定义。
    1. 选择 CPU_utilizationMem_Utilization 作为度量。
    2. 选择容器实例名称作为维。
    3. Alarm 所需的阈值设置为 Fire
  10. 测试此自动缩放体系结构以纵向扩展和收缩 OCI 容器实例

浏览更多

详细了解 OCI 容器实例

查看以下附加资源:

确认

Authors: Christophe Pruvost, Karthic Ravindran, Chandrashekar Avadhani

Contributors: John Sulyok