The hcloud-server target plugin allows for the scaling of the Nomad cluster clients via manipulating Hetzner Cloud Servers.
To use the hcloud-server target plugin, the agent configuration needs to be populated with the appropriate target block.
target "hcloud-server" {
driver = "hcloud-server"
config = {
hcloud_token = "YOUR_HCLOUD_TOKEN"
}
}-
hcloud_token(string: required)- The Hetzner Cloud token used to authenticate to connect to and where resources should be managed. -
hcloud_random_suffix_len(string: "10")- Random Server name suffix length -
hcloud_retry_interval(string: "1m")- Hetzner Cloud API retry interval -
hcloud_retry_limit(string: "5")- Hetzner Cloud API retry limit -
hcloud_items_per_page(string: "50")- Hetzner Cloud API request page size -
hcloud_group_id_label_selector(string: "group-id")- Server group id label selector -
hcloud_node_attr_id(string: "unique.hostname")- Nomad Node attribute id
When using a Nomad cluster with ACLs enabled, the plugin will require an ACL token which provides the following permissions:
node {
policy = "write"
}check "hashistack-allocated-cpu" {
# ...
target "hcloud-server" {
datacenter = "XXX"
node_class = "XXX"
node_drain_deadline = "5m"
node_purge = "true"
node_selector_strategy = "newest_create_index"
hcloud_location = "XXX"
hcloud_image = "XXX"
hcloud_user_data = "#cloud-config\npackages:\n - jq"
hcloud_b64_user_data_encoded = "false"
hcloud_ssh_keys = "XXX"
hcloud_server_type = "cx11"
hcloud_group_id = "XXX"
hcloud_labels = "XXX_node=true"
hcloud_networks = "XXX"
}
# ...
}-
hcloud_location(string: "")- ID or name of Location to create Server in (must not be used together withhcloud_datacenter). -
hcloud_datacenter(string: "")- ID or name of Datacenter to create Server in (must not be used together withhcloud_location). -
hcloud_firewalls(string: "")- Comma-separated list of Firewall IDs -
hcloud_placement_group(string: "")- Placement Group ID -
hcloud_image(string: required)- ID or name of the Image the Server is created from. -
hcloud_group_id(string: required)- Server group name used for filtering targeted HCloud hosts.group-idlabel is attached to a server during creation. -
hcloud_user_data(string: required)- Cloud-Init user data to use during Server creation. This field is limited to 32KiB (must not be used together withhcloud_user_data_file). -
hcloud_b64_user_data_encoded(string: "false")- Identifies ifhcloud_user_data(or the content of the file specified inhcloud_user_data_file) is base64 encoded or not. -
hcloud_user_data_file(string: required)- Cloud-Init user data file to use during Server creation (must not be used together withhcloud_user_data). -
hcloud_ssh_keys(string: required)- Comma-separated IDs or names of SSH keys which should be injected into the server at creation time. -
hcloud_labels(string: "")- User-defined labels (key-value pairs) string in a formatkey1=value1,key2=value2,...,keyN=valueN. -
hcloud_networks(string: "")- Network IDs which should be attached to the server private network interface at the creation time. -
hcloud_public_net_enable_ipv4(bool: "true")- Enable IPV4 address for HCloud instances -
hcloud_public_net_enable_ipv6(bool: "false")- Enable IPV6 address for HCloud instances -
datacenter(string: "")- The Nomad client datacenter identifier used to group nodes into a pool of resource. -
node_class(string: "")- The Nomad client node class identifier used to group nodes into a pool of resource. -
node_drain_deadline(duration: "15m")The Nomad drain deadline to use when performing node draining actions. -
node_drain_ignore_system_jobs(bool: "false")A boolean flag used to control if system jobs should be stopped when performing node draining actions. -
node_purge(bool: "false")A boolean flag to determine whether Nomad clients should be purged when performing scale in actions. -
node_selector_strategy(string: "least_busy")The strategy to use when selecting nodes for termination. Refer to the node selector strategy documentation for more information.
Run terraform apply in demo folder to create:
- nomad server which runs services for:
- nomad-autoscaler
- prometheus
- redis
Autoscaler scales hcloud nodes for redis. After successful run both Nomad and Consul are wide-world open and credentials for both you can find in terraform output and in creds.json file