Skip to content

Commit 51e00a4

Browse files
authored
[yugabyte] Working AWS implementation (#1191)
1 parent 4ff8160 commit 51e00a4

File tree

7 files changed

+150
-40
lines changed

7 files changed

+150
-40
lines changed

deploy/infrastructure/dependencies/terraform-aws-kubernetes/network_dns.tf

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11

22
locals {
3-
crdb_hostnames = var.aws_route53_zone_id == "" ? {} : { for i in aws_eip.ip_crdb[*] : i.tags.ExpectedDNS => i.public_ip }
3+
crdb_hostnames = var.aws_route53_zone_id == "" ? {} : { for i in aws_eip.ip_crdb[*] : i.tags.ExpectedDNS => i.public_ip }
4+
yugabyte_master_hostnames = var.aws_route53_zone_id == "" ? {} : { for i in aws_eip.ip_yugabyte_masters[*] : i.tags.ExpectedDNS => i.public_ip }
5+
yugabyte_tserver_hostnames = var.aws_route53_zone_id == "" ? {} : { for i in aws_eip.ip_yugabyte_tservers[*] : i.tags.ExpectedDNS => i.public_ip }
46
}
57

68

@@ -37,3 +39,25 @@ resource "aws_route53_record" "crdb_hostname" {
3739
ttl = 300
3840
records = [each.value]
3941
}
42+
43+
# Yugabyte master nodes DNS
44+
resource "aws_route53_record" "yugabyte_master_hostnames" {
45+
for_each = local.yugabyte_master_hostnames
46+
47+
zone_id = var.aws_route53_zone_id
48+
name = each.key
49+
type = "A"
50+
ttl = 300
51+
records = [each.value]
52+
}
53+
54+
# Yugabyte tserver nodes DNS
55+
resource "aws_route53_record" "yugabyte_tserver_hostnames" {
56+
for_each = local.yugabyte_tserver_hostnames
57+
58+
zone_id = var.aws_route53_zone_id
59+
name = each.key
60+
type = "A"
61+
ttl = 300
62+
records = [each.value]
63+
}

deploy/infrastructure/dependencies/terraform-aws-kubernetes/network_lb.tf

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ resource "aws_eip" "gateway" {
7373

7474
# Public Elastic IPs for the crdb instances
7575
resource "aws_eip" "ip_crdb" {
76-
count = var.node_count
76+
count = var.datastore_type == "cockroachdb" ? var.node_count : 0
7777
vpc = true
7878

7979
tags = {
@@ -82,3 +82,27 @@ resource "aws_eip" "ip_crdb" {
8282
ExpectedDNS = format("%s.%s", count.index, var.crdb_hostname_suffix)
8383
}
8484
}
85+
86+
# Public Elastic IPs for the yubagybte master instances
87+
resource "aws_eip" "ip_yugabyte_masters" {
88+
count = var.datastore_type == "yugabyte" ? var.node_count : 0
89+
vpc = true
90+
91+
tags = {
92+
Name = format("%s-ip-yugabyte-master%v", var.cluster_name, count.index)
93+
# Preserve mapping between ips and hostnames
94+
ExpectedDNS = format("%s.master.%s", count.index, var.crdb_hostname_suffix)
95+
}
96+
}
97+
98+
# Public Elastic IPs for the yubagybte tserver instances
99+
resource "aws_eip" "ip_yugabyte_tservers" {
100+
count = var.datastore_type == "yugabyte" ? var.node_count : 0
101+
vpc = true
102+
103+
tags = {
104+
Name = format("%s-ip-yugabyte-tserver%v", var.cluster_name, count.index)
105+
# Preserve mapping between ips and hostnames
106+
ExpectedDNS = format("%s.tserver.%s", count.index, var.crdb_hostname_suffix)
107+
}
108+
}

deploy/infrastructure/dependencies/terraform-aws-kubernetes/output.tf

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,42 @@ output "crdb_nodes" {
3030
]
3131
}
3232

33+
output "yugabyte_masters_nodes" {
34+
value = [
35+
for i in aws_eip.ip_yugabyte_masters : {
36+
ip = i.allocation_id
37+
dns = i.tags.ExpectedDNS
38+
}
39+
]
40+
depends_on = [
41+
aws_eip.ip_yugabyte_masters
42+
]
43+
}
44+
45+
output "yugabyte_tservers_nodes" {
46+
value = [
47+
for i in aws_eip.ip_yugabyte_tservers : {
48+
ip = i.allocation_id
49+
dns = i.tags.ExpectedDNS
50+
}
51+
]
52+
depends_on = [
53+
aws_eip.ip_yugabyte_tservers
54+
]
55+
}
56+
3357
output "crdb_addresses" {
3458
value = [for i in aws_eip.ip_crdb[*] : { expected_dns : i.tags.ExpectedDNS, address : i.public_ip }]
3559
}
3660

61+
output "yugabyte_masters_addresses" {
62+
value = [for i in aws_eip.ip_yugabyte_masters[*] : { expected_dns : i.tags.ExpectedDNS, address : i.public_ip }]
63+
}
64+
65+
output "yugabyte_tservers_addresses" {
66+
value = [for i in aws_eip.ip_yugabyte_tservers[*] : { expected_dns : i.tags.ExpectedDNS, address : i.public_ip }]
67+
}
68+
3769
output "gateway_address" {
3870
value = {
3971
expected_dns : aws_eip.gateway[0].tags.ExpectedDNS,
@@ -56,4 +88,4 @@ output "workload_subnet" {
5688

5789
output "iam_role_node_group_arn" {
5890
value = aws_iam_role.dss-cluster-node-group.arn
59-
}
91+
}

deploy/infrastructure/dependencies/terraform-commons-dss/helm.tf

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,19 @@ resource "local_file" "helm_chart_values" {
102102
totalMasters = length(var.yugabyte_external_nodes) + var.node_count
103103
}
104104

105+
storage = {
106+
master = {
107+
storageClass = var.kubernetes_storage_class
108+
}
109+
tserver = {
110+
storageClass = var.kubernetes_storage_class
111+
}
112+
}
113+
114+
preflight = {
115+
skipUlimit = true
116+
}
117+
105118
master = {
106119
extraEnv = [{
107120
name = "HOSTNAMENO"

deploy/infrastructure/modules/terraform-aws-dss/main.tf

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ module "terraform-aws-kubernetes" {
44
aws_region = var.aws_region
55
app_hostname = var.app_hostname
66
crdb_hostname_suffix = var.crdb_hostname_suffix
7+
datastore_type = var.datastore_type
78
aws_instance_type = var.aws_instance_type
89
aws_route53_zone_id = var.aws_route53_zone_id
910
aws_iam_permissions_boundary = var.aws_iam_permissions_boundary
@@ -15,27 +16,35 @@ module "terraform-aws-kubernetes" {
1516

1617
module "terraform-commons-dss" {
1718
# See variables.tf for variables description.
18-
image = var.image
19-
image_pull_secret = var.image_pull_secret
20-
kubernetes_namespace = var.kubernetes_namespace
21-
kubernetes_storage_class = var.aws_kubernetes_storage_class
22-
app_hostname = var.app_hostname
23-
crdb_image_tag = var.crdb_image_tag
24-
crdb_cluster_name = var.crdb_cluster_name
25-
crdb_hostname_suffix = var.crdb_hostname_suffix
26-
should_init = var.should_init
27-
authorization = var.authorization
28-
crdb_locality = var.crdb_locality
29-
crdb_external_nodes = var.crdb_external_nodes
30-
node_count = var.node_count
31-
crdb_internal_nodes = module.terraform-aws-kubernetes.crdb_nodes
32-
ip_gateway = module.terraform-aws-kubernetes.ip_gateway
33-
kubernetes_api_endpoint = module.terraform-aws-kubernetes.kubernetes_api_endpoint
34-
kubernetes_cloud_provider_name = module.terraform-aws-kubernetes.kubernetes_cloud_provider_name
35-
kubernetes_context_name = module.terraform-aws-kubernetes.kubernetes_context_name
36-
kubernetes_get_credentials_cmd = module.terraform-aws-kubernetes.kubernetes_get_credentials_cmd
37-
workload_subnet = module.terraform-aws-kubernetes.workload_subnet
38-
gateway_cert_name = module.terraform-aws-kubernetes.app_hostname_cert_arn
19+
image = var.image
20+
image_pull_secret = var.image_pull_secret
21+
kubernetes_namespace = var.kubernetes_namespace
22+
kubernetes_storage_class = var.aws_kubernetes_storage_class
23+
app_hostname = var.app_hostname
24+
crdb_image_tag = var.crdb_image_tag
25+
crdb_cluster_name = var.crdb_cluster_name
26+
crdb_hostname_suffix = var.crdb_hostname_suffix
27+
datastore_type = var.datastore_type
28+
should_init = var.should_init
29+
authorization = var.authorization
30+
crdb_locality = var.crdb_locality
31+
crdb_external_nodes = var.crdb_external_nodes
32+
node_count = var.node_count
33+
yugabyte_cloud = var.yugabyte_cloud
34+
yugabyte_region = var.yugabyte_region
35+
yugabyte_zone = var.yugabyte_zone
36+
yugabyte_light_resources = var.yugabyte_light_resources
37+
yugabyte_external_nodes = var.yugabyte_external_nodes
38+
crdb_internal_nodes = module.terraform-aws-kubernetes.crdb_nodes
39+
yugabyte_internal_masters_nodes = module.terraform-aws-kubernetes.yugabyte_masters_nodes
40+
yugabyte_internal_tservers_nodes = module.terraform-aws-kubernetes.yugabyte_tservers_nodes
41+
ip_gateway = module.terraform-aws-kubernetes.ip_gateway
42+
kubernetes_api_endpoint = module.terraform-aws-kubernetes.kubernetes_api_endpoint
43+
kubernetes_cloud_provider_name = module.terraform-aws-kubernetes.kubernetes_cloud_provider_name
44+
kubernetes_context_name = module.terraform-aws-kubernetes.kubernetes_context_name
45+
kubernetes_get_credentials_cmd = module.terraform-aws-kubernetes.kubernetes_get_credentials_cmd
46+
workload_subnet = module.terraform-aws-kubernetes.workload_subnet
47+
gateway_cert_name = module.terraform-aws-kubernetes.app_hostname_cert_arn
3948

4049
source = "../../dependencies/terraform-commons-dss"
4150
}

deploy/infrastructure/modules/terraform-aws-dss/output.tf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@ output "crdb_addresses" {
22
value = module.terraform-aws-kubernetes.crdb_addresses
33
}
44

5+
output "yugabyte_masters_addresses" {
6+
value = module.terraform-aws-kubernetes.yugabyte_masters_addresses
7+
}
8+
9+
output "yugabyte_tservers_addresses" {
10+
value = module.terraform-aws-kubernetes.yugabyte_tservers_addresses
11+
}
12+
513
output "gateway_address" {
614
value = module.terraform-aws-kubernetes.gateway_address
715
}

deploy/services/helm-charts/dss/templates/yugabyte-loadbalancers.yaml

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,26 @@ metadata:
1212
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
1313
{{- include (printf "%s-lb-crdb-annotations" $cloudProvider)
1414
(dict
15-
"name" (printf "%s-%s" "yugabyte-db-master-external-node" ( $i | toString) )
15+
"name" (printf "%s-%s" "ybdb-master-ext" ( $i | toString) )
1616
"ip" $lb.ip
1717
"subnet" $lb.subnet
1818
"cloudProvider" $cloudProvider
1919
) | nindent 4
2020
}}
2121
labels:
2222
app: yugabyte
23-
name: yugabyte-db-master-external-node-{{$i}}
24-
name: yugabyte-db-master-external-node-{{$i}}
23+
name: ybdb-master-ext-{{$i}}
24+
name: ybdb-master-ext-{{$i}}
2525
spec:
2626
{{- include (printf "%s-lb-spec" $cloudProvider) (dict "ip" $lb.ip) | nindent 2}}
2727
ports:
28-
- name: yugabyte-master-db-external-node-{{$i}}
28+
- name: yugabyte-master-db-ext-{{$i}}
2929
port: 7100
3030
targetPort: 7100
31-
- name: yugabyte-master-ui-external-node-{{$i}}
31+
- name: yugabyte-master-ui-ext-{{$i}}
3232
port: 7000
3333
targetPort: 7000
34-
- name: yugabyte-master-ui2-external-node-{{$i}}
34+
- name: yugabyte-master-ui2-ext-{{$i}}
3535
port: 9000
3636
targetPort: 9000
3737
publishNotReadyAddresses: true
@@ -50,38 +50,38 @@ metadata:
5050
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
5151
{{- include (printf "%s-lb-crdb-annotations" $cloudProvider)
5252
(dict
53-
"name" (printf "%s-%s" " yugabyte-db-tserver-external-node" ( $i | toString) )
53+
"name" (printf "%s-%s" " ybdb-tserver-ext" ( $i | toString) )
5454
"ip" $lb.ip
5555
"subnet" $lb.subnet
5656
"cloudProvider" $cloudProvider
5757
) | nindent 4
5858
}}
5959
labels:
6060
app: yugabyte
61-
name: yugabyte-db-tserver-external-node-{{$i}}
62-
name: yugabyte-db-tserver-external-node-{{$i}}
61+
name: yuga-tserver-ext-{{$i}}
62+
name: yuga-tserver-ext-{{$i}}
6363
spec:
6464
{{- include (printf "%s-lb-spec" $cloudProvider) (dict "ip" $lb.ip) | nindent 2}}
6565
ports:
66-
- name: yugabyte-tserver-db-external-node-{{$i}}
66+
- name: yugabyte-tserver-db-ext-{{$i}}
6767
port: 9100
6868
targetPort: 9100
69-
- name: yugabyte-tserver-ui-external-node-{{$i}}
69+
- name: yugabyte-tserver-ui-ext-{{$i}}
7070
port: 9000
7171
targetPort: 9000
72-
- name: yugabyte-tserver-ui2-external-node-{{$i}}
72+
- name: yugabyte-tserver-ui2-ext-{{$i}}
7373
port: 7000
7474
targetPort: 7000
75-
- name: yugabyte-tserver-ycql-external-node-{{$i}}
75+
- name: yugabyte-tserver-ycql-ext-{{$i}}
7676
port: 9042
7777
targetPort: 9042
78-
- name: yugabyte-tserver-ysql-external-node-{{$i}}
78+
- name: yugabyte-tserver-ysql-ext-{{$i}}
7979
port: 5433
8080
targetPort: 5433
81-
- name: yugabyte-tserver-metrics-external-node-{{$i}}
81+
- name: yugabyte-tserver-metrics-ext-{{$i}}
8282
port: 13000
8383
targetPort: 13000
84-
- name: yugabyte-tserver-metrics-2-external-node-{{$i}}
84+
- name: yugabyte-tserver-metrics-2-ext-{{$i}}
8585
port: 12000
8686
targetPort: 12000
8787
publishNotReadyAddresses: true

0 commit comments

Comments
 (0)