本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
扩展 Beanstalk 集群环境
Beanstalk 集群环境通过更改其运行的应用程序的副本数量来扩展。副本是容器映像的一个运行副本。Amazon EKS 提供这些副本所需的节点容量,并添加或移除节点以适应这些副本,因此您可以调整应用程序的大小,而不是一组实例。
这是与 Beanstalk Standard 的主要区别,后者扩展了亚马逊 EC2 实例的 Auto Scaling 组。aws:autoscaling:*命名空间不适用于 Beanstalk 集群环境。缩放是通过aws:elasticbeanstalk:eks:environment:autoscaling命名空间及其子命名空间进行配置的。有关每个选项及其可接受的值,请参阅Beanstalk 集群环境的配置选项。
设置副本边界
两个选项限制了副本数量:min-replica和max-replica,都在aws:elasticbeanstalk:eks:environment:autoscaling命名空间中。Elastic Beanstalk 会保留它们之间的副本数量。
将两个选项设置为相同的值以运行固定数量的副本。设置为max-replica高于min-replica,让环境在两者之间缩放。一个环境总是运行至少一个副本,因为min-replica接受的最低值1作为其最低值。
$ aws elasticbeanstalk update-environment \
--environment-name my-cluster-env \
--option-settings \
Namespace=aws:elasticbeanstalk:eks:environment:autoscaling,OptionName=min-replica,Value=2 \
Namespace=aws:elasticbeanstalk:eks:environment:autoscaling,OptionName=max-replica,Value=20
Elastic Beanstalk 如何决定何时扩展
在这些范围内,一个或多个触发器决定副本数量。Elastic Beanstalk 根据设定的间隔对触发器进行评估。polling-interval当触发器停止报告活动时,Elastic Beanstalk 会等待一段时间后再向下扩展环境,这样cooldown-period可以暂时停止移除即将再次需要的副本。
如果您根本不配置触发器,则环境会根据其副本的 CPU 使用率进行扩展。其余部分描述了您可以改为配置的触发器。
在 CPU 或内存上扩展
要扩展副本消耗的资源,请在aws:elasticbeanstalk:eks:environment:autoscaling:trigger命名空间中设置指标类型和目标值。Elastic Beanstalk 添加或移除副本以将环境保持在您设置的目标附近。
-
对于 CPU,设置
cpu-metric-type和cpu-value。 -
对于内存,请设置
memory-metric-type和memory-value。
指标类型Utilization将该值视为副本通过cpu和memory选项预留的百分比,因此 a cpu-value 的75目标是预留 CPU 的 75%。的指标类型AverageValue将该值视为每个副本的绝对金额。
你可以在一个环境上同时设置 CPU 和内存触发器。
$ aws elasticbeanstalk update-environment \
--environment-name my-cluster-env \
--option-settings \
Namespace=aws:elasticbeanstalk:eks:environment:autoscaling:trigger,OptionName=cpu-metric-type,Value=Utilization \
Namespace=aws:elasticbeanstalk:eks:environment:autoscaling:trigger,OptionName=cpu-value,Value=75
按计划扩展
要在循环时间窗口内运行选定数量的副本,请设置scaler-type为cron并描述中的窗口scaler-metadata,该窗口采用一个包含四个字段的 JSON 对象。
| 字段 | 说明 |
|---|---|
timezone |
窗口所用的时区,以 IANA 时区名称(如UTCAmerica/New_York、或Asia/Tokyo)表示。 |
start |
当窗口打开时,使用五个字段的 cron 表达式(分钟、小时、月中某天、月、星期日)。 |
end |
当窗口关闭时,格式相同。 |
desiredReplicas |
窗口打开时要运行的副本数量。在您的min-replica和max-replica边界内选择一个值。 |
在窗外,环境恢复到min-replica。以下示例在 UTC 工作日工作时间内运行五个副本:
$ cat schedule.json
[
{
"Namespace": "aws:elasticbeanstalk:eks:environment:autoscaling:trigger",
"OptionName": "scaler-type",
"Value": "cron"
},
{
"Namespace": "aws:elasticbeanstalk:eks:environment:autoscaling:trigger",
"OptionName": "scaler-metadata",
"Value": "{\"timezone\":\"UTC\",\"start\":\"0 8 * * 1-5\",\"end\":\"0 18 * * 1-5\",\"desiredReplicas\":\"5\"}"
}
]
$ aws elasticbeanstalk update-environment \
--environment-name my-cluster-env \
--option-settings file://schedule.json
一个环境需要一个时间表。要在多个窗口中改变副本数量(例如不同的周末计划),请将该计划与另一个触发器结合使用,如中所述组合触发器。
注意
这些设置保存在文件中,因为scaler-metadata值本身就是一个 JSON 文档。有关 AWS CLI 接受的表单--option-settings,请参阅中的使用速记语法。 AWS CLI
根据您自己的终端节点的指标进行扩展
根据您自己的服务报告的值(例如队列深度或正在运行的任务数量)进行扩展,scaler-type请metrics-api设置为。Elastic Beanstalk 读取您提供的 HTTP 终端节点,并根据其在那里找到的数量进行扩展。在中描述端点scaler-metadata。
| 字段 | 说明 |
|---|---|
url |
Elastic Beanstalk 读取的端点。 |
valueLocation |
数字在 JSON 响应中的位置,以虚线路径表示。对于的响应正文{"data":{"result":[{"value":"500"}]}},位置为data.result.0.value。 |
targetValue |
一个副本预计可处理的数量。 |
Elastic Beanstalk 将报告的值除以targetValue并向上舍入得出副本数,然后将该数量保持在副本范围内。如果为 targetValue100,则报告的值500要求五个副本。
您可以将触发器指向自己的环境。由于环境的 URL 只有在启动后才知道,因此应url在更新中设置,而不是在创建时设置。
以下示例根据应用程序报告的深度进行扩展,每 100 个报告的工作单位就有一个副本:
$ cat trigger.json
[
{
"Namespace": "aws:elasticbeanstalk:eks:environment:autoscaling:trigger",
"OptionName": "scaler-type",
"Value": "metrics-api"
},
{
"Namespace": "aws:elasticbeanstalk:eks:environment:autoscaling:trigger",
"OptionName": "scaler-metadata",
"Value": "{\"url\":\"https://my-service.example.com/queue-depth\",\"valueLocation\":\"data.result.0.value\",\"targetValue\":\"100\"}"
}
]
$ aws elasticbeanstalk update-environment \
--environment-name my-cluster-env \
--option-settings file://trigger.json
向终端进行身份验证
如果您的终端节点需要证书,请将其存储在 AWS Secrets Manager 密钥中并设置scaler-auth-secret为密钥的 ARN。您只能在 ish 时scaler-type进行设置metrics-api。设置scaler-auth-mode为您的终端节点期望的方案。密钥的值是一个 JSON 对象,其密钥取决于该方案。
| 身份验证模式 | 机密中必需的密钥 |
|---|---|
bearer,默认 |
token |
basic |
username 和 password |
apiKey |
apiKey |
tls |
ca、cert 和 key |
还要设置环境application-role选项。Elastic Beanstalk 通过环境的 Pod 身份将证书挂载到您的副本中,该身份仅在设置时存在。application-role没有它,装载将失败,副本无法启动。计划触发器不需要它,不需要证书的指标端点也不需要。
环境的应用程序角色会读取密钥,因此请同时授予该密钥secretsmanager:GetSecretValue和secretsmanager:DescribeSecret密钥的 ARN。Elastic Beanstalk 会按计划刷新凭证,刷新会检查密钥的当前版本,因此获得批准的环境只能正常GetSecretValue启动,之后每次刷新都会失败。有关 Beanstalk 集群环境使用的角色,请参阅。Beanstalk 集群的权限
此密钥与向您的应用程序提供机密的secrets选项是分开的。更改的值scaler-auth-secret会替换环境的副本,因为证书是在副本启动时装载的。
组合触发器
环境采用一个事件驱动的触发器,可以是时间表或终端指标,因为scaler-type和scaler-metadata描述的是单个触发器。它可以随身携带 CPU 和内存触发器。
在组合它们之前,有两种行为值得了解:
-
设置
scaler-type取代了中所述的默认 CPU 缩放比例Elastic Beanstalk 如何决定何时扩展。要同时继续扩展 CPU,请cpu-value明确设置cpu-metric-type和。 -
当应用多个触发器时,副本数最高者获胜。要求五个副本的计划和一个要求三个副本的 CPU 触发器会生成五个副本。
将计划与 CPU 触发器配对是一种常见的组合:该计划包含您在繁忙时段预期的副本数,而 CPU 触发器在其余时间保持可用状态。
观察环境规模
Elastic Beanstalk 控制台中的环境监控页面显示了应用程序副本数量图,该图表报告了环境在一段时间内运行的副本。将其与 CPU(内核)和内存(字节)图表进行比较可以显示触发器是否处于目标状态。有关 Beanstalk 集群环境报告的运行状况和指标,请参阅。监控 Beanstalk 集群环境
Elastic Beanstalk 在更改扩展设置时会记录环境事件,因此环境的事件流会显示缩放更改何时生效。