Consul » History » Version 7
Peter Amstutz, 10/26/2016 01:23 AM
1 | 1 | Peter Amstutz | h1. Consul |
---|---|---|---|
2 | |||
3 | 3 | Peter Amstutz | h2. Services |
4 | 2 | Peter Amstutz | |
5 | Each service must have a unique id, but may have a common name, for example: |
||
6 | |||
7 | <pre> |
||
8 | { |
||
9 | "service": { |
||
10 | "id": "zzzzz-bi6l4-ydim6qekt9ut47f", |
||
11 | "name": "keep", |
||
12 | "port": 80 |
||
13 | } |
||
14 | } |
||
15 | </pre> |
||
16 | |||
17 | <pre> |
||
18 | { |
||
19 | "service": { |
||
20 | "id": "zzzzz-bi6l4-9e7boja2v94hfj5", |
||
21 | "name": "keep", |
||
22 | "port": 80 |
||
23 | } |
||
24 | } |
||
25 | </pre> |
||
26 | |||
27 | A query on the "keep" service returns multiple nodes: |
||
28 | |||
29 | <pre> |
||
30 | $ curl http://localhost:8500/v1/catalog/service/keep | jq . |
||
31 | [ |
||
32 | { |
||
33 | "Node": "debian", |
||
34 | "Address": "127.0.0.1", |
||
35 | "TaggedAddresses": { |
||
36 | "lan": "127.0.0.1", |
||
37 | "wan": "127.0.0.1" |
||
38 | }, |
||
39 | "ServiceID": "zzzzz-bi6l4-9e7boja2v94hfj5", |
||
40 | "ServiceName": "keep", |
||
41 | "ServiceTags": [], |
||
42 | "ServiceAddress": "", |
||
43 | "ServicePort": 443, |
||
44 | "ServiceEnableTagOverride": false, |
||
45 | "CreateIndex": 7, |
||
46 | "ModifyIndex": 7 |
||
47 | }, |
||
48 | { |
||
49 | "Node": "debian", |
||
50 | "Address": "127.0.0.1", |
||
51 | "TaggedAddresses": { |
||
52 | "lan": "127.0.0.1", |
||
53 | "wan": "127.0.0.1" |
||
54 | }, |
||
55 | "ServiceID": "zzzzz-bi6l4-ydim6qekt9ut47f", |
||
56 | "ServiceName": "keep", |
||
57 | "ServiceTags": [], |
||
58 | "ServiceAddress": "", |
||
59 | "ServicePort": 80, |
||
60 | "ServiceEnableTagOverride": false, |
||
61 | "CreateIndex": 6, |
||
62 | 1 | Peter Amstutz | "ModifyIndex": 6 |
63 | } |
||
64 | ] |
||
65 | </pre> |
||
66 | 3 | Peter Amstutz | |
67 | h2. Configuration management |
||
68 | |||
69 | 5 | Peter Amstutz | Store configuration in Consul k/v store. Union of configuration for API server, workbench, etc. Can store master configuration file as a json file in git and push into k/v store using a tool such as https://github.com/gmr/consulate |
70 | 1 | Peter Amstutz | |
71 | 5 | Peter Amstutz | Use https://github.com/hashicorp/consul-template to write configuration files for individual components based on central configuration. Automatically restart services when configuration files are updated by consul-template. |
72 | |||
73 | 7 | Peter Amstutz | Services could eventually migrate to query Consul directly instead of using consul-template. |
74 | |||
75 | 3 | Peter Amstutz | |
76 | h2. Deployment |
||
77 | |||
78 | # Service packages have dependency on consul and consul-template. |
||
79 | 4 | Peter Amstutz | # Consul and consul-template run automatically from systemd unit. |
80 | # Orchestration system (terraform? puppet?) installs/updates packages, installs /etc/consul.d/service.json (e.g. /etc/consul.d/keepproxy.json), consul-template for configuration file. (Unclear if service.json and consul-template should be part of package or installed some other way.) |
||
81 | |||
82 | 3 | Peter Amstutz | h2. Transition to Consul |
83 | 1 | Peter Amstutz | |
84 | 6 | Peter Amstutz | API endpoints currently used for service discovery such as the keep services table should be removed from postgres and instead query Consul on the backend. |