Skip to content

Commit 1140f53

Browse files
committed
k8s, terraform: Update infrastructure for new payments
Changes in this commit: - Split up the terraform configuration into separate files, grouping private information under new secrets. - Make indexer-agent and indexer-service stateful sets. - Add Vector node configuration and stateful set.
1 parent d8d4f62 commit 1140f53

15 files changed

+417
-186
lines changed

k8s/base/index-node/stateful_set.yaml

+10-7
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ spec:
2727
operator: "Exists"
2828
effect: "NoSchedule"
2929
volumes:
30-
- name: nfs-shared
31-
persistentVolumeClaim:
32-
claimName: nfs-shared
33-
readOnly: false
30+
- name: nfs-shared
31+
persistentVolumeClaim:
32+
claimName: nfs-shared
33+
readOnly: false
3434
containers:
3535
- name: graph-node
3636
image: graph-node-image
@@ -52,7 +52,7 @@ spec:
5252
- name: BLOCK_INGESTOR
5353
value: index-node-0
5454
- name: GRAPH_KILL_IF_UNRESPONSIVE
55-
value: 'true'
55+
value: "true"
5656
- name: postgres_host
5757
valueFrom:
5858
secretKeyRef:
@@ -69,7 +69,10 @@ spec:
6969
name: postgres-credentials
7070
key: password
7171
- name: postgres_db
72-
value: graph
72+
valueFrom:
73+
secretKeyRef:
74+
name: postgres-credentials
75+
key: graph_db
7376
- name: node_role
7477
value: index-node
7578
- name: node_id
@@ -82,4 +85,4 @@ spec:
8285
name: ethereum-networks
8386
key: networks
8487
- name: ipfs
85-
value: https://ipfs.network.thegraph.com
88+
value: https://ipfs.network.thegraph.com

k8s/base/indexer-agent/service.yaml

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: indexer-agent
5+
spec:
6+
type: NodePort
7+
selector:
8+
app: indexer-agent
9+
ports:
10+
- name: vector-events
11+
protocol: TCP
12+
port: 8001
13+
targetPort: 8001

k8s/base/indexer-agent/deployment.yaml renamed to k8s/base/indexer-agent/statefulset.yaml

+31-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
apiVersion: apps/v1
2-
kind: Deployment
2+
kind: StatefulSet
33
metadata:
44
name: indexer-agent
55
spec:
6+
serviceName: indexer-agent
67
selector:
78
matchLabels:
89
app: indexer-agent
@@ -34,8 +35,23 @@ spec:
3435
- name: INDEXER_AGENT_MNEMONIC
3536
valueFrom:
3637
secretKeyRef:
37-
name: indexer-mnemonic
38+
name: indexer
3839
key: mnemonic
40+
- name: INDEXER_AGENT_INDEXER_ADDRESS
41+
valueFrom:
42+
secretKeyRef:
43+
name: indexer
44+
key: indexer_address
45+
- name: INDEXER_AGENT_ETHEREUM_NETWORK
46+
valueFrom:
47+
secretKeyRef:
48+
name: ethereum
49+
key: network_name
50+
- name: INDEXER_AGENT_ETHEREUM
51+
valueFrom:
52+
secretKeyRef:
53+
name: ethereum
54+
key: url
3955
- name: INDEXER_AGENT_INDEX_NODE_IDS
4056
value: index-node-0
4157
- name: INDEXER_AGENT_GRAPH_NODE_QUERY_ENDPOINT
@@ -60,4 +76,16 @@ spec:
6076
name: postgres-credentials
6177
key: password
6278
- name: INDEXER_AGENT_POSTGRES_DATABASE
63-
value: indexer-service
79+
valueFrom:
80+
secretKeyRef:
81+
name: postgres-credentials
82+
key: indexer_db
83+
- name: INDEXER_AGENT_VECTOR_NODE
84+
value: http://vector-node.default.svc.cluster.local
85+
- name: INDEXER_AGENT_VECTOR_ROUTER
86+
valueFrom:
87+
secretKeyRef:
88+
name: vector-env
89+
key: router
90+
- name: INDEXER_AGENT_VECTOR_EVENT_SERVER
91+
value: http://indexer-agent.default.svc.cluster.local:8001/

k8s/base/indexer-service/deployment.yaml renamed to k8s/base/indexer-service/statefulset.yaml

