Skip to content

Commit eb9ec16

Browse files
authored
feat: add blue/green proxy (#44)
* feat: add blue/green proxy * applied formatting
1 parent f7b61e8 commit eb9ec16

File tree

13 files changed

+202
-65
lines changed

13 files changed

+202
-65
lines changed

Diff for: bootstrap/configs/vector-testnet/config.json

+101
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
{
2+
"ByronGenesisFile": "/genesis/vector-testnet/byron.json",
3+
"ShelleyGenesisFile": "/genesis/vector-testnet/shelley.json",
4+
"AlonzoGenesisFile": "/genesis/vector-testnet/alonzo.json",
5+
"ConwayGenesisFile": "/genesis/vector-testnet/conway.json",
6+
"SocketPath": "db/node.socket",
7+
"PBftSignatureThreshold": 0.6,
8+
"MaxConcurrencyBulkSync": 1,
9+
"MaxConcurrencyDeadline": 2,
10+
"Protocol": "Cardano",
11+
"RequiresNetworkMagic": "RequiresMagic",
12+
"LastKnownBlockVersion-Major": 6,
13+
"LastKnownBlockVersion-Minor": 0,
14+
"LastKnownBlockVersion-Alt": 0,
15+
"TurnOnLogging": true,
16+
"TurnOnLogMetrics": true,
17+
"minSeverity": "Debug",
18+
"TracingVerbosity": "NormalVerbosity",
19+
"setupBackends": ["KatipBK"],
20+
"defaultBackends": ["KatipBK"],
21+
"hasEKG": 12788,
22+
"hasPrometheus": [
23+
"0.0.0.0",
24+
12798
25+
],
26+
"setupScribes": [
27+
{
28+
"scKind": "FileSK",
29+
"scName": "logs/mainnet.log",
30+
"scFormat": "ScText"
31+
},
32+
{
33+
"scKind": "StdoutSK",
34+
"scName": "stdout",
35+
"scFormat": "ScText"
36+
}
37+
],
38+
"defaultScribes": [
39+
["FileSK", "logs/mainnet.log"],
40+
["StdoutSK", "stdout"]
41+
],
42+
"rotation": {
43+
"rpLogLimitBytes": 5000000,
44+
"rpKeepFilesNum": 3,
45+
"rpMaxAgeHours": 24
46+
},
47+
"TraceBlockFetchClient": false,
48+
"TraceBlockFetchDecisions": false,
49+
"TraceBlockFetchProtocol": false,
50+
"TraceBlockFetchProtocolSerialised": false,
51+
"TraceBlockFetchServer": false,
52+
"TraceBlockchainTime": false,
53+
"TraceChainDb": true,
54+
"TraceChainSyncClient": false,
55+
"TraceChainSyncBlockServer": false,
56+
"TraceChainSyncHeaderServer": false,
57+
"TraceChainSyncProtocol": false,
58+
"TraceDNSResolver": true,
59+
"TraceDNSSubscription": true,
60+
"TraceErrorPolicy": true,
61+
"TraceLocalErrorPolicy": true,
62+
"TraceForge": true,
63+
"TraceHandshake": false,
64+
"TraceIpSubscription": true,
65+
"TraceLocalRootPeers": true,
66+
"TracePublicRootPeers": true,
67+
"TracePeerSelection": true,
68+
"TraceDebugPeerSelection": false,
69+
"TracePeerSelectionActions": true,
70+
"TraceConnectionManager": true,
71+
"TraceServer": true,
72+
"TraceLocalConnectionManager": false,
73+
"TraceLocalServer": false,
74+
"TraceLocalChainSyncProtocol": false,
75+
"TraceLocalHandshake": false,
76+
"TraceLocalTxSubmissionProtocol": false,
77+
"TraceLocalTxSubmissionServer": false,
78+
"TraceMempool": true,
79+
"TraceMux": false,
80+
"TraceTxInbound": false,
81+
"TraceTxOutbound": false,
82+
"TraceTxSubmissionProtocol": false,
83+
"options": {
84+
"mapBackends": {
85+
"cardano.node.metrics": ["EKGViewBK"]
86+
},
87+
"mapScribes": {
88+
"cardano.node.metrics": ["FileSK::logs/mainnet.log"]
89+
},
90+
"mapSeverity": {
91+
"cardano.node.ChainDB": "Notice",
92+
"cardano.node.DnsSubscription": "Debug"
93+
}
94+
},
95+
"TestShelleyHardForkAtEpoch": 0,
96+
"TestAllegraHardForkAtEpoch": 0,
97+
"TestMaryHardForkAtEpoch": 0,
98+
"TestAlonzoHardForkAtEpoch": 0,
99+
"TestBabbageHardForkAtEpoch": 0,
100+
"ExperimentalProtocolsEnabled": true
101+
}

Diff for: bootstrap/feature/monitor.tf

+28
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,31 @@ resource "kubernetes_manifest" "operator_monitor" {
2525
}
2626
}
2727
}
28+
29+
resource "kubernetes_manifest" "instance_monitor" {
30+
manifest = {
31+
apiVersion = "monitoring.coreos.com/v1"
32+
kind = "PodMonitor"
33+
metadata = {
34+
labels = {
35+
"app.kubernetes.io/component" = "o11y"
36+
"app.kubernetes.io/part-of" = "demeter"
37+
}
38+
name = "instance"
39+
namespace = var.namespace
40+
}
41+
spec = {
42+
selector = {
43+
matchLabels = {
44+
role = "instance"
45+
}
46+
}
47+
podMetricsEndpoints = [
48+
{
49+
port = "api",
50+
path = "/metrics"
51+
}
52+
]
53+
}
54+
}
55+
}

