Project

General

Profile

Cluster configuration » History » Version 3

Tom Clegg, 06/15/2018 06:33 PM

1 1 Tom Clegg
h1. Cluster configuration
2
3
We are (2018) consolidating configuration from per-microservice yaml/json/ini files into a single cluster configuration document that is used by all components.
4
* Long term: system nodes automatically keep their configs synchronized (using something like consul).
5
* Short term: sysadmin uses tools like puppet and terraform to ensure /etc/arvados/config.yml is identical on all system nodes.
6
* Hosts without config files (e.g., hosts outside the cluster) can retrieve the config document from the API server.
7
8
h2. Discovery document
9
10
Previously, we copied selected config values from the API server config into the API discovery document so clients could see them. When clients can get the configuration document itself, this won't be needed. The discovery document should advertise APIs provided by the server, not cluster configuration.
11
12
h2. Example config file
13
14
(Format not yet frozen!)
15
16
<pre><code class="yaml">
17
Clusters:
18
  xyzzy:
19
    BlobSigningKey: ungu355able
20
    BlobSignatureTTL: 172800
21
    Volumes:
22
      xyzzy-keep-0:
23
        Type: s3
24
        Region: us-east
25
        Bucket: xyzzy-keep-0
26
        # [rest of keepstore volume config goes here]
27
    Providers:
28
      AWS:
29
        # [credentials and stuff go here]
30
    InstanceTypes:
31
    - Name: m4.large
32
      VCPUs: 2
33
      RAM: 8000000000
34
      Scratch: 31000000000
35
      Price: 0.1
36
    - Name: m4.large-1t
37
      # same instance type as m4.large but our scripts attach more scratch
38
      ProviderType: m4.large
39
      VCPUs: 2
40
      RAM: 8000000000
41
      Scratch: 999000000000
42
      Price: 0.12
43
    - Name: m4.xlarge
44
      VCPUs: 4
45
      RAM: 16000000000
46
      Scratch: 78000000000
47
      Price: 0.2
48
    - Name: m4.8xlarge
49
      VCPUs: 40
50
      RAM: 160000000000
51
      Scratch: 156000000000
52
      Price: 2
53
    - Name: m4.16xlarge
54
      VCPUs: 64
55
      RAM: 256000000000
56
      Scratch: 310000000000
57
      Price: 3.2
58
    - Name: c4.large
59
      VCPUs: 2
60
      RAM: 3750000000
61
      Price: 0.1
62
    - Name: c4.8xlarge
63
      VCPUs: 36
64
      RAM: 60000000000
65
      Price: 1.591
66 3 Tom Clegg
    NodeProfiles:
67
      # Key is a profile name; can be specified on service prog command line, defaults to $(hostname)
68 2 Tom Clegg
      keep:
69 1 Tom Clegg
        # Don’t run other services automatically -- only specified ones
70
        Default: {Disable: true}
71 2 Tom Clegg
        Keepstore: {Listen: ":25107"}
72 1 Tom Clegg
      apiserver:
73
        Default: {Disable: true}
74 2 Tom Clegg
        RailsAPI: {Listen: ":9000", TLS: true}
75
        Controller: {Listen: ":9100"}
76
        Websocket: {Listen: ":9101"}
77
        Health: {Listen: ":9199"}
78 1 Tom Clegg
      keep:
79
        Default: {Disable: true}
80 2 Tom Clegg
        KeepProxy: {Listen: ":9102"}
81
        KeepWeb: {Listen: ":9103"}
82 1 Tom Clegg
      *:
83 3 Tom Clegg
        # This section used for a node whose profile name is not listed above
84 1 Tom Clegg
        Default: {Disable: false} # (this is the default behavior)
85
    PostgreSQL:
86
      Host: localhost
87
      Port: 5432
88
      Username: arvados
89
      Password: s3cr3t
90
      Database: arvados_production
91
      Encoding: utf8
92 3 Tom Clegg
    WebRoutes:
93 1 Tom Clegg
      # “default” means route according to method/path
94
      xyzzy.arvadosapi.com: default
95
      # “collections” means always route to keep-web
96
      collections.xyzzy.arvadosapi.com: collections
97
      # leading * is a wildcard (longest match wins)
98
      "*--collections.xyzzy.arvadosapi.com": collections
99
      cloud.curoverse.com: workbench
100
      workbench.xyzzy.arvadosapi.com: workbench
101
      "*.xyzzy.arvadosapi.com": default
102 2 Tom Clegg
    HTTPRequestTimeout: 5m
103 1 Tom Clegg
</code></pre>