

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 扩展 Beanstalk 集群环境
<a name="configuring-cluster-scaling"></a>

Beanstalk 集群环境通过更改其运行的应用程序的*副本*数量来扩展。副本是容器映像的一个运行副本。Amazon EKS 提供这些副本所需的节点容量，并添加或移除节点以适应这些副本，因此您可以调整应用程序的大小，而不是一组实例。

这是与 Beanstalk Standard 的主要区别，后者扩展了亚马逊 EC2 实例的 Auto Scaling 组。`aws:autoscaling:*`命名空间不适用于 Beanstalk 集群环境。缩放是通过`aws:elasticbeanstalk:eks:environment:autoscaling`命名空间及其子命名空间进行配置的。有关每个选项及其可接受的值，请参阅[Beanstalk 集群环境的配置选项](command-options-general-eks.md)。

## 设置副本边界
<a name="configuring-cluster-scaling-replicas"></a>

两个选项限制了副本数量：`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 如何决定何时扩展
<a name="configuring-cluster-scaling-triggers"></a>

在这些范围内，一个或多个*触发器*决定副本数量。Elastic Beanstalk 根据设定的间隔对触发器进行评估。`polling-interval`当触发器停止报告活动时，Elastic Beanstalk 会等待一段时间后再向下扩展环境，这样`cooldown-period`可以暂时停止移除即将再次需要的副本。

如果您根本不配置触发器，则环境会根据其副本的 CPU 使用率进行扩展。其余部分描述了您可以改为配置的触发器。

## 在 CPU 或内存上扩展
<a name="configuring-cluster-scaling-cpu-memory"></a>

要扩展副本消耗的资源，请在`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
```

## 按计划扩展
<a name="configuring-cluster-scaling-schedule"></a>

要在循环时间窗口内运行选定数量的副本，请设置`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
```

一个环境需要一个时间表。要在多个窗口中改变副本数量（例如不同的周末计划），请将该计划与另一个触发器结合使用，如中所述[组合触发器](#configuring-cluster-scaling-combining)。

**注意**  
这些设置保存在文件中，因为`scaler-metadata`值本身就是一个 JSON 文档。有关 AWS CLI 接受的表单`--option-settings`，请参阅中的[使用速记语法。 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-shorthand.html)

## 根据您自己的终端节点的指标进行扩展
<a name="configuring-cluster-scaling-metrics-api"></a>

根据您自己的服务报告的值（例如队列深度或正在运行的任务数量）进行扩展，`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`并向上舍入得出副本数，然后将该数量保持在副本范围内。如果为 `targetValue``100`，则报告的值`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
```

### 向终端进行身份验证
<a name="configuring-cluster-scaling-metrics-api-auth"></a>

如果您的终端节点需要证书，请将其存储在 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 集群的权限](beanstalk-cluster-permissions.md)

此密钥与向您的应用程序提供机密的`secrets`选项是分开的。更改的值`scaler-auth-secret`会替换环境的副本，因为证书是在副本启动时装载的。

## 组合触发器
<a name="configuring-cluster-scaling-combining"></a>

环境采用一个事件驱动的触发器，可以是时间表或终端指标，因为`scaler-type`和`scaler-metadata`描述的是单个触发器。它可以随身携带 CPU 和内存触发器。

在组合它们之前，有两种行为值得了解：
+ 设置`scaler-type`取代了中所述的默认 CPU 缩放比例[Elastic Beanstalk 如何决定何时扩展](#configuring-cluster-scaling-triggers)。要同时继续扩展 CPU，请`cpu-value`明确设置`cpu-metric-type`和。
+ 当应用多个触发器时，副本数最高者获胜。要求五个副本的计划和一个要求三个副本的 CPU 触发器会生成五个副本。

将计划与 CPU 触发器配对是一种常见的组合：该计划包含您在繁忙时段预期的副本数，而 CPU 触发器在其余时间保持可用状态。

## 观察环境规模
<a name="configuring-cluster-scaling-watching"></a>

Elastic Beanstalk 控制台中的环境监控页面显示了**应用程序副本数量**图，该图表报告了环境在一段时间内运行的副本。将其与 ** CPU（内核）**和内**存（字节）**图表进行比较可以显示触发器是否处于目标状态。有关 Beanstalk 集群环境报告的运行状况和指标，请参阅。[监控 Beanstalk 集群环境](monitoring-cluster-environments.md)

Elastic Beanstalk 在更改扩展设置时会记录环境事件，因此环境的事件流会显示缩放更改何时生效。