Merge branch '21644-flaky-test'
[arvados.git] / doc / install / install-manual-prerequisites.html.textile.liquid
1 ---
2 layout: default
3 navsection: installguide
4 title: Planning and prerequisites
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 Before attempting installation, you should begin by reviewing supported platforms, choosing backends for identity, storage, and scheduling, and decide how you will distribute Arvados services onto machines.  You should also choose an Arvados Cluster ID, choose your hostnames, and aquire TLS certificates.  It may be helpful to make notes as you go along using one of these worksheets:  "New cluster checklist for AWS":new_cluster_checklist_AWS.xlsx - "New cluster checklist for Azure":new_cluster_checklist_Azure.xlsx - "New cluster checklist for on premises Slurm":new_cluster_checklist_slurm.xlsx
13
14 The installation guide describes how to set up a basic standalone Arvados instance.  Additional configuration for features including "federation,":{{site.baseurl}}/admin/federation.html "collection versioning,":{{site.baseurl}}/admin/collection-versioning.html "managed properties,":{{site.baseurl}}/admin/collection-managed-properties.html and "storage classes":{{site.baseurl}}/admin/collection-managed-properties.html are described in the "Admin guide.":{{site.baseurl}}/admin
15
16 The Arvados storage subsystem is called "keep".  The compute subsystem is called "crunch".
17
18 # "Supported GNU/Linux distributions":#supportedlinux
19 # "Choosing which components to install":#components
20 # "Identity provider":#identity
21 # "Storage backend (Keep)":#storage
22 # "Container compute scheduler (Crunch)":#scheduler
23 # "Hardware or virtual machines":#machines
24 # "Arvados Cluster ID":#clusterid
25 # "DNS and TLS":#dnstls
26
27
28 h2(#supportedlinux). Supported GNU/Linux distributions
29
30 {% include 'supportedlinux' %}
31
32 h2(#components). Choosing which components to install
33
34 Arvados consists of many components, some of which may be omitted (at the cost of reduced functionality.)  It may also be helpful to review the "Arvados Architecture":{{site.baseurl}}/architecture to understand how these components interact.
35
36 table(table table-bordered table-condensed).
37 |\3=. *Core*|
38 |"PostgreSQL database":install-postgresql.html |Stores data for the API server.|Required.|
39 |"API server + Controller":install-api-server.html |Core Arvados logic for managing users, groups, collections, containers, and enforcing permissions.|Required.|
40 |\3=. *Keep (storage)*|
41 |"Keepstore":install-keepstore.html |Stores content-addressed blocks in a variety of backends (local filesystem, cloud object storage).|Required.|
42 |"Keepproxy":install-keepproxy.html |Gateway service to access keep servers from external networks.|Required to be able to use arv-put, arv-get, or arv-mount outside the private Arvados network.|
43 |"Keep-web":install-keep-web.html |Gateway service providing read/write HTTP and WebDAV support on top of Keep.|Required to access files from Workbench.|
44 |"Keep-balance":install-keep-balance.html |Storage cluster maintenance daemon responsible for moving blocks to their optimal server location, adjusting block replication levels, and trashing unreferenced blocks.|Required to free deleted data from underlying storage, and to ensure proper replication and block distribution (including support for storage classes).|
45 |\3=. *User interface*|
46 |"Workbench2":install-workbench2-app.html |Primary graphical user interface for working with file collections and running containers.|Optional.  Depends on API server, keep-web, websockets server.|
47 |\3=. *Additional services*|
48 |"Websockets server":install-ws.html |Event distribution server.|Required to view streaming container logs in Workbench.|
49 |"Shell server":install-shell-server.html |Grant Arvados users access to Unix shell accounts on dedicated shell nodes.|Optional.|
50 |"Git server":install-arv-git-httpd.html |Arvados-hosted git repositories, with Arvados-token based authentication.|Optional|
51 |\3=. *Crunch (running containers)*|
52 |"arvados-dispatch-cloud":crunch2-cloud/install-dispatch-cloud.html |Run analysis workflows on cloud by allocating and freeing cloud VM instances on demand.|Optional|
53 |"crunch-dispatch-slurm":crunch2-slurm/install-dispatch.html |Run analysis workflows distributed across a Slurm cluster.|Optional|
54 |"crunch-dispatch-lsf":crunch2-lsf/install-dispatch.html |Run analysis workflows distributed across an LSF cluster.|Optional|
55
56 h2(#identity). Identity provider
57
58 Choose which backend you will use to authenticate users.
59
60 * Google login to authenticate users with a Google account.
61 * OpenID Connect (OIDC) if you have Single-Sign-On (SSO) service that supports the OpenID Connect standard.
62 * LDAP login to authenticate users by username/password using the LDAP protocol, supported by many services such as OpenLDAP and Active Directory.
63 * PAM login to authenticate users by username/password according to the PAM configuration on the controller node.
64
65 h2(#postgresql). PostgreSQL
66
67 Arvados works well with a standalone PostgreSQL installation. When deploying on AWS, Aurora RDS also works but Aurora Serverless is not recommended.
68
69 h2(#storage). Storage backend
70
71 Choose which backend you will use for storing and retrieving content-addressed Keep blocks.
72
73 * File systems storage, such as ext4 or xfs, or network file systems such as GPFS or Lustre
74 * Amazon S3, or other object storage that supports the S3 API including Google Cloud Storage and Ceph.
75 * Azure blob storage
76
77 You should also determine the desired replication factor for your data.  A replication factor of 1 means only a single copy of a given data block is kept.  With a conventional file system backend and a replication factor of 1, a hard drive failure is likely to lose data.  For this reason the default replication factor is 2 (two copies are kept).
78
79 A backend may have its own replication factor (such as durability guarantees of cloud buckets) and Arvados will take this into account when writing a new data block.
80
81 h2(#scheduler). Container compute scheduler
82
83 Choose which backend you will use to schedule computation.
84
85 * On AWS EC2 and Azure, you probably want to use @arvados-dispatch-cloud@ to manage the full lifecycle of cloud compute nodes: starting up nodes sized to the container request, executing containers on those nodes, and shutting nodes down when no longer needed.
86 * For on-premises HPC clusters using "slurm":https://slurm.schedmd.com/ use @crunch-dispatch-slurm@ to execute containers with slurm job submissions.
87 * For on-premises HPC clusters using "LSF":https://www.ibm.com/products/hpc-workload-management/ use @crunch-dispatch-lsf@ to execute containers with slurm job submissions.
88 * For single node demos, use @crunch-dispatch-local@ to execute containers directly.
89
90 h2(#machines). Hardware (or virtual machines)
91
92 Choose how to allocate Arvados services to machines.  We recommend that each machine start with a clean installation of a supported GNU/Linux distribution.
93
94 For a production installation, this is a reasonable starting point:
95
96 <div class="offset1">
97 table(table table-bordered table-condensed).
98 |_. Function|_. Number of nodes|_. Recommended specs|
99 |PostgreSQL database, Arvados API server, Arvados controller, Git, Websockets, Container dispatcher|1|16+ GiB RAM, 4+ cores, fast disk for database|
100 |Workbench, Keepproxy, Keep-web, Keep-balance|1|8 GiB RAM, 2+ cores|
101 |Keepstore servers ^1^|2+|4 GiB RAM|
102 |Compute worker nodes ^1^|0+ |Depends on workload; scaled dynamically in the cloud|
103 |User shell nodes ^2^|0+|Depends on workload|
104 </div>
105
106 ^1^ Should be scaled up as needed
107 ^2^ Refers to shell nodes managed by Arvados that provide ssh access for users to interact with Arvados at the command line.  Optional.
108
109 {% include 'notebox_begin' %}
110 For a small demo installation, it is possible to run all the Arvados services on a single node.  Special considerations for single-node installs will be noted in boxes like this.
111 {% include 'notebox_end' %}
112
113 h2(#clusterid). Arvados Cluster ID
114
115 Each Arvados installation is identified by a cluster identifier, which is a unique 5-character lowercase alphanumeric string. There are 36 5 = 60466176 possible cluster identifiers.
116
117 * For automated test purposes, use “z****”
118 * For experimental/local-only/private clusters that won’t ever be visible on the public Internet, use “x****”
119 * For long-lived clusters, we recommend reserving a cluster id.  Contact "info@curii.com":mailto:info@curii.com for more information.
120
121 Here is one way to make a random 5-character string:
122
123 <notextile>
124 <pre><code>~$ <span class="userinput">tr -dc 0-9a-z &lt;/dev/urandom | head -c5; echo</span>
125 </code></pre>
126 </notextile>
127
128 You may also use a different method to pick the cluster identifier. The cluster identifier will be part of the hostname of the services in your Arvados cluster. The rest of this documentation will refer to it as your @ClusterID@.  Whenever @ClusterID@ appears in a configuration example, replace it with your five-character cluster identifier.
129
130 h2(#dnstls). DNS entries and TLS certificates
131
132 The following services are normally public-facing and require DNS entries and corresponding TLS certificates.  Get certificates from your preferred TLS certificate provider.  We recommend using "Let's Encrypt":https://letsencrypt.org/.  You can run several services on the same node, but each distinct DNS name requires a valid, matching TLS certificate.
133
134 This guide uses the following DNS name conventions.  A later part of this guide will describe how to set up Nginx virtual hosts.
135 It is possible to use custom DNS names for the Arvados services.
136
137 <div class="offset1">
138 table(table table-bordered table-condensed).
139 |_. Function|_. DNS name|
140 |Arvados API|@ClusterID.example.com@|
141 |Arvados Git server|git.@ClusterID.example.com@|
142 |Arvados Webshell|webshell.@ClusterID.example.com@|
143 |Arvados Websockets endpoint|ws.@ClusterID.example.com@|
144 |Arvados Workbench|workbench.@ClusterID.example.com@|
145 |Arvados Workbench 2|workbench2.@ClusterID.example.com@|
146 |Arvados Keepproxy server|keep.@ClusterID.example.com@|
147 |Arvados Keep-web server|download.@ClusterID.example.com@
148 _and_
149 *.collections.@ClusterID.example.com@ _or_
150 *<notextile>--</notextile>collections.@ClusterID.example.com@ _or_
151 collections.@ClusterID.example.com@ (see the "keep-web install docs":install-keep-web.html)|
152 </div>
153
154 Setting up Arvados is easiest when Wildcard TLS and wildcard DNS are available. It is also possible to set up Arvados without wildcard TLS and DNS, but not having a wildcard for @keep-web@ (i.e. not having *.collections.@ClusterID.example.com@) comes with a tradeoff: it will disable some features that allow users to view Arvados-hosted data in their browsers. More information on this tradeoff caused by the CORS rules applied by modern browsers is available in the "keep-web URL pattern guide":../api/keep-web-urls.html.
155
156 The table below lists the required TLS certificates and DNS names in each scenario.
157
158 <div class="offset1">
159 table(table table-bordered table-condensed).
160 ||_. Wildcard TLS and DNS available|_. Wildcard TLS available|_. Other|
161 |TLS|@ClusterID.example.com@
162 *.@ClusterID.example.com@
163 *.collections.@ClusterID.example.com@|*.@ClusterID.example.com@
164 @ClusterID.example.com@|@ClusterID.example.com@
165 git.@ClusterID.example.com@
166 webshell.@ClusterID.example.com@
167 ws.@ClusterID.example.com@
168 workbench.@ClusterID.example.com@
169 workbench2.@ClusterID.example.com@
170 keep.@ClusterID.example.com@
171 download.@ClusterID.example.com@
172 collections.@ClusterID.example.com@|
173 |DNS|@ClusterID.example.com@
174 git.@ClusterID.example.com@
175 webshell.@ClusterID.example.com@
176 ws.@ClusterID.example.com@
177 workbench.@ClusterID.example.com@
178 workbench2.@ClusterID.example.com@
179 keep.@ClusterID.example.com@
180 download.@ClusterID.example.com@
181 *.collections.@ClusterID.example.com@|@ClusterID.example.com@
182 git.@ClusterID.example.com@
183 webshell.@ClusterID.example.com@
184 ws.@ClusterID.example.com@
185 workbench.@ClusterID.example.com@
186 workbench2.@ClusterID.example.com@
187 keep.@ClusterID.example.com@
188 download.@ClusterID.example.com@
189 collections.@ClusterID.example.com@|@ClusterID.example.com@
190 git.@ClusterID.example.com@
191 webshell.@ClusterID.example.com@
192 ws.@ClusterID.example.com@
193 workbench.@ClusterID.example.com@
194 workbench2.@ClusterID.example.com@
195 keep.@ClusterID.example.com@
196 download.@ClusterID.example.com@
197 collections.@ClusterID.example.com@|
198 </div>
199
200 {% include 'notebox_begin' %}
201 It is also possible to create your own certificate authority, issue server certificates, and install a custom root certificate in the browser.  This is out of scope for this guide.
202 {% include 'notebox_end' %}