Code Monkey home page Code Monkey logo

nomad-hcloud-autoscaler's Introduction

Hetzner Cloud Server Target Plugin

The hcloud-server target plugin allows for the scaling of the Nomad cluster clients via manipulating Hetzner Cloud Servers.

Agent Configuration Options

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

Nomad ACL

When using a Nomad cluster with ACLs enabled, the plugin will require an ACL token which provides the following permissions:

node {
  policy = "write"
}

Policy Configuration Options

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 with hcloud_datacenter).

  • hcloud_datacenter (string: "") - ID or name of Datacenter to create Server in (must not be used together with hcloud_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-id label 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 with hcloud_user_data_file).

  • hcloud_b64_user_data_encoded (string: "false") - Identifies if hcloud_user_data (or the content of the file specified in hcloud_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 with hcloud_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 format key1=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.

Demo

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

nomad-hcloud-autoscaler's People

Contributors

andrewchubatiuk avatar elohmeier avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.