Diff for: bootstrap/feature/operator.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ resource "kubernetes_deployment_v1" "ogmios_operator" {
6868

6969
env {
7070
name = "DCU_PER_FRAME"
71-
value = "mainnet=${var.dcu_per_frame["mainnet"]},preprod=${var.dcu_per_frame["preprod"]},preview=${var.dcu_per_frame["preview"]}"
71+
value = "mainnet=${var.dcu_per_frame["mainnet"]},preprod=${var.dcu_per_frame["preprod"]},preview=${var.dcu_per_frame["preview"]},vector-testnet=${var.dcu_per_frame["vector-testnet"]}"
7272
}
7373

7474
env {

Diff for: bootstrap/instance/main.tf

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ variable "network" {
2727
type = string
2828

2929
validation {
30-
condition = contains(["mainnet", "preprod", "preview"], var.network)
31-
error_message = "Invalid network. Allowed values are mainnet, preprod and preview."
30+
condition = contains(["mainnet", "preprod", "preview", "vector-testnet"], var.network)
31+
error_message = "Invalid network. Allowed values are mainnet, preprod, preview and vector-testnet."
3232
}
3333
}
3434

Diff for: bootstrap/instance/monitor.tf

-27
This file was deleted.

Diff for: bootstrap/main.tf

+16-2
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,23 @@ module "ogmios_v1_proxy" {
2828
depends_on = [kubernetes_namespace.namespace]
2929
source = "./proxy"
3030
namespace = var.namespace
31-
replicas = var.proxy_replicas
32-
proxy_image_tag = var.proxy_image_tag
31+
replicas = var.proxy_blue_replicas
32+
proxy_image_tag = var.proxy_blue_image_tag
3333
extension_name = var.extension_name
34+
networks = ["mainnet", "preprod", "preview"]
35+
name = "proxy"
36+
}
37+
38+
module "ogmios_v1_proxy_green" {
39+
depends_on = [kubernetes_namespace.namespace]
40+
source = "./proxy"
41+
namespace = var.namespace
42+
replicas = var.proxy_green_replicas
43+
proxy_image_tag = var.proxy_green_image_tag
44+
extension_name = var.extension_name
45+
networks = ["mainnet", "preprod", "preview", "vector-testnet"]
46+
environment = "green"
47+
name = "proxy-green"
3448
}
3549

3650
// mainnet

Diff for: bootstrap/proxy/cert.tf

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@ locals {
88
])
99

1010
# Add the extra URL to the list of generated URLs
11-
dns_names = concat(local.by_network, ["*.${var.extension_name}.${var.dns_zone}"])
12-
cert_secret_name = "${var.extension_name}-wildcard-tls"
11+
dns_names = concat(local.by_network, ["*.${var.extension_name}.${var.dns_zone}"])
12+
cert_secret_name = var.environment != null ? "${var.extension_name}-${var.environment}-wildcard-tls" : "${var.extension_name}-wildcard-tls"
1313
}
1414

