3 navsection: installguide
4 title: Install Node Manager
7 Copyright (C) The Arvados Authors. All rights reserved.
9 SPDX-License-Identifier: CC-BY-SA-3.0
12 Arvados Node Manager provides elastic computing for Arvados and SLURM by creating and destroying virtual machines on demand. Node Manager currently supports Amazon Web Services (AWS), Google Cloud Platform (GCP) and Microsoft Azure.
14 Note: node manager is only required for elastic computing cloud environments. Fixed size clusters do not require node manager.
18 Node manager may run anywhere, however it must be able to communicate with the cloud provider's APIs, and use the command line tools @sinfo@, @squeue@ and @scontrol@ to communicate with the cluster's SLURM controller.
20 On Debian-based systems:
23 <pre><code>~$ <span class="userinput">sudo apt-get install arvados-node-manager</span>
27 On Red Hat-based systems:
30 <pre><code>~$ <span class="userinput">sudo yum install arvados-node-manager</span>
34 h2. Create compute image
36 Configure a virtual machine following the "instructions to set up a compute node.":{{site.baseurl}}/install/crunch2-slurm/install-compute-node.html and set it up to run a "ping script":{{site.baseurl}}/install/install-compute-ping.html at boot.
38 Create a virtual machine image using the commands provided by your cloud provider. We recommend using a tool such as "Packer":https://www.packer.io/ to automate this process.
40 Configure node manager to use the image with the @image@ or @image_id@ parameter.
42 h2. Configure node manager
44 The configuration file at @/etc/arvados-node-manager/config.ini@ . Some configuration details are specific to the cloud provider you are using:
46 * "Amazon Web Services":#aws
47 * "Google Cloud Platform":#gcp
48 * "Microsoft Azure":#azure
50 h3(#aws). Amazon Web Services
53 # EC2 configuration for Arvados Node Manager.
54 # All times are in seconds unless specified otherwise.
57 # The management server responds to http://addr:port/status.json with
58 # a snapshot of internal state.
60 # Management server listening address (default 127.0.0.1)
63 # Management server port number (default -1, server is disabled)
67 # The dispatcher can customize the start and stop procedure for
68 # cloud nodes. For example, the SLURM dispatcher drains nodes
69 # through SLURM before shutting them down.
72 # Node Manager will ensure that there are at least this many nodes running at
73 # all times. If node manager needs to start new idle nodes for the purpose of
74 # satisfying min_nodes, it will use the cheapest node type. However, depending
75 # on usage patterns, it may also satisfy min_nodes by keeping alive some
76 # more-expensive nodes
79 # Node Manager will not start any compute nodes when at least this
83 # Upper limit on rate of spending (in $/hr), will not boot additional nodes
84 # if total price of already running nodes meets or exceeds this threshold.
85 # default 0 means no limit.
88 # Poll EC2 nodes and Arvados for new information every N seconds.
91 # Polls have exponential backoff when services fail to respond.
92 # This is the longest time to wait between polls.
95 # If Node Manager can't succesfully poll a service for this long,
96 # it will never start or stop compute nodes, on the assumption that its
97 # information is too outdated.
98 poll_stale_after = 600
100 # If Node Manager boots a cloud node, and it does not pair with an Arvados
101 # node before this long, assume that there was a cloud bootstrap failure and
102 # shut it down. Note that normal shutdown windows apply (see the Cloud
103 # section), so this should be shorter than the first shutdown window value.
104 boot_fail_after = 1800
106 # "Node stale time" affects two related behaviors.
107 # 1. If a compute node has been running for at least this long, but it
108 # isn't paired with an Arvados node, do not shut it down, but leave it alone.
109 # This prevents the node manager from shutting down a node that might
110 # actually be doing work, but is having temporary trouble contacting the
112 # 2. When the Node Manager starts a new compute node, it will try to reuse
113 # an Arvados node that hasn't been updated for this long.
114 node_stale_after = 14400
116 # Scaling factor to be applied to nodes' available RAM size. Usually there's a
117 # variable discrepancy between the advertised RAM value on cloud nodes and the
118 # actual amount available.
119 # If not set, this value will be set to 0.95
120 node_mem_scaling = 0.95
122 # File path for Certificate Authorities
123 certs_file = /etc/ssl/certs/ca-certificates.crt
127 file = /var/log/arvados/node-manager.log
129 # Log level for most Node Manager messages.
130 # Choose one of DEBUG, INFO, WARNING, ERROR, or CRITICAL.
131 # WARNING lets you know when polling a service fails.
132 # INFO additionally lets you know when a compute node is started or stopped.
135 # You can also set different log levels for specific libraries.
136 # Pykka is the Node Manager's actor library.
137 # Setting this to DEBUG will display tracebacks for uncaught
138 # exceptions in the actors, but it's also very chatty.
141 # Setting apiclient to INFO will log the URL of every Arvados API request.
145 host = zyxwv.arvadosapi.com
146 token = ARVADOS_TOKEN
149 # Accept an untrusted SSL certificate from the API server?
155 # It's usually most cost-effective to shut down compute nodes during narrow
156 # windows of time. For example, EC2 bills each node by the hour, so the best
157 # time to shut down a node is right before a new hour of uptime starts.
158 # Shutdown windows define these periods of time. These are windows in
159 # full minutes, separated by commas. Counting from the time the node is
160 # booted, the node WILL NOT shut down for N1 minutes; then it MAY shut down
161 # for N2 minutes; then it WILL NOT shut down for N3 minutes; and so on.
162 # For example, "54, 5, 1" means the node may shut down from the 54th to the
163 # 59th minute of each hour of uptime.
164 # Specify at least two windows. You can add as many as you need beyond that.
165 shutdown_windows = 54, 5, 1
174 # This section defines filters that find compute nodes.
175 # Tags that you specify here will automatically be added to nodes you create.
176 # Replace colons in Amazon filters with underscores
177 # (e.g., write "tag:mytag" as "tag_mytag").
178 instance-state-name = running
179 tag_arvados-class = dynamic-compute
183 # New compute nodes will send pings to Arvados at this host.
184 # You may specify a port, and use brackets to disambiguate IPv6 addresses.
185 ping_host = hostname:port
187 # Give the name of an SSH key on AWS...
190 # ... or a file path for an SSH key that can log in to the compute node.
191 # (One or the other, not both.)
194 # The EC2 IDs of the image and subnet compute nodes should use.
198 # Comma-separated EC2 IDs for the security group(s) assigned to each
200 security_groups = idstring1, idstring2
203 # You can define any number of Size sections to list EC2 sizes you're
204 # willing to use. The Node Manager should boot the cheapest size(s) that
205 # can run jobs in the queue.
207 # Each size section MUST define the number of cores are available in this
208 # size class (since libcloud does not provide any consistent API for exposing
210 # You may also want to define the amount of scratch space (expressed
211 # in GB) for Crunch jobs. You can also override Amazon's provided
212 # data fields (such as price per hour) by setting them here.
225 h3(#gcp). Google Cloud Platform
228 # Google Compute Engine configuration for Arvados Node Manager.
229 # All times are in seconds unless specified otherwise.
232 # The management server responds to http://addr:port/status.json with
233 # a snapshot of internal state.
235 # Management server listening address (default 127.0.0.1)
238 # Management server port number (default -1, server is disabled)
242 # Node Manager will ensure that there are at least this many nodes running at
243 # all times. If node manager needs to start new idle nodes for the purpose of
244 # satisfying min_nodes, it will use the cheapest node type. However, depending
245 # on usage patterns, it may also satisfy min_nodes by keeping alive some
246 # more-expensive nodes
249 # Node Manager will not start any compute nodes when at least this
250 # running at all times. By default, these will be the cheapest node size.
253 # Poll compute nodes and Arvados for new information every N seconds.
256 # Upper limit on rate of spending (in $/hr), will not boot additional nodes
257 # if total price of already running nodes meets or exceeds this threshold.
258 # default 0 means no limit.
261 # Polls have exponential backoff when services fail to respond.
262 # This is the longest time to wait between polls.
265 # If Node Manager can't succesfully poll a service for this long,
266 # it will never start or stop compute nodes, on the assumption that its
267 # information is too outdated.
268 poll_stale_after = 600
270 # "Node stale time" affects two related behaviors.
271 # 1. If a compute node has been running for at least this long, but it
272 # isn't paired with an Arvados node, do not shut it down, but leave it alone.
273 # This prevents the node manager from shutting down a node that might
274 # actually be doing work, but is having temporary trouble contacting the
276 # 2. When the Node Manager starts a new compute node, it will try to reuse
277 # an Arvados node that hasn't been updated for this long.
278 node_stale_after = 14400
280 # Scaling factor to be applied to nodes' available RAM size. Usually there's a
281 # variable discrepancy between the advertised RAM value on cloud nodes and the
282 # actual amount available.
283 # If not set, this value will be set to 0.95
284 node_mem_scaling = 0.95
286 # File path for Certificate Authorities
287 certs_file = /etc/ssl/certs/ca-certificates.crt
291 file = /var/log/arvados/node-manager.log
293 # Log level for most Node Manager messages.
294 # Choose one of DEBUG, INFO, WARNING, ERROR, or CRITICAL.
295 # WARNING lets you know when polling a service fails.
296 # INFO additionally lets you know when a compute node is started or stopped.
299 # You can also set different log levels for specific libraries.
300 # Pykka is the Node Manager's actor library.
301 # Setting this to DEBUG will display tracebacks for uncaught
302 # exceptions in the actors, but it's also very chatty.
305 # Setting apiclient to INFO will log the URL of every Arvados API request.
309 host = zyxwv.arvadosapi.com
310 token = ARVADOS_TOKEN
313 # Accept an untrusted SSL certificate from the API server?
319 # Shutdown windows define periods of time when a node may and may not
320 # be shut down. These are windows in full minutes, separated by
321 # commas. Counting from the time the node is booted, the node WILL
322 # NOT shut down for N1 minutes; then it MAY shut down for N2 minutes;
323 # then it WILL NOT shut down for N3 minutes; and so on. For example,
324 # "54, 5, 1" means the node may shut down from the 54th to the 59th
325 # minute of each hour of uptime.
326 # GCE bills by the minute, and does not provide information about when
327 # a node booted. Node Manager will store this information in metadata
328 # when it boots a node; if that information is not available, it will
329 # assume the node booted at the epoch. These shutdown settings are
330 # very aggressive. You may want to adjust this if you want more
331 # continuity of service from a single node.
332 shutdown_windows = 20, 999999
335 user_id = client_email_address@developer.gserviceaccount.com
336 key = path_to_certificate.pem
337 project = project-id-from-google-cloud-dashboard
340 # Valid location (zone) names: https://cloud.google.com/compute/docs/zones
341 datacenter = us-central1-a
343 # Optional settings. For full documentation see
344 # http://libcloud.readthedocs.org/en/latest/compute/drivers/gce.html#libcloud.compute.drivers.gce.GCENodeDriver
346 # auth_type = SA # SA, IA or GCE
347 # scopes = https://www.googleapis.com/auth/compute
351 # A comma-separated list of tags that must be applied to a node for it to
352 # be considered a compute node.
353 # The driver will automatically apply these tags to nodes it creates.
354 tags = zyxwv, compute
357 # New compute nodes will send pings to Arvados at this host.
358 # You may specify a port, and use brackets to disambiguate IPv6 addresses.
359 ping_host = hostname:port
361 # A file path for an SSH key that can log in to the compute node.
364 # The GCE image name and network zone name to use when creating new nodes.
366 # network = your_network_name
368 # JSON string of service account authorizations for this cluster.
369 # See http://libcloud.readthedocs.org/en/latest/compute/drivers/gce.html#specifying-service-account-scopes
370 # service_accounts = [{'email':'account@example.com', 'scopes':['storage-ro']}]
373 # You can define any number of Size sections to list node sizes you're
374 # willing to use. The Node Manager should boot the cheapest size(s) that
375 # can run jobs in the queue.
377 # The Size fields are interpreted the same way as with a libcloud NodeSize:
378 # http://libcloud.readthedocs.org/en/latest/compute/api.html#libcloud.compute.base.NodeSize
380 # See https://cloud.google.com/compute/docs/machine-types for a list
381 # of known machine types that may be used as a Size parameter.
383 # Each size section MUST define the number of cores are available in this
384 # size class (since libcloud does not provide any consistent API for exposing
386 # You may also want to define the amount of scratch space (expressed
387 # in GB) for Crunch jobs.
388 # You can also override Google's provided data fields (such as price per hour)
389 # by setting them here.
402 h3(#azure). Microsoft Azure
405 # Azure configuration for Arvados Node Manager.
406 # All times are in seconds unless specified otherwise.
409 # The management server responds to http://addr:port/status.json with
410 # a snapshot of internal state.
412 # Management server listening address (default 127.0.0.1)
415 # Management server port number (default -1, server is disabled)
419 # The dispatcher can customize the start and stop procedure for
420 # cloud nodes. For example, the SLURM dispatcher drains nodes
421 # through SLURM before shutting them down.
424 # Node Manager will ensure that there are at least this many nodes running at
425 # all times. If node manager needs to start new idle nodes for the purpose of
426 # satisfying min_nodes, it will use the cheapest node type. However, depending
427 # on usage patterns, it may also satisfy min_nodes by keeping alive some
428 # more-expensive nodes
431 # Node Manager will not start any compute nodes when at least this
435 # Upper limit on rate of spending (in $/hr), will not boot additional nodes
436 # if total price of already running nodes meets or exceeds this threshold.
437 # default 0 means no limit.
440 # Poll Azure nodes and Arvados for new information every N seconds.
443 # Polls have exponential backoff when services fail to respond.
444 # This is the longest time to wait between polls.
447 # If Node Manager can't succesfully poll a service for this long,
448 # it will never start or stop compute nodes, on the assumption that its
449 # information is too outdated.
450 poll_stale_after = 600
452 # If Node Manager boots a cloud node, and it does not pair with an Arvados
453 # node before this long, assume that there was a cloud bootstrap failure and
454 # shut it down. Note that normal shutdown windows apply (see the Cloud
455 # section), so this should be shorter than the first shutdown window value.
456 boot_fail_after = 1800
458 # "Node stale time" affects two related behaviors.
459 # 1. If a compute node has been running for at least this long, but it
460 # isn't paired with an Arvados node, do not shut it down, but leave it alone.
461 # This prevents the node manager from shutting down a node that might
462 # actually be doing work, but is having temporary trouble contacting the
464 # 2. When the Node Manager starts a new compute node, it will try to reuse
465 # an Arvados node that hasn't been updated for this long.
466 node_stale_after = 14400
468 # Scaling factor to be applied to nodes' available RAM size. Usually there's a
469 # variable discrepancy between the advertised RAM value on cloud nodes and the
470 # actual amount available.
471 # If not set, this value will be set to 0.95
472 node_mem_scaling = 0.95
474 # File path for Certificate Authorities
475 certs_file = /etc/ssl/certs/ca-certificates.crt
479 file = /var/log/arvados/node-manager.log
481 # Log level for most Node Manager messages.
482 # Choose one of DEBUG, INFO, WARNING, ERROR, or CRITICAL.
483 # WARNING lets you know when polling a service fails.
484 # INFO additionally lets you know when a compute node is started or stopped.
487 # You can also set different log levels for specific libraries.
488 # Pykka is the Node Manager's actor library.
489 # Setting this to DEBUG will display tracebacks for uncaught
490 # exceptions in the actors, but it's also very chatty.
493 # Setting apiclient to INFO will log the URL of every Arvados API request.
497 host = zyxwv.arvadosapi.com
498 token = ARVADOS_TOKEN
501 # Accept an untrusted SSL certificate from the API server?
507 # Shutdown windows define periods of time when a node may and may not be shut
508 # down. These are windows in full minutes, separated by commas. Counting from
509 # the time the node is booted, the node WILL NOT shut down for N1 minutes; then
510 # it MAY shut down for N2 minutes; then it WILL NOT shut down for N3 minutes;
511 # and so on. For example, "20, 999999" means the node may shut down between
512 # the 20th and 999999th minutes of uptime.
513 # Azure bills by the minute, so it makes sense to agressively shut down idle
514 # nodes. Specify at least two windows. You can add as many as you need beyond
516 shutdown_windows = 20, 999999
519 # Use "azure account list" with the azure CLI to get these values.
520 tenant_id = 00000000-0000-0000-0000-000000000000
521 subscription_id = 00000000-0000-0000-0000-000000000000
523 # The following directions are based on
524 # https://azure.microsoft.com/en-us/documentation/articles/resource-group-authenticate-service-principal/
526 # azure config mode arm
527 # azure ad app create --name "<Your Application Display Name>" --home-page "<https://YourApplicationHomePage>" --identifier-uris "<https://YouApplicationUri>" --password <Your_Password>
528 # azure ad sp create "<Application_Id>"
529 # azure role assignment create --objectId "<Object_Id>" -o Owner -c /subscriptions/{subscriptionId}/
531 # Use <Application_Id> for "key" and the <Your_Password> for "secret"
533 key = 00000000-0000-0000-0000-000000000000
539 # The resource group in which the compute node virtual machines will be created
541 ex_resource_group = ArvadosResourceGroup
544 # The compute node image, as a link to a VHD in Azure blob store.
545 image = https://example.blob.core.windows.net/system/Microsoft.Compute/Images/images/zyxwv-compute-osDisk.vhd
547 # Path to a local ssh key file that will be used to provision new nodes.
548 ssh_key = /home/arvadosuser/.ssh/id_rsa.pub
550 # The account name for the admin user that will be provisioned on new nodes.
551 ex_user_name = arvadosuser
553 # The Azure storage account that will be used to store the node OS disk images.
554 ex_storage_account = arvadosstorage
556 # The virtual network the VMs will be associated with.
557 ex_network = ArvadosNetwork
559 # Optional subnet of the virtual network.
563 tag_arvados-class = dynamic-compute
566 # the API server to ping
567 ping_host = hostname:port
569 # You can define any number of Size sections to list Azure sizes you're willing
570 # to use. The Node Manager should boot the cheapest size(s) that can run jobs
571 # in the queue. You must also provide price per hour as the Azure driver
572 # compute currently does not report prices.
574 # See https://azure.microsoft.com/en-us/pricing/details/virtual-machines/
575 # for a list of known machine types that may be used as a Size parameter.
577 # Each size section MUST define the number of cores are available in this
578 # size class (since libcloud does not provide any consistent API for exposing
580 # You may also want to define the amount of scratch space (expressed
581 # in GB) for Crunch jobs. You can also override Microsoft's provided
582 # data fields by setting them here.
596 $ arvados-node-manager --config /etc/arvados-node-manager/config.ini