brianshumate.nomad
Ansible-Nomad
这个角色之前由 Brian Shumate 维护,现在由 @ansible-community/hashicorp-tools 进行管理。
这个 Ansible 角色执行基本的 Nomad 安装,包括文件系统结构和示例配置。
它还将引导一个最小的 3 个服务器节点集群,并且可以在基于 Vagrant 和 VirtualBox 的开发环境中实现。有关 Vagrant 设置的更多详细信息,请参阅 README_VAGRANT.md。
要求
该角色需要使用 Arch Linux、Debian、RHEL 或 Ubuntu 发行版;该角色测试了以下特定软件版本:
- Ansible: 2.7.10
- nomad: 0.12.1
- Arch Linux
- CentOS: 7
- Debian: 8
- RHEL: 7
- Ubuntu: >= 20.04
- 用于 unarchive 模块 的 unzip
角色变量
该角色在 defaults/main.yml
中定义了大部分变量:
nomad_debug
- Nomad 调试模式
- 默认值: no
nomad_skip_ensure_all_hosts
- 即使不是所有实例都已连接,也允许运行该角色
- 默认值: no
nomad_allow_purge_config
- 允许清除过时的配置文件。例如,如果实例不再是服务器,则删除服务器配置
- 默认值: no
nomad_version
- 要安装的 Nomad 版本
- 默认值: 1.1.1
nomad_architecture_map
- 该变量在大多数情况下无需更改
- 默认值: 字典,将 ansible_architecture 转换为 HashiCorp 架构命名约定
nomad_architecture
- 主机架构
- 默认值: 由
{{ nomad_architecture_map[ansible_architecture] }}
确定
nomad_pkg
- Nomad 包文件名
- 默认值:
nomad_{{ nomad_version }}_linux_{{ nomad_architecture }}.zip
nomad_zip_url
- Nomad 下载 URL
- 默认值:
https://releases.hashicorp.com/nomad/{{ nomad_version }}/nomad_{{ nomad_version }}_linux_{{ nomad_architecture }}.zip
nomad_checksum_file_url
- Nomad 校验和文件 URL
- 默认值:
https://releases.hashicorp.com/nomad/{{ nomad_version }}/nomad_{{ nomad_version}}_SHA256SUMS
nomad_bin_dir
- Nomad 二进制安装路径
- 默认值:
/usr/local/bin
nomad_config_dir
- Nomad 配置文件路径
- 默认值:
/etc/nomad.d
nomad_data_dir
- Nomad 数据路径
- 默认值:
/var/nomad
nomad_lockfile
- Nomad 锁文件路径
- 默认值:
/var/lock/subsys/nomad
nomad_run_dir
- Nomad 运行路径
- 默认值:
/var/run/nomad
nomad_manage_user
- 管理 Nomad 用户?
- 默认值: yes
nomad_user
- Nomad OS 用户名
- 默认值: root
nomad_manage_group
- 管理 Nomad 组?
- 默认值: no
nomad_group
- Nomad OS 组
- 默认值: bin
nomad_region
- 默认区域
- 默认值: global
nomad_datacenter
- Nomad 数据中心标签
- 默认值: dc1
nomad_log_level
- 日志级别
- 默认值: INFO
nomad_syslog_enable
- 记录到 syslog
- 默认值: true
nomad_iface
- Nomad 网络接口
- 默认值:
{{ ansible_default_ipv4.interface }}
nomad_node_name
- Nomad 节点名称
- 默认值:
{{ inventory_hostname_short }}
nomad_node_role
- Nomad 节点角色
- 选项: client, server, both
- 默认值: client
nomad_leave_on_terminate
- 在终止时发送离开信号
- 默认值: yes
nomad_leave_on_interrupt
- 在中断时发送离开信号
- 默认值: no
nomad_disable_update_check
- 禁用更新检查
- 默认值: no
nomad_retry_max
- 最大重试加入尝试
- 默认值: 0
nomad_retry_join
- 启用重试加入?
- 默认值: no
nomad_retry_interval
- 重试加入间隔
- 默认值: 30s
nomad_rejoin_after_leave
- 离开后重新加入?
- 默认值: no
nomad_enabled_schedulers
- 启用的调度器列表
- 默认值: service, batch, system
nomad_num_schedulers
- 调度器数量
- 默认值:
{{ ansible_processor_vcpus }}
nomad_node_gc_threshold
- 节点垃圾收集阈值
- 默认值: 24h
nomad_job_gc_threshold
- 作业垃圾收集阈值
- 默认值: 4h
nomad_eval_gc_threshold
- 评估垃圾收集阈值
- 默认值: 1h
nomad_deployment_gc_threshold
- 部署垃圾收集阈值
- 默认值: 1h
nomad_encrypt_enable
- 启用游说加密,即使未设置
nomad_encrypt
- 默认值: false
nomad_encrypt
- 设置加密密钥;在集群中应相同。如果不存在且
nomad_encrypt_enable
为真,将从引导的服务器生成并检索密钥。 - 默认值: ""
nomad_raft_multiplier
- 指定要使用的 raft 乘数
- 默认值: 1
nomad_raft_protocol
- 指定 raft 协议的版本,Nomad 服务器用于通信
- 默认值: 2
nomad_authoritative_region
- 指定权威区域,提供 ACL 政策和全局 ACL 令牌等全局配置的唯一真实来源。
- 默认值: ""
nomad_node_class
- Nomad 节点分类
- 默认值: ""
nomad_node_pool
- 用于限制哪些客户端节点可以接收哪些工作负载。 默认情况下,任务会选择不属于非默认节点池。这意味着作业作者无需反复将相同的约束添加到每个作业中以避免某些节点。
- 默认值: ""
nomad_no_host_uuid
- 强制客户端生成的 UUID 随机生成
- 默认值: no
nomad_max_kill_timeout
- 最大杀死超时
- 默认值: 30s
nomad_network_interface
- Nomad 调度器将从该接口的 IP 中选择以分配任务
- 默认值: 无
nomad_network_speed
- 重写网络链路速度(0 = 不重写)
- 默认值: 0
nomad_cpu_total_compute
- 重写 CPU 计算(0 = 不重写)
- 默认值: 0
nomad_gc_interval
- 客户端垃圾收集间隔
- 默认值: 1m
nomad_gc_max_allocs
- 客户端在触发垃圾收集之前将跟踪的最大分配数
- 默认值: 50
nomad_gc_disk_usage_threshold
- 垃圾收集的磁盘使用阈值百分比
- 默认值: 80
nomad_gc_inode_usage_threshold
- 垃圾收集的 inode 使用阈值百分比
- 默认值: 70
nomad_gc_parallel_destroys
- 垃圾收集最大并行销毁次数
- 默认值: 2
nomad_reserved
- 保留的客户端资源
- 默认值:
cpu: {{ nomad_reserved_cpu }}, memory: {{ nomad_reserved_memory }}, disk: {{ nomad_reserved_disk }}, ports: {{ nomad_reserved_ports }}
nomad_reserved_cpu
- 保留的客户端 CPU
- 默认值: 0
nomad_reserved_memory
- 保留的客户端内存
- 默认值: 0
nomad_reserved_disk
- 保留的客户端磁盘
- 默认值: 0
nomad_reserved_ports
- 保留的客户端端口
- 默认值: 22
nomad_host_volumes
- 列出用于让作业(有状态工作负载)可用的主机卷。默认情况下,会创建一个目录。指定
state
参数以进行更改。 - 默认值: []
- 示例:
nomad_host_volumes:
- name: data
path: /var/data
owner: root
group: bin
mode: 0755
read_only: false
- name: config
path: /etc/conf
owner: root
group: bin
mode: 0644
read_only: false
- name: docker socket
path: /run/docker.sock
read_only: true
state: file
nomad_host_networks
- 列出用于让不同网络可用于作业的主机网络,而不是选择默认接口。这在有多个网络接口的情况下特别有用。
- 默认值: []
- 示例:
nomad_host_networks:
- name: public
cidr: 100.101.102.103/24
reserved_ports: 22,80
- name: private
interface: eth0
reserved_ports: 443
nomad_options
- 驱动程序选项
- 键值字典
- 默认值: {}
nomad_chroot_env
- Exec 和 Java 驱动的 chroot 环境定义
- 键值字典
- 默认值: false
nomad_meta
- 元数据
- 键值字典
- 默认值: {}
nomad_bind_address
- 绑定接口地址
- 默认值:
{{ hostvars[inventory_hostname]['ansible_'+ nomad_iface ]['ipv4']['address'] }}
nomad_advertise_address
- 要向其他节点宣传的网络接口地址
- 默认值:
{{ hostvars[inventory_hostname]['ansible_'+ nomad_iface ]['ipv4']['address'] }}
nomad_ports
- Nomad 使用的端口
- 默认值:
http: {{ nomad_ports_http }}, rpc: {{ nomad_ports_rpc }}, serf: {{ nomad_ports_serf }}
nomad_ports_http
- Http 端口
- 默认值: 4646
nomad_ports_rpc
- RPC 端口
- 默认值: 4647
nomad_ports_serf
- Serf 端口
- 默认值: 4648
nomad_podman_enable
- 安装 podman 插件
- 默认值: false
nomad_cni_enable
- 安装 cni 插件
- 默认值: false
nomad_docker_enable
- 在节点上安装 Docker 子系统?
- 默认值: false
nomad_template_config
- 允许您配置客户端的 模板配置。
- 默认: {}
示例:
nomad_template_config:
vault_retry:
attempts: 12
backoff: "750ms"
max_backoff: "2m"
wait:
min: "10s"
max: "4m"
nomad_plugins
- 允许您配置 Nomad 插件。
- 默认: {}
示例:
nomad_plugins:
nomad-driver-podman:
config:
volumes:
enabled: true
selinuxlabel: z
recover_stopped: true
nomad_group_name
- 包含所有集群节点的 Ansible 组
- 默认值: nomad_instances
nomad_servers
通常不需要手动更改此列表。
- 服务器节点列表
- 默认值:
nomad_group_name
中的所有节点列表,将nomad_node_role
设置为 server 或 both
nomad_gather_server_facts
该功能使得能够从当前未被 playbook 定向的服务器中收集 nomad_bind_address
和 nomad_advertise_address
。
为了实现这一点,使用了 delegate_facts
选项。该选项在许多 Ansible 版本中存在问题,因此该功能可能并不总是有效。
- 从当前未被定向的服务器收集事实
- 默认值: 'no'
nomad_use_consul
- 通过本机 consul 零配置支持引导 Nomad,假设 consul 默认端口等。
- 默认值: False
nomad_consul_address
- 您的 consul API 地址,在
nomad_use_consul=True
时使用。如果要使用 https,请使用nomad_consul_ssl
。请勿附加 https。 - 默认值: localhost:8500
nomad_consul_ssl
- 如果为
true
,则使用 https。 - 默认值: false
nomad_consul_ca_file
- consul CA 的公钥,结合
nomad_consul_cert_file
和nomad_consul_key_file
使用。 - 默认值: ""
nomad_consul_grpc_ca_file
- 用于验证 gRPC TLS 的 consul CA 公钥,结合
nomad_consul_cert_file
和nomad_consul_key_file
使用。 - 默认值: nomad_consul_ca_file
nomad_consul_cert_file
- 可以用来访问 consul 的公钥。
- 默认值: ""
nomad_consul_key_file
nomad_consul_cert_file
的私钥对。- 默认值: ""
nomad_consul_servers_service_name
- 您的 Nomad 服务器的 consul 服务名称
- 默认值: nomad-servers
nomad_consul_clients_service_name
- 您的 Nomad 客户端的 consul 服务名称
- 默认值: nomad-clients
nomad_consul_token
- 用于与 consul 交互的令牌
- 默认值: ""
nomad_bootstrap_expect
- 指定在引导之前要等待的服务器节点数量。
- 默认值:
{{ nomad_servers | count or 3 }}
nomad_acl_enabled
- 启用 ACL
- 默认值: no
nomad_acl_token_ttl
- 令牌的 TTL
- 默认值: "30s"
nomad_acl_policy_ttl
- 策略的 TTL
- 默认值: "30s"
nomad_acl_replication_token
- 用于授权服务器上的 acl 复制的令牌
- 默认值: ""
nomad_vault_enabled
- 启用 Vault
- 默认值: no
nomad_vault_address
- 要使用的 Vault 地址
- 默认值:
{{ vault_address | default('0.0.0.0') }}
nomad_vault_allow_unauthenticated
- 允许用户在不提供令牌的情况下使用 Vault
- 默认值: yes
nomad_vault_create_from_role
- 用于创建令牌的角色
- 默认值: ""
nomad_vault_ca_file
- 用于 Vault 的 CA 证书路径
- 默认值: ""
nomad_vault_ca_path
- 用于 Vault 的 CA 证书文件夹路径
- 默认值: ""
nomad_vault_cert_file
- 要与 Vault 一起使用的证书路径
- 默认值: ""
nomad_vault_key_file
- 要与 Vault 一起使用的私钥文件路径
- 默认值: ""
nomad_vault_tls_server_name
- 连接到 Vault 时用于设置 SNI 主机的可选字符串
- 默认值: ""
nomad_vault_tls_skip_verify
- 指定是否应强制实施 SSL 对等验证
- 默认值: no
nomad_vault_token
- Nomad 使用的 Vault 令牌。将仅在服务器上安装。
- 默认值: ""
nomad_vault_namespace
- Nomad 使用的 Vault 命名空间
- 默认值: ""
nomad_docker_enable
- 启用 Docker
- 默认值: no
nomad_docker_dmsetup
- 在 Ubuntu 上运行 dmsetup(仅在 Docker 启用时)
- 默认值: yes
nomad_tls_enable
- 启用 TLS
- 默认值: false
nomad_tls_copy_keys
- 是否从本地机器(控制器)复制证书。
- 默认值: false
nomad_tls_files_remote_src
- 是否从远程机器本身复制证书。
- 默认值: false
nomad_tls_dir
- 存储证书的远程目录。
- 默认值:
/etc/nomad/ssl
nomad_ca_file
- 使用 CA 进行 TLS 连接,需要 nomad_cert_file 和 nomad_key_file
- 默认值: ca.cert
nomad_cert_file
- 使用证书进行 TLS 连接,需要 nomad_ca_file 和 nomad_key_file
- 默认值: server.crt
nomad_key_file
- 使用密钥进行 TLS 连接,需要 nomad_cert_file 和 nomad_key_file
- 默认值: server.key
nomad_rpc_upgrade_mode
- 使用证书进行 TLS 连接,需要 nomad_ca_file 和 nomad_key_file,仅在集群升级到 TLS 时使用,且在迁移完成后移除。这允许代理同时接受 TLS 和明文流量。
- 默认值: false
nomad_verify_server_hostname
- 使用密钥进行 TLS 连接,需要 nomad_cert_file 和 nomad_key_file。指定是否应验证服务器的主机名。
- 默认值: true
nomad_verify_https_client
- 使用密钥进行 TLS 连接,需要 nomad_cert_file 和 nomad_key_file。指定代理应要求客户端证书用于所有传入的 HTTPS 请求。客户端证书必须由与 Nomad 相同的 CA 签名。
- 默认值: true
nomad_telemetry
- 指定是否启用 Nomad 的遥测配置。
- 默认值: false
nomad_telemetry_disable_hostname
- 指定是否应该用本地主机名前缀化指标值。
- 默认值: "false"
nomad_telemetry_collection_interval
- 指定 Nomad 代理收集遥测数据的时间间隔。
- 默认值: "1s"
nomad_telemetry_use_node_name
- 指定是否应用前缀使用节点名称,而不是主机名。如果设置,将覆盖 disable_hostname 值。
- 默认值: "false"
nomad_telemetry_publish_allocation_metrics
- 指定 Nomad 是否应该发布分配的运行时指标。
- 默认值: "false"
nomad_telemetry_publish_node_metrics
- 指定 Nomad 是否应该发布节点的运行时指标。
- 默认值: "false"
nomad_telemetry_backwards_compatible_metrics
- 指定 Nomad 是否应该发布与 0.7 以下版本的向后兼容指标,因为 0.7 版本后,Nomad 发布了带标签的指标。所有新指标将仅添加到带标签的指标中。请注意,此选项用于将监控过渡到标签指标,并将最终弃用。
- 默认值: "false"
nomad_telemetry_disable_tagged_metrics
- 指定 Nomad 是否不应发出带标签的指标,仅发出与 Nomad 0.7 以下版本兼容的指标。请注意,此选项用于将监控过渡到标签指标,并将最终弃用。
- 默认值: "false"
nomad_telemetry_filter_default
- 控制是否允许未通过过滤器指定的指标。默认为 true,当未提供过滤器时将允许所有指标。如果设置为 false 且未提供过滤器,则不会发送任何指标。
- 默认值: "true"
nomad_telemetry_prefix_filter
- 这是一个过滤规则列表,用于通过前缀允许/阻止指标。前缀加 "+" 会启用给定前缀的任何指标,而前缀加 "-" 则会阻止它们。如果有两个规则之间存在重叠,将优先使用更具体的规则。如果同一前缀列出多次,则阻止会优先于允许。
- 默认值: []
nomad_telemetry_disable_dispatched_job_summary_metrics
- 指定 Nomad 是否应在发布作业摘要统计数据时忽略从参数化作业调度的作业。由于每个作业在跟踪摘要统计数据时会有小的内存开销,因此在调度大量作业时,有时希望用更多内存来交换这些统计数据。
- 默认值: "false"
nomad_telemetry_statsite_address
- 指定转发指标数据的 statsite 服务器地址。
- 默认值: ""
nomad_telemetry_statsd_address
- 指定转发指标至 statsd 服务器的地址。
- 默认值: ""
nomad_telemetry_datadog_address
- 指定转发指标至 DataDog statsd 服务器的地址。
- 默认值: ""
nomad_telemetry_datadog_tags
- 指定将添加到所有发送到 DogStatsD 的遥测数据包的全局标签的列表。它是字符串的列表,每个字符串看起来像 "my_tag_name:my_tag_value"。
- 默认值: []
nomad_telemetry_prometheus_metrics
- 指定代理是否应在 /v1/metrics?format=prometheus 处提供 Prometheus 格式的指标。
- 默认值: "false"
nomad_telemetry_circonus_api_token
- 指定用于创建/管理检查的有效 Circonus API 令牌。如果提供,指标管理将启用。
- 默认值: ""
nomad_telemetry_circonus_api_app
- 指定与 API 令牌关联的有效应用名称。
- 默认值: "nomad"
nomad_telemetry_circonus_api_url
- 指定用于联系 Circonus API 的基本 URL。
- 默认值: "https://api.circonus.com/v2"
nomad_telemetry_circonus_submission_interval
- 指定将指标提交给 Circonus 的时间间隔。
- 默认值: "10s"
nomad_telemetry_circonus_submission_url
- 指定从先前创建的 HTTPTRAP 检查的 Check API 对象的 check.config.submission_url 字段。
- 默认值: ""
nomad_telemetry_circonus_check_id
- 指定来自先前创建的 HTTPTRAP 检查的检查 ID(非检查包)。Check API 对象中 check._cid 字段的数字部分。
- 默认值: ""
nomad_telemetry_circonus_check_force_metric_activation
- 指定是否强制激活已存在且当前不活跃的指标。如果启用指标管理,则默认行为是在遇到新指标时添加它们。如果指标在检查中已存在,则不会激活。此设置覆盖该行为。
- 默认值: "false"
nomad_telemetry_circonus_check_instance_id
- 用于唯一标识来自该实例的指标。它可以用于保持指标连续性,以便瞬时或短暂实例在基础架构中移动时保持一致。默认情况下,它设置为主机名:应用名称(例如 "host123:nomad")。
- 默认值: ""
nomad_telemetry_circonus_check_search_tag
- 指定一个特殊标签,当与实例 ID 组合使用时,有助于缩小搜索结果范围,当未提供 Submission URL 或检查 ID 时使用。默认情况下,它设置为服务:应用(例如 "service:nomad")。
- 默认值: ""
nomad_telemetry_circonus_check_display_name
- 指定在创建检查时给检查指定的名称。此名称将在 Circonus UI 的检查列表中显示。
- 默认值: ""
nomad_telemetry_circonus_check_tags
- 在创建检查时将添加到检查的附加标签的逗号分隔列表。
- 默认值: ""
nomad_telemetry_circonus_broker_id
- 指定在创建新检查时使用的特定 Circonus Broker 的 ID。Broker API 对象中的 broker._cid 字段的数字部分。如果启用指标管理且未提供 Submission URL 或检查 ID,则将尝试使用实例 ID 和搜索标签搜索现有检查。如果未找到,将创建新的 HTTPTRAP 检查。默认情况下,随机选择一个企业 Broker,或选择默认的 Circonus 公共 Broker。
- 默认值: ""
nomad_telemetry_circonus_broker_select_tag
- 指定一个特殊标签,当未提供 Broker ID 时用于选择 Circonus Broker。其最佳用途是根据此特定实例运行的位置(例如特定地理位置或数据中心,dc:sfo)作为提示。
- 默认值: ""
nomad_autopilot
- 启用 Nomad 自动驾驶仪
- 要启用自动驾驶特性(室外服务器清理除外),必须在所有服务器上将 server stanza 中的 raft_protocol 设置为 3,请参见参数 nomad_raft_protocol。
- 默认值: false
nomad_autopilot_cleanup_dead_servers
- 指定周期性自动删除死掉的服务器节点,并在添加新服务器到集群时删除。
- 默认值: true
nomad_autopilot_last_contact_threshold
- 指定服务器在被视为不健康之前可以在领导者处未联系的最大时间。
- 默认值: 200ms
nomad_autopilot_max_trailing_logs
- 指定服务器可以在被视为不健康之前追踪领导者的最大日志条目数。
- 默认值: 250
nomad_autopilot_server_stabilization_time
- 指定服务器在添加到集群之前必须保持健康状态的最小时间。仅在所有服务器运行 Raft 协议版本 3 或更高时生效。
- 默认值: 10s
nomad_ui
- 指定您是否希望在 UI 中添加特定标签,之后可使用
nomad_ui_label_text
,nomad_ui_label_background_color
和nomad_ui_label_text_color
。 - 默认值: false
示例
nomad_ui: true
nomad_ui_label_text: "Staging Cluster"
nomad_ui_label_background_color: "yellow"
nomad_ui_label_text_color: "#000000"
nomad_ui_label_text
- 指定要在 UI 上显示的标签(例如 "Staging Cluster")。
- 默认值: "Staging Cluster"
nomad_ui_label_background_color
- 指定 UI 上标签的背景颜色(例如 "yellow")。
- 默认值: "yellow"
nomad_ui_label_text_color
- 指定 UI 上标签的颜色(例如 "#000000")。
- 默认值: "#000000"
nomad_artifact
- 指定 artifact 的环境变量(例如 "GITLAB_READONLY_TOKEN")。
- 默认值: ""
示例
nomad_artifact:
{
set_environment_variables: "GITLAB_READONLY_TOKEN,GITLAB_KEYCLOAK_THEMES_READONLY_TOKEN",
}
自定义配置部分
由于 Nomad 从字母顺序加载文件和目录中的配置,通常是在先前解析的配置文件之上合并,您可以通过 nomad_config_custom
设置自定义配置,这将在 nomad_config_dir
中扩展为名为 custom.json
的文件,该文件将在默认情况下加载所有其他配置之后。
启用 vault
的示例用法:
vars:
nomad_config_custom:
vault:
enabled : true
ca_path : "/etc/certs/ca"
cert_file : "/var/certs/vault.crt"
key_file : "/var/certs/vault.key"
address : "https://vault.service.consul:8200"
create_from_role : "nomad-cluster"
依赖项
Ansible 需要 GNU tar,并且该角色在本地使用了 unarchive 模块,因此请确保您的系统已安装 gtar
/unzip
。
Jinja2 模板使用 ipaddr 过滤器,需安装 netaddr
Python 库。
示例剧本
可以使用包含的 site.yml
剧本执行基本的 Nomad 安装:
ansible-playbook -i <hosts> site.yml
您还可以使用 ansible-playbook
命令通过 --extra-vars
选项简单地传递变量:
ansible-playbook -i hosts site.yml --extra-vars "nomad_datacenter=maui"
Vagrant 和 VirtualBox
有关通过 VirtualBox 进行快速 Vagrant 部署的详细信息,请参阅 examples/README_VAGRANT.md
。
许可证
BSD
作者信息
贡献者
特别感谢在 CONTRIBUTORS.md 中列出的人们对该项目的贡献。
欢迎贡献,前提是您能同意 CONTRIBUTING.md 中列出的条款。
ansible-galaxy install brianshumate.nomad