Merge branch '14198-index-accepts-cluster-id' refs #14198
[arvados.git] / doc / admin / spot-instances.html.textile.liquid
1 ---
2 layout: default
3 navsection: admin
4 title: Using AWS Spot instances
5 ...
6
7 {% comment %}
8 Copyright (C) The Arvados Authors. All rights reserved.
9
10 SPDX-License-Identifier: CC-BY-SA-3.0
11 {% endcomment %}
12
13 This page describes how to set up the system to take advantage of "Amazon's EC2 spot instances":https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html.
14
15 h3. Nodemanager
16
17 Nodemanager should have configured cloud sizes that include the @preemptible@ boolean parameter. For example, for every on-demand cloud node size, you could create a @.spot@ variant, like this:
18
19 <pre>
20 [Size m4.large]
21 cores = 2
22 scratch = 32000
23
24 [Size m4.large.spot]
25 cores = 2
26 instance_type = m4.large
27 preemptible = true
28 scratch = 32000
29 </pre>
30
31 h3. Slurm dispatcher
32
33 The @crunch-dispatch-slurm@ service needs a matching instance type configuration on @/etc/arvados/config.yml@, following the previous example:
34
35 <pre>
36 Clusters:
37   uuid_prefix:
38     InstanceTypes:
39     - Name: m4.large
40       VCPUs: 2
41       RAM: 7782000000
42       Scratch: 32000000000
43       Price: 0.1
44     - Name: m4.large.spot
45       Preemptible: true
46       VCPUs: 2
47       RAM: 7782000000
48       Scratch: 32000000000
49       Price: 0.1
50 </pre>
51
52 @InstanceType@ names should match those defined on nodemanager's config file because it's @crunch-dispatch-slurm@'s job to select the instance type and communicate the decision to @nodemanager@ via Slurm.
53
54 h3. API Server
55
56 Container requests will need the @preemptible@ scheduling parameter included, to make the dispatcher request a spot instance. The API Server configuration file includes an option that when active, will auto assign the @preemptible@ parameter to any new child container request if it doesn't have it already. To activate this feature, the following should be added to the @application.yml@ file:
57
58 <pre>
59 preemptible_instances: true
60 </pre>
61
62 With this configuration active, child container requests should include the @preemptible = false@ parameter at creation time to avoid being scheduled for spot instance usage.
63
64 h3. AWS Permissions
65
66 When requesting spot instances, Amazon's API may return an authorization error depending on how users and permissions are set on the account. If this is the case check nodemanager's log for:
67
68 <pre>
69 BaseHTTPError: AuthFailure.ServiceLinkedRoleCreationNotPermitted: The provided credentials do not have permission to create the service-linked role for EC2 Spot Instances.
70 </pre>
71
72 The account needs to have a service linked role created. This can be done by logging into the AWS account, go to _IAM Management_ &rarr; _Roles_ and create the @AWSServiceRoleForEC2Spot@ role by clicking on the @Create@ button, selecting @EC2@ service and @EC2 - Spot Instances@ use case.
73
74 h3. Cost Tracking
75
76 Amazon's Spot instances prices are declared at instance request time and defined by the maximum price that the user is willing to pay per hour. By default, this price is the same amount as the on-demand version of each instance type, and this setting is the one that nodemanager uses for now, as it doesn't include any pricing data to the spot instance request.
77
78 The real price that a spot instance has at any point in time is discovered at the end of each usage hour, depending on instance demand. For this reason, AWS provides a data feed subscription to get hourly logs, as described on "Amazon's User Guide":https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html.