1515
resource "kubernetes_manifest" "certificate_cluster_wildcard_tls" {
1616
manifest = {
1717
"apiVersion" = "cert-manager.io/v1"
1818
"kind" = "Certificate"
1919
"metadata" = {
20-
"name" = "${var.extension_name}-wildcard-tls"
20+
"name" = local.cert_secret_name
2121
"namespace" = var.namespace
2222
}
2323
"spec" = {

Diff for: bootstrap/proxy/deployment.tf

+7-13
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,21 @@
11
resource "kubernetes_deployment_v1" "ogmios_proxy" {
22
wait_for_rollout = false
3-
depends_on = [ kubernetes_manifest.certificate_cluster_wildcard_tls ]
3+
depends_on = [kubernetes_manifest.certificate_cluster_wildcard_tls]
44

55
metadata {
66
name = local.name
77
namespace = var.namespace
8-
labels = {
9-
role = local.role
10-
}
8+
labels = local.proxy_labels
119
}
1210
spec {
1311
replicas = var.replicas
1412
selector {
15-
match_labels = {
16-
role = local.role
17-
}
13+
match_labels = local.proxy_labels
1814
}
1915
template {
2016
metadata {
21-
name = local.name
22-
labels = {
23-
role = local.role
24-
}
17+
name = local.name
18+
labels = local.proxy_labels
2519
}
2620
spec {
2721
container {
@@ -73,12 +67,12 @@ resource "kubernetes_deployment_v1" "ogmios_proxy" {
7367
}
7468

7569
env {
76-
name = "SSL_CRT_PATH"
70+
name = "SSL_CRT_PATH"
7771
value = "/certs/tls.crt"
7872
}
7973

8074
env {
81-
name = "SSL_KEY_PATH"
75+
name = "SSL_KEY_PATH"
8276
value = "/certs/tls.key"
8377
}
8478

Diff for: bootstrap/proxy/main.tf

+17-5
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,23 @@
11
locals {
2-
name = "proxy"
2+
name = var.name
33
role = "proxy"
44

55
prometheus_port = 9187
66
prometheus_addr = "0.0.0.0:${local.prometheus_port}"
77
proxy_port = 8080
88
proxy_addr = "0.0.0.0:${local.proxy_port}"
9+
# proxy_labels = var.environment != null ? { role = local.role, environment = var.environment } : { role = local.role }
10+
proxy_labels = var.environment != null ? { role = "${local.role}-${var.environment}" } : { role = local.role }
11+
}
12+
13+
variable "name" {
14+
type = string
15+
default = "proxy"
16+
}
17+
18+
// blue - green
19+
variable "environment" {
20+
default = null
921
}
1022

1123
variable "namespace" {
@@ -55,16 +67,16 @@ variable "extension_name" {
5567
}
5668

5769
variable "networks" {
58-
type = list(string)
59-
default = ["mainnet", "preprod", "preview"]
70+
type = list(string)
71+
default = ["mainnet", "preprod", "preview", "vector-testnet"]
6072
}
6173

6274
variable "versions" {
63-
type = list(string)
75+
type = list(string)
6476
default = ["5", "6"]
6577
}
6678

6779
variable "dns_zone" {
6880
type = string
6981
default = "demeter.run"
70-
}
82+
}

Diff for: bootstrap/proxy/monitor.tf

+2-4
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,12 @@ resource "kubernetes_manifest" "operator_monitor" {
77
"app.kubernetes.io/component" = "o11y"
88
"app.kubernetes.io/part-of" = "demeter"
99
}
10-
name = "proxy"
10+
name = local.name
1111
namespace = var.namespace
1212
}
1313
spec = {
1414
selector = {
15-
matchLabels = {
16-
role = "proxy"
17-
}
15+
matchLabels = local.proxy_labels
1816
}
1917
podMetricsEndpoints = [
2018
{

Diff for: bootstrap/proxy/service.tf

+1-3
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ resource "kubernetes_service_v1" "proxy_service" {
1313

1414
spec {
1515
load_balancer_class = "service.k8s.aws/nlb"
16-
selector = {
17-
role = local.role
18-
}
16+
selector = local.proxy_labels
1917

2018
port {
2119
name = "proxy"

Diff for: bootstrap/service/main.tf

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ variable "network" {
66
description = "cardano node network"
77

88
validation {
9-
condition = contains(["mainnet", "preprod", "preview"], var.network)
10-
error_message = "Invalid network. Allowed values are mainnet, preprod and preview."
9+
condition = contains(["mainnet", "preprod", "preview", "vector-testnet"], var.network)
10+
error_message = "Invalid network. Allowed values are mainnet, preprod, preview and vector-testnet."
1111
}
1212
}
1313

0 commit comments

Comments
 (0)