hashicorp/nomad-autoscalerNomad Autoscaler是面向Nomad的自动扩缩容守护进程,旨在为Nomad工作负载提供自动扩缩容能力。其基于插件架构设计,支持灵活扩展指标源、扩缩容目标及扩缩容算法,可根据配置的策略动态调整工作负载数量。
注意:该项目处于早期开发阶段,不提供任何保证,且可能会无预警地变更。更多信息请参见官方文档:[***]
通过Nomad的Docker驱动将Autoscaler部署为集群内任务,利用Nomad的调度和资源管理能力。
hcljob "autoscaler" { datacenters = ["dc1"] # 目标数据中心 group "autoscaler" { count = 1 # 部署实例数量 task "autoscaler" { driver = "docker" # 使用Docker驱动 config { image = "hashicorp/nomad-autoscaler:0.3.5" # 镜像及版本 command = "nomad-autoscaler" # 启动命令 args = ["agent", "-config", "${NOMAD_TASK_DIR}/config.hcl"] # 启动参数:agent模式,指定配置文件路径 } template { data = <<EOF plugin_dir = "/plugins" # 插件存放目录 nomad { address = "http://{{env "attr.unique.network.ip-address" }}:4646" # Nomad API地址(通过环境变量获取任务IP) } # Nomad指标源配置 apm "nomad" { driver = "nomad-apm" # 驱动名称 config = { address = "http://{{env "attr.unique.network.ip-address" }}:4646" # Nomad API地址 } } # Prometheus指标源配置 apm "prometheus" { driver = "prometheus" # 驱动名称 config = { address = "http://{{env "attr.unique.network.ip-address" }}:9090" # Prometheus服务地址 } } EOF destination = "${NOMAD_TASK_DIR}/config.hcl" # 渲染后的配置文件路径 } } } }
image指定为hashicorp/nomad-autoscaler:0.3.5,需使用具体版本标签。agent表示以守护进程模式运行;-config指定配置文件路径。plugin_dir:插件存放目录,用于加载扩展插件。nomad.address:Nomad API地址,通过{{env "attr.unique.network.ip-address"}}动态获取任务所在节点IP。apm块:定义指标源,支持多指标源配置(如nomad和prometheus),每个块需指定driver(驱动名称)和config(驱动配置,如服务地址)。在Nomad集群外部部署时,可通过docker run直接启动独立容器。
bashdocker run \ --volume /usr/bin/nomad-autoscaler/plugins:/plugins \ # 挂载插件目录(宿主机:容器) --volume /opt/nomad-autoscaler/config:/config \ # 挂载配置目录(宿主机:容器) hashicorp/nomad-autoscaler:0.3.5 \ # 镜像及版本 nomad-autoscaler agent -config /config # 启动命令:agent模式,从/config目录加载配置
--volume:挂载宿主机目录到容器,/plugins存放扩展插件,/config存放配置文件。agent -config /config表示以守护进程模式运行,并从/config目录加载配置文件。如需集成自定义插件或配置,可基于官方镜像构建自定义镜像,预打包插件和配置。
dockerfileFROM hashicorp/nomad-autoscaler:v0.3.5 # 基于官方0.3.5版本镜像 # 添加自定义插件(从CI地址下载) ADD [***] /plugin-dir/my-plugin # 添加自定义插件配置(合并到配置目录) ADD [***] /config-dir/my-plugin.hcl # (可选)设置插件执行权限 RUN chmod +x /plugin-dir/my-plugin
ADD命令从外部源(如CI构建地址)下载自定义插件和配置,分别存放于/plugin-dir(插件目录)和/config-dir(配置目录)。| 配置项 | 说明 | 示例值 |
|---|---|---|
plugin_dir | 插件存放目录 | /plugins |
nomad.address | Nomad API地址(集群连接点) | [***] |
APM配置块格式:apm "<名称>" { ... },<名称>为自定义指标源标识。
hclapm "nomad" { driver = "nomad-apm" # 驱动名称(固定值) config = { address = "[***]" # Nomad API地址 } }
hclapm "prometheus" { driver = "prometheus" # 驱动名称(固定值) config = { address = "[***]" # Prometheus服务地址 } }
在Nomad任务模板中,可使用以下Nomad环境变量动态注入配置:
{{env "attr.unique.network.ip-address"}}:任务所在节点的IP地址,用于配置Nomad API或Prometheus地址。


manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务