注意:
- 此教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure Free Tier 。
- 它使用 Oracle Cloud Infrastructure 身份证明、租户和区间示例值。完成实验室时,请将这些值替换为特定于云环境的值。
基于 OCI 负载平衡器 HTTP 请求自动缩放 Oracle Cloud Infrastructure 实例池
简介
在本教程中,我们将了解如何根据 OCI 负载平衡器收到的 HTTP 请求数自动扩展 Oracle Cloud Infrastructure (OCI) 实例池。我们将讨论三个主要议题。
- OCI 监视预警度量:监视负载平衡器并根据 HTTP 请求度量设置预警。
- OCI 通知服务:在触发预警时发送通知。
- OCI 函数:创建并使用函数根据收到的通知调整实例池的大小。
OCI 监视:使用 OCI 监视服务主动和被动地使用指标和预警功能监视云资源。OCI 监视服务使用度量来监视资源和预警,以便在这些度量满足警报指定的触发器时通知您。
OCI 通知:当 OCI 中的资源出现问题时,您可以通过受支持的端点获取人工可读的消息,包括使用预警、事件规则和连接器发送的电子邮件和短信 (SMS)。您还可以通过定制 HTTPS 端点和 OCI 函数自动执行任务。
OCI Functions: OCI Functions 是一个完全托管、多租户、高度可扩展的按需函数即服务平台。它基于企业级 OCI 构建,由 Fn Project 开源引擎提供支持。当您需要专注于编写代码以满足业务需求时,请使用 OCI Functions(有时缩写为 Functions,以前称为 Oracle Functions)。
高级别体系结构
注:
本教程仅用于教育和学习目的。它为学习者提供了一个在受控环境中进行实验和获得实践经验的环境。值得注意的是,本教程中使用的安全配置和实践可能不适合实际场景。
现实世界应用的安全注意事项通常更加复杂和动态。因此,在实施生产环境中此处演示的任何技术或配置之前,必须进行全面的安全评估和审查。此审查应涵盖安全的所有方面,包括访问控制、加密、监视和合规性,以确保系统符合组织的安全政策和标准。
从实验室环境过渡到实际部署时,安全性应始终是首要任务。
目标
-
为 OCI 实例池设置自动缩放机制。此自动缩放机制将基于 OCI 负载平衡器收到的 HTTP 请求数。您将学习如何:
-
监视 HTTP 请求度量:设置 OCI 监视以跟踪负载平衡器的 HTTP 请求度量。
-
创建和配置预警:定义和配置基于特定 HTTP 请求阈值触发的预警。
-
设置事件通知:建立事件通知,以便在触发预警时向您发出预警。
-
实施 OCI 函数:创建和部署函数以根据触发的预警自动调整实例池的大小。
-
先决条件
-
OCI 环境
-
具有管理员权限的 Oracle 账户。
-
用于创建资源的区间。
注:记下区间名称和区间 ID。
-
具有专用子网的 VCN。有关详细信息,请参阅创建虚拟云网络。
-
OCI 负载平衡器连接到实例池,backendSet 指向池上的实例。有关详细信息,请参阅创建负载平衡器。
-
实例池至少具有 1 个实例,该实例具有在端口
80
上运行的简单 HTTP 应用程序。有关更多信息,请参见 Using Instance Configurations and Instance Pools 。
-
-
本地计算机环境
-
专用子网上的 Oracle Linux 计算实例。这对于访问专用子网上的资源非常重要,例如将在本教程期间部署的 OCI 流处理和 OCI 函数。
-
用于连接到 Oracle Linux 计算实例并执行教程任务的 OCI 堡垒主机。有关更多信息,请参见 Bastion Overview 。
-
设置本地 Oracle Cloud Infrastructure 命令行界面 (OCI CLI)。有关更多信息,请参见安装 CLI 。
-
要生成映像的本地 Docker(如果您使用的是 Oracle Linux),请参见Docker:Install Docker on Oracle Linux 8 (OL8) 。
-
本地 FN CLI 能够将函数部署到 OCI。有关更多信息,请参见 Installing the Fn Project CLI 。
-
任务 1:设置动态组
转到域,单击动态组并创建以下组。
动态组名:MyFunctions
。
ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}
任务 2:创建策略
转到策略并创建以下策略。
策略名:FunctionsPolicies
。
Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage compute-management-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage load-balancers in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read metrics in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read alarms in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-pools in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read app-catalog-listing in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use volume-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use virtual-network-family in compartment YOUR-COMPARTMENT-NAME
任务 3:创建 OCI 容器注册表
-
转到开发人员服务,单击容器注册表并为 Fn 映像创建专用资料档案库。
资料档案库名称:
lab/fn-autoscale-instance-pool
。 -
检查系统信息库并记下名称空间。
-
打开安装了 OCI CLI 和 Docker 的终端 shell,然后继续登录注册表。请检查您所在区域的正确 URL。在本教程中,我们将使用注册表 URL 为
gru.ocir.io
的巴西东部(圣保罗)区域。docker login gru.ocir.io Username: <your container namespace>/youruser Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
任务 4:创建 Python OCI 函数以自动缩放实例池
注:请确保已选择专用子网,即流池的同一子网。
-
转到 OCI 控制台,然后单击开发人员服务。在 Functions(函数)下,单击 Applications(应用程序)和 Create application(创建应用程序)。
-
创建一些配置以设置缩放大小。
注:这些配置变量用于确定函数将用于横向收缩和横向收缩实例池的值。
密钥名称 值 INSTANCE_POOL_TARGET_SIZE 设置新实例池大小的值 INSTANCE_POOL_DESIRED_SIZE 设置实例池的常规大小 在本教程中,我们将使用一个包含 1 个实例的实例池并横向扩展到
2
。 -
转到安装了 Docker、OCI CLI、Fn Project CLI 的终端 shell,然后运行以下命令来初始化函数。
注:如果您执行了这些任务,则 Docker 登录命令现在已经执行,如果不是,请继续执行任务 3.3 中的 Docker 登录。
mkdir lab cd lab fn create context oci-cloud --provider oracle fn use context oci-cloud fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID fn update context api-url https://functions.sa-saopaulo-1.oraclecloud.com fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/lab fn init --runtime python fn-autoscale-instance-pool cd fn-autoscale-instance-pool ls -lrt
注:在本教程中,我们将使用巴西东部(圣保罗)区域,如果您使用的是其他区域,则需要更改
api-url
和registry
位置。init
命令将在func.py
上创建 Hello World 函数。我们将覆盖此代码。 -
从此处获取 Python 函数示例代码:func.py ,并覆盖在函数
init
命令期间创建的本地func.py
。# Copy the function code from this lab and save it on /tmp/func.py in your shell machine ls -lrt /tmp/func.py # Overwrite the func.py with tha lab's code cp /tmp/func.py func.py # Add the OCI package on the requirements.txt file, this will be needed to work with OCI. echo -e "\noci" >> requirements.txt # Check if requirements.txt has two lines cat requirements.txt
-
构建新代码并部署函数。
ls -lrt fn deploy --app MyApp
任务 5:创建 OCI 通知
-
转到 OCI 控制台,然后单击开发人员服务。在应用程序集成下,选择通知,然后单击创建主题。
名称:
AutoScaleTopic
。 -
单击订阅可创建新订阅并选择在任务 4 中创建的函数。
任务 6:创建要横向扩展的预警定义(将实例池大小调整为目标值)
-
转到 OCI 控制台,然后单击观测和管理。在监视下,选择预警定义,然后单击创建预警。
注:此预警的阈值、间隔是为教程定义的,您可以根据您的应用程序定制自己的需求。
警报名称:
instance_pool_scale_OUT
。 -
输入以下信息以定义预警。
-
在度量说明部分中,输入以下信息。
- 度量名称空间:
oci_lbaas
。 - 度量名:
HttpRequests
。 - 间隔:
1 minute
。 - 统计信息:
Max
。
- 度量名称空间:
-
在度量维部分中,输入以下信息。
-
第一个度量维:
- 维名称:
resourceID
。 - 维值:选择负载平衡器 OCID。
- 维名称:
-
第二个度量维:
- 维名称:
backendSetName
。 - 维值:选择 backendSet 名称。
- 维名称:
-
-
在触发器规则 1 部分中,输入以下信息。
- 运算符:
greater than
。 - 值:
30
。 - 报警正文:连接数高于预期,启动缩放过程。
- 运算符:
-
-
输入以下信息以定义预警通知。
-
在目标部分中,输入以下信息。
- 目的地服务:选择通知。
- 区间:选择您的区间。
- 主题:选择您的主题。
-
在消息格式部分中,选择发送漂亮的 JSON 消息(带换行符的原始文本),并为测试目的,选择重复通知?,其中 1 分钟为通知频率。
-
-
单击高级选项并添加新标记。
注:为了定义缩放、传入或传出的类型,这是必需的标记。
标记名称空间:选择无(应用自由形式标记)。
标记键:autoscaling_type
。值:out
。
任务 7:创建要缩放的预警定义(将实例池大小调整回所需大小)
-
转到 OCI 控制台,然后单击观测和管理。在监视下,选择预警定义,然后单击创建预警。
注:此预警的阈值、间隔是为教程定义的,您可以根据您的应用程序定制自己的需求。
警报名称:
instance_pool_scale_IN
。 -
输入以下信息以定义预警。
-
在度量说明部分中,输入以下信息。
- 度量名称空间:
oci_lbaas
。 - 度量名:
HttpRequests
。 - 间隔:
1 minute
。 - 统计信息:
Max
。
- 度量名称空间:
-
在度量维部分中,输入以下信息。
-
第一个度量维:
- 维名称:
resourceID
。 - 维值:选择负载平衡器 OCID。
- 维名称:
-
第二个度量维:
- 维名称:
backendSetName
。 - 维值:选择 backendSet 名称。
- 维名称:
-
-
在触发器规则 1 部分中,输入以下信息。
- 运算符:
less than
。 - 值:
30
。 - 预警正文:连接计数返回到可接受的值,调用缩放以将实例数减少到所需的值。
- 运算符:
-
-
输入以下信息以定义预警通知。
-
在目标部分中,输入以下信息。
- 目的地服务:选择通知。
- 区间:选择您的区间。
- 主题:选择您的主题。
-
在 Message Format(消息格式)部分中,选择 Send Pretty JSON messages (raw text with line breaks) 。
-
-
单击高级选项并添加新标记。
注:为了定义缩放、传入或传出的类型,这是必需的标记。
标记名称空间:选择无(应用自由形式标记)。
标记键:autoscaling_type
。值:in
。
任务 8:创建装入并检查报警工作
-
获取 LoadBalancer IP,并在端口
80
上运行对应用程序的多次调用。打开 shell 控制台并运行以下代码来调用负载平衡器。i=1 while true do echo "Request $i" curl http://your-ip-here ((i++)) echo "" # Prints a newline for better readability between requests done
简单应用程序加载的输出。
注:这是用于演示方案的简单 HTTP Apache Web 服务器。
-
检查实例池的实际大小和状态。对于本教程,我们有一个大小为
1
的实例池。 -
打开预警定义以查看度量并检查预警是否触发。
-
几分钟后,根据度量间隔,它将触发横向扩展函数。
打开实例池并检查状态,即缩放和目标实例计数为
2
。扩展过程后,您可以看到实例池大小为
2
。 -
停止 shell 脚本,等待横向扩展转换的报警恢复为 OK ,然后观察报警以进行横向扩展。等待几分钟,直到两个警报都更新,并观察缩放的警报何时触发。
现在,放大报警处于火灾状态。
请注意,HttpRequests 已降至低于阈值
30
的数字。实例池收缩已启动。
请注意,实例池大小返回到所需的值
1
。
相关链接
确认
- 作者 - Joao Tarla(Oracle LAD A 团队解决方案工程师)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Autoscale an Oracle Cloud Infrastructure Instance Pool based on OCI Load Balancer HTTP Requests
F99762-01
May 2024