open-nomad/website/content/docs/autoscaling/policy.mdx

228 lines
6.9 KiB
Plaintext

---
layout: docs
page_title: Scaling Policies
description: >
Scaling policies describe the target resource desired state and how to
perform calculations to ensure the current state reaches the desired.
---
# Nomad Autoscaler Scaling Policies
Nomad Autoscaler scaling policies can be configured via the [`scaling` stanza][jobspec_scaling_stanza]
or by configuration files stored on disk. The options available differ whether
you are performing horizontal application/cluster scaling or Dynamic Application
Sizing.
## Top Level Options
- `enabled` - A boolean flag that allows operators to administratively disable a
policy from active evaluation.
- `min` - The minimum running count of the targeted resource. This can be 0 or any
positive integer.
- `max` - The maximum running count of the targeted resource. This can be 0 or any
positive integer.
## Task Group and Cluster Scaling `policy` Options
The following options are available when using the Nomad Autoscaler to perform
horizontal application scaling or horizontal cluster scaling.
- `cooldown` - A time interval after a scaling action during which no additional
scaling will be performed on the resource. It should be provided as a duration
(e.g.: `"5s"`, `"1m"`). If omitted the configuration value
[policy_default_cooldown][policy_default_cooldown_agent] from the agent will
be used.
- `evaluation_interval` - Defines how often the policy is evaluated by the
Autoscaler. It should be provided as a duration (e.g.: `"5s"`, `"1m"`). If
omitted the configuration value [default_evaluation_interval][eval_interval_agent]
from the agent will be used.
- `target` - Defines where the autoscaling target is running. Detailed information
on the configuration options can be found on the [Target Plugins][target_plugin_docs]
page.
- `check` - Specifies one or more checks to be executed when determining if a
scaling action is required.
## `check` Options
- `source` - The APM plugin that should handle the metric query. If omitted,
this defaults to using the Nomad APM.
- `query` - The query to run against the specified APM. Currently this query
should return a single value. Detailed information on the configuration options
can be found on the [APM Plugins][apm_plugin_docs] page.
- `query_window` - Defines how far back to query the APM for metrics. It should
be provided as a duration (e.g.: `"5s"`, `"1m"`). Defaults to `1m`.
- `strategy` - The strategy to use, and it's configuration when calculating the
desired state based on the current count and the metric returned by the APM.
Detailed information on the configuration options can be found on the
[Strategy Plugins][strategy_plugin_docs] page.
### Example in a Job
A full example of a policy document that can be written into the Nomad task group
`scaling` stanza can be seen below.
```hcl
job "example" {
group "app" {
scaling {
min = 2
max = 10
enabled = true
policy {
evaluation_interval = "5s"
cooldown = "1m"
check "active_connections" {
source = "prometheus"
query = "scalar(open_connections_example_cache)"
strategy "target-value" {
target = 10
}
}
}
}
}
}
```
### Example in a File
An example of a policy document that can be placed in a file within the
`policy_dir` can be seen below. Multiple policies can be defined in the same
file using multiple `scaling` blocks.
```hcl
scaling "aws_cluster_policy" {
enabled = true
min = 1
max = 2
policy {
cooldown = "2m"
evaluation_interval = "1m"
check "cpu_allocated_percentage" {
source = "prometheus"
query = "..."
strategy "target-value" {
target = 70
}
}
check "mem_allocated_percentage" {
source = "prometheus"
query = "..."
strategy "target-value" {
target = 70
}
}
target "aws-asg" {
dry-run = "false"
aws_asg_name = "hashistack-nomad_client"
node_class = "hashistack"
node_drain_deadline = "5m"
}
}
}
scaling "azure_cluster_policy" {
enabled = true
min = 1
max = 2
policy {
...
target "azure-vmss" {
resource_group = "hashistack"
vm_scale_set = "clients"
node_class = "hashistack"
node_drain_deadline = "5m"
}
}
}
```
## Task (DAS) `policy` Options
<EnterpriseAlert>
This functionality only exists in Nomad Autoscaler Enterprise. This is not
present in the open source version of Nomad Autoscaler.
</EnterpriseAlert>
The following options are available when using the Nomad Autoscaler Enterprise
to perform Dynamic Application Sizing recommendations for task resources. When
using the [`scaling` stanza][jobspec_scaling_stanza] for Dynamic Application
Sizing, the stanza requires a label to identify which resource it relates to. It
currently supports `cpu` and `mem` labels, examples of which can be seen below.
- `cooldown` - A time interval after a scaling action during which no additional
scaling will be performed on the resource. It should be provided as a duration
(e.g.: `"5s"`, `"1m"`). If omitted the configuration value
[policy_default_cooldown][policy_default_cooldown_agent] from the agent will
be used.
- `evaluation_interval` - Defines how often the policy is evaluated by the
Autoscaler. It should be provided as a duration (e.g.: `"5s"`, `"1m"`). If
omitted the configuration value [default_evaluation_interval][eval_interval_agent]
from the agent will be used.
- `target` - Defines where the autoscaling target is running. Detailed information
on the configuration options can be found on the [Target Plugins][target_plugin_docs]
page.
- `check` - Specifies one check to be executed when determining if a recommendation
is required. Only one check is permitted per scaling block within Dynamic
Application Sizing.
## `check` Options
- `strategy` - The strategy to use, and it's configuration when calculating the
desired state based on the current value and the available historic data. Detailed
information on the configuration options can be found on the
[Strategy Plugins][strategy_plugin_docs] page.
### Example
The following examples are minimal blocks which can be used to configure CPU and
Memory based sizing recommendations for a Nomad job task.
```hcl
scaling "cpu" {
policy {
check "96pct" {
strategy "app-sizing-percentile" {
percentile = "96"
}
}
}
}
scaling "mem" {
policy {
check "max" {
strategy "app-sizing-max" {}
}
}
}
```
[policy_default_cooldown_agent]: /docs/autoscaling/agent#default_cooldown
[eval_interval_agent]: /docs/autoscaling/agent#default_evaluation_interval
[target_plugin_docs]: /docs/autoscaling/plugins/target
[strategy_plugin_docs]: /docs/autoscaling/plugins/strategy
[apm_plugin_docs]: /docs/autoscaling/plugins/apm
[jobspec_scaling_stanza]: /docs/job-specification/scaling