+35-8
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
apiVersion: apps/v1
2-
kind: Deployment
2+
kind: StatefulSet
33
metadata:
44
name: indexer-service
55
spec:
6+
serviceName: indexer-service
67
selector:
78
matchLabels:
89
app: indexer-service
@@ -29,15 +30,33 @@ spec:
2930
- name: metrics
3031
containerPort: 7300
3132
env:
33+
- name: INDEXER_SERVICE_PORT
34+
value: "7600"
3235
- name: INDEXER_SERVICE_MNEMONIC
3336
valueFrom:
3437
secretKeyRef:
35-
name: indexer-mnemonic
38+
name: indexer
3639
key: mnemonic
37-
- name: INDEXER_SERVICE_PORT
38-
value: "7600"
40+
- name: INDEXER_SERVICE_INDEXER_ADDRESS
41+
valueFrom:
42+
secretKeyRef:
43+
name: indexer
44+
key: indexer_address
45+
- name: INDEXER_SERVICE_ETHEREUM_NETWORK
46+
valueFrom:
47+
secretKeyRef:
48+
name: ethereum
49+
key: network_name
3950
- name: INDEXER_SERVICE_ETHEREUM
40-
value: https://kovan.alchemyapi.io/jsonrpc/demo/
51+
valueFrom:
52+
secretKeyRef:
53+
name: ethereum
54+
key: url
55+
- name: INDEXER_SERVICE_NETWORK_SUBGRAPH_ENDPOINT
56+
valueFrom:
57+
secretKeyRef:
58+
name: network-subgraph
59+
key: endpoint
4160
- name: INDEXER_SERVICE_GRAPH_NODE_QUERY_ENDPOINT
4261
value: http://query-node.default.svc.cluster.local/
4362
- name: INDEXER_SERVICE_GRAPH_NODE_STATUS_ENDPOINT
@@ -60,11 +79,19 @@ spec:
6079
name: postgres-credentials
6180
key: password
6281
- name: INDEXER_SERVICE_POSTGRES_DATABASE
63-
value: indexer-service
64-
- name: INDEXER_SERVICE_WALLET_SKIP_EVM_VALIDATION
65-
value: "true"
82+
valueFrom:
83+
secretKeyRef:
84+
name: postgres-credentials
85+
key: indexer_db
6686
- name: INDEXER_SERVICE_FREE_QUERY_AUTH_TOKEN
6787
valueFrom:
6888
secretKeyRef:
6989
name: free-query-auth-token
7090
key: token
91+
- name: INDEXER_SERVICE_VECTOR_NODE
92+
value: http://vector-node.default.svc.cluster.local
93+
- name: INDEXER_SERVICE_VECTOR_ROUTER
94+
valueFrom:
95+
secretKeyRef:
96+
name: vector-env
97+
key: router

k8s/base/kustomization.yaml

+4-2
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,16 @@ resources:
88
- query-node/deployment.yaml
99
- query-node/proxy.yaml
1010
- query-node/service.yaml
11-
- indexer-agent/deployment.yaml
11+
- indexer-agent/service.yaml
12+
- indexer-agent/statefulset.yaml
1213
- indexer-service/backend_config.yaml
13-
- indexer-service/deployment.yaml
14+
- indexer-service/statefulset.yaml
1415
- indexer-service/service.yaml
1516
- shell.yaml
1617
- nfs.yaml
1718
- prometheus.yaml
1819
- grafana.yaml
1920
- ingress.yaml
21+
- vector.yaml
2022

2123
namespace: default

k8s/base/vector.yaml

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: vector-node
5+
spec:
6+
selector:
7+
app: vector-node
8+
ports:
9+
- name: api
10+
protocol: TCP
11+
port: 80
12+
targetPort: api
13+
---
14+
apiVersion: apps/v1
15+
kind: StatefulSet
16+
metadata:
17+
name: vector-node
18+
labels:
19+
app: vector-node
20+
spec:
21+
serviceName: vector-node
22+
replicas: 1
23+
selector:
24+
matchLabels:
25+
app: vector-node
26+
template:
27+
metadata:
28+
labels:
29+
app: vector-node
30+
spec:
31+
containers:
32+
- name: node
33+
image: vector-node
34+
ports:
35+
- name: api
36+
containerPort: 8000
37+
livenessProbe:
38+
httpGet:
39+
path: /ping
40+
port: 8000
41+
readinessProbe:
42+
httpGet:
43+
path: /ping
44+
port: 8000
45+
env:
46+
- name: VECTOR_CONFIG
47+
valueFrom:
48+
secretKeyRef:
49+
name: vector-env
50+
key: config
51+
- name: VECTOR_PROD
52+
value: 'true'
53+
- name: VECTOR_MNEMONIC
54+
valueFrom:
55+
secretKeyRef:
56+
name: vector-env
57+
key: mnemonic
58+
- name: VECTOR_PG_HOST
59+
valueFrom:
60+
secretKeyRef:
61+
name: postgres-credentials
62+
key: host
63+
- name: VECTOR_PG_PORT
64+
value: '5432'
65+
- name: VECTOR_PG_DATABASE
66+
valueFrom:
67+
secretKeyRef:
68+
name: postgres-credentials
69+
key: vector_db
70+
- name: VECTOR_PG_USERNAME
71+
valueFrom:
72+
secretKeyRef:
73+
name: postgres-credentials
74+
key: user
75+
- name: VECTOR_PG_PASSWORD
76+
valueFrom:
77+
secretKeyRef:
78+
name: postgres-credentials
79+
key: password

