16625: a-d-c: add support for Azure managed images. Update our packer
[arvados.git] / doc / install / crunch2-cloud / install-compute-node.html.textile.liquid
1 ---
2 layout: default
3 navsection: installguide
4 title: Build a cloud compute node image
5 ...
6 {% comment %}
7 Copyright (C) The Arvados Authors. All rights reserved.
8
9 SPDX-License-Identifier: CC-BY-SA-3.0
10 {% endcomment %}
11
12 {% include 'notebox_begin_warning' %}
13 arvados-dispatch-cloud is only relevant for cloud installations. Skip this section if you are installing an on premises cluster that will spool jobs to Slurm.
14 {% include 'notebox_end' %}
15
16 # "Introduction":#introduction
17 # "Create an SSH keypair":#sshkeypair
18 # "The build script":#building
19 # "Build an Azure image":#azure
20 # "Build an AWS image":#aws
21
22 h2(#introduction). Introduction
23
24 This page describes how to build a compute node image that can be used to run containers dispatched by Arvados in the cloud.
25
26 Packer templates for AWS and Azure are provided with Arvados. To use them, the following are needed:
27
28 * "Packer":https://www.packer.io/
29 * credentials for your cloud account
30 * configuration details for your cloud account
31
32
33 h2(#sshkeypair). Create a SSH keypair
34
35 @arvados-dispatch-cloud@ communicates with the compute nodes via SSH. To do this securely, a SSH keypair is needed.
36
37 Generate a SSH keypair with no passphrase. The private key needs to be stored in the cluster configuration file (see @Containers/DispatchPrivateKey@) for use by @arvados-dispatch-cloud@, as described in the "next section":install-dispatch-cloud.html#update-config. The public key will be baked into the compute node images, see the cloud-specific documentation below.
38
39 <notextile>
40 <pre><code>~$ <span class="userinput">ssh-keygen -N '' -f ~/.ssh/id_dispatcher</span>
41 Generating public/private rsa key pair.
42 Your identification has been saved in /home/user/.ssh/id_dispatcher.
43 Your public key has been saved in /home/user/.ssh/id_dispatcher.pub.
44 The key fingerprint is:
45 [...]
46 ~$ <span class="userinput">cat ~/.ssh/id_dispatcher</span>
47 -----BEGIN RSA PRIVATE KEY-----
48 MIIEpQIBAAKCAQEAqXoCzcOBkFQ7w4dvXf9B++1ctgZRqEbgRYL3SstuMV4oawks
49 ttUuxJycDdsPmeYcHsKo8vsEZpN6iYsX6ZZzhkO5nEayUTU8sBjmg1ZCTo4QqKXr
50 ...
51 oFyAjVoexx0RBcH6BveTfQtJKbktP1qBO4mXo2dP0cacuZEtlAqW9Eb06Pvaw/D9
52 foktmqOY8MyctzFgXBpGTxPliGjqo8OkrOyQP2g+FL7v+Km31Xs61P8=
53 -----END RSA PRIVATE KEY-----
54 </code></pre>
55 </notextile>
56
57 h2(#building). The build script
58
59 The necessary files are located in the @arvados/tools/compute-images@ directory in the source tree. A build script is provided to generate the image. The @--help@ argument lists all available options:
60
61 <notextile><pre><code>~$ <span class="userinput">./build.sh --help</span>
62 build.sh: Build cloud images for arvados-dispatch-cloud
63
64 Syntax:
65         build.sh [options]
66
67 Options:
68
69   --json-file (required)
70       Path to the packer json file
71   --arvados-cluster-id (required)
72       The ID of the Arvados cluster, e.g. zzzzz
73   --aws-profile (default: false)
74       AWS profile to use (valid profile from ~/.aws/config
75   --aws-secrets-file (default: false, required if building for AWS)
76       AWS secrets file which will be sourced from this script
77   --aws-source-ami (default: false, required if building for AWS)
78       The AMI to use as base for building the images
79   --aws-region (default: us-east-1)
80       The AWS region to use for building the images
81   --aws-vpc-id (optional)
82       VPC id for AWS, otherwise packer will pick the default one
83   --aws-subnet-id
84       Subnet id for AWS otherwise packer will pick the default one for the VPC
85   --gcp-project-id (default: false, required if building for GCP)
86       GCP project id
87   --gcp-account-file (default: false, required if building for GCP)
88       GCP account file
89   --gcp-zone (default: us-central1-f)
90       GCP zone
91   --azure-secrets-file (default: false, required if building for Azure)
92       Azure secrets file which will be sourced from this script
93   --azure-resource-group (default: false, required if building for Azure)
94       Azure resource group
95   --azure-location (default: false, required if building for Azure)
96       Azure location, e.g. centralus, eastus, westeurope
97   --azure-sku (default: unset, required if building for Azure, e.g. 16.04-LTS)
98       Azure SKU image to use
99   --ssh_user  (default: packer)
100       The user packer will use lo log into the image
101   --domain  (default: arvadosapi.com)
102       The domain part of the FQDN for the cluster
103   --resolver (default: 8.8.8.8)
104       The dns resolver for the machine
105   --reposuffix (default: unset)
106       Set this to "-dev" to track the unstable/dev Arvados repositories
107   --public-key-file (required)
108       Path to the public key file that a-d-c will use to log into the compute node
109   --debug
110       Output debug information (default: false)
111 </code></pre></notextile>
112
113 h2(#azure). Build an Azure image
114
115 <notextile><pre><code>~$ <span class="userinput">./build.sh --json-file arvados-images-azure.json \
116            --arvados-cluster-id ClusterID \
117            --azure-resource-group ResourceGroup \
118            --azure-location AzureRegion \
119            --azure-sku AzureSKU \
120            --azure-secrets-file AzureSecretsFilePath \
121            --resolver ResolverIP \
122            --public-key-file ArvadosDispatchCloudPublicKeyPath
123 </span>
124 </code></pre></notextile>
125
126 For @ClusterID@, fill in your cluster ID. The @ResourceGroup@ and @AzureRegion@ (e.g. 'eastus2') should be configured for where you want the compute image to be generated and stored. The @AzureSKU@ is the SKU of the base image to be used, e.g. '18.04-LTS' for Ubuntu 18.04.
127
128 @AzureSecretsFilePath@ should be replaced with the path to a shell script that loads the Azure secrets with sufficient permissions to create the image. The file would look like this:
129
130 <notextile><pre><code>export ARM_CLIENT_ID=...
131 export ARM_CLIENT_SECRET=...
132 export ARM_SUBSCRIPTION_ID=...
133 export ARM_TENANT_ID=...
134 </code></pre></notextile>
135
136 These secrets can be generated from the Azure portal, or with the cli using a command like this:
137
138 <notextile><pre><code>~$ <span class="userinput">az ad sp create-for-rbac --name Packer --password ...</span>
139 </code></pre></notextile>
140
141 @ArvadosDispatchCloudPublicKeyPath@ should be replaced with the path to the ssh *public* key file generated in "Create an SSH keypair":#sshkeypair, above.
142
143 Compute nodes must be able to resolve the hostnames of the API server and any keepstore servers to your internal IP addresses. You can do this by running an internal DNS resolver. The IP address of the resolver should replace the string @ResolverIP@ in the command above.
144
145 Alternatively, the services could be hardcoded into an @/etc/hosts@ file. For example:
146
147 <notextile><pre><code>10.20.30.40     <span class="userinput">ClusterID.example.com</span>
148 10.20.30.41     <span class="userinput">keep1.ClusterID.example.com</span>
149 10.20.30.42     <span class="userinput">keep2.ClusterID.example.com</span>
150 </code></pre></notextile>
151
152 Adding these lines to the @/etc/hosts@ file in the compute node image could be done with a small change to the Packer template and the @scripts/base.sh@ script, which will be left as an exercise for the reader.
153
154 h2(#aws). Build an AWS image
155
156 <notextile><pre><code>~$ <span class="userinput">./build.sh --json-file arvados-images-aws.json \
157            --arvados-cluster-id ClusterID \
158            --aws-profile AWSProfile \
159            --aws-source-ami AMI \
160            --aws-vpc-id VPC \
161            --aws-subnet-id Subnet \
162            --ssh_user admin \
163            --resolver ResolverIP \
164            --public-key-file ArvadosDispatchCloudPublicKeyPath
165 </span>
166 </code></pre></notextile>
167
168 For @ClusterID@, fill in your cluster ID. The @VPC@ and @Subnet@ should be configured for where you want the compute image to be generated and stored. The @AMI@ is the identifier for the base image to be used. Current AMIs are maintained by "Debian":https://wiki.debian.org/Cloud/AmazonEC2Image/Buster and "Ubuntu":https://cloud-images.ubuntu.com/locator/ec2/.
169
170 @AWSProfile@ should be replaced with the name of an AWS profile with sufficient permissions to create the image.
171
172 @ArvadosDispatchCloudPublicKeyPath@ should be replaced with the path to the ssh *public* key file generated in "Create an SSH keypair":#sshkeypair, above.
173
174 Compute nodes must be able to resolve the hostnames of the API server and any keepstore servers to your internal IP addresses. You can do this by running an internal DNS resolver. The IP address of the resolver should replace the string @ResolverIP@ in the command above.
175
176 Alternatively, the services could be hardcoded into an @/etc/hosts@ file. For example:
177
178 <notextile><pre><code>10.20.30.40     <span class="userinput">ClusterID.example.com</span>
179 10.20.30.41     <span class="userinput">keep1.ClusterID.example.com</span>
180 10.20.30.42     <span class="userinput">keep2.ClusterID.example.com</span>
181 </code></pre></notextile>
182
183 Adding these lines to the @/etc/hosts@ file in the compute node image could be done with a small change to the Packer template and the @scripts/base.sh@ script, which will be left as an exercise for the reader.