k8s/overlays/indexer_agent.yaml

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
apiVersion: apps/v1
2-
kind: Deployment
2+
kind: StatefulSet
33
metadata:
44
name: indexer-agent
55
spec:
@@ -11,11 +11,11 @@ spec:
1111
# Set this so it matches the index node pods
1212
- name: INDEXER_AGENT_INDEX_NODE_IDS
1313
value: index_node_0,index_node_1
14-
# Set this to your Ethereum node/provider
15-
- name: INDEXER_AGENT_ETHEREUM
16-
value: https://eth-mainnet.node/
14+
15+
# Set this to your indexer's geo location
16+
- name: INDEXER_AGENT_INDEXER_GEO_COORDINATES
17+
value: "0.00 0.00"
18+
1719
# Set this to the public URL that your indexer serves from
1820
- name: INDEXER_AGENT_PUBLIC_INDEXER_URL
1921
value: http://not.localhost/
20-
- name: INDEXER_AGENT_NETWORK_SUBGRAPH_ENDPOINT
21-
value: https://gateway.network.thegraph.com/network

k8s/overlays/indexer_service.yaml

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
apiVersion: apps/v1
2-
kind: Deployment
2+
kind: StatefulSet
33
metadata:
44
name: indexer-service
55
spec:
6+
replicas: 4
67
template:
78
spec:
89
containers:
910
- name: indexer-service
10-
env:
11-
# Set this to your Ethereum node/provider
12-
- name: INDEXER_SERVICE_ETHEREUM
13-
value: https://kovan.alchemyapi.io/jsonrpc/demo/

terraform/database.tf

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#
2+
# CloudSQL Postgres Database
3+
#
4+
5+
# CloudSQL requires that a fairly long, unspecified amount of time
6+
# passes before a database name can be reused. To ease testing where
7+
# we create and destroy databases a lot, we append 4 random digits to
8+
# the database name.
9+
resource "random_integer" "dbname" {
10+
min = 1000
11+
max = 9999
12+
keepers = {
13+
indexer = "${var.indexer}"
14+
}
15+
}
16+
17+
resource "google_sql_database_instance" "graph" {
18+
database_version = "POSTGRES_12"
19+
name = "${var.indexer}-${random_integer.dbname.result}"
20+
settings {
21+
activation_policy = "ALWAYS"
22+
availability_type = "ZONAL"
23+
disk_autoresize = true
24+
disk_size = 100
25+
disk_type = "PD_SSD"
26+
tier = var.database_tier
27+
ip_configuration {
28+
ipv4_enabled = false
29+
private_network = "projects/${var.project}/global/networks/default"
30+
}
31+
backup_configuration {
32+
binary_log_enabled = false
33+
enabled = true
34+
start_time = "02:00"
35+
}
36+
database_flags {
37+
name = "log_temp_files"
38+
value = "-1"
39+
}
40+
database_flags {
41+
name = "log_lock_waits"
42+
value = "on"
43+
}
44+
}
45+
}
46+
47+
resource "google_sql_database" "graph" {
48+
name = "graph"
49+
instance = google_sql_database_instance.graph.name
50+
}
51+
52+
resource "google_sql_database" "indexer-service" {
53+
name = "indexer-service"
54+
instance = google_sql_database_instance.graph.name
55+
}
56+
57+
resource "google_sql_database" "vector" {
58+
name = "vector"
59+
instance = google_sql_database_instance.graph.name
60+
}
61+
62+
resource "google_sql_user" "graph" {
63+
name = "graph"
64+
instance = google_sql_database_instance.graph.name
65+
password = var.database_password
66+
}

0 commit comments

Comments
 (0)