Skip to content

Commit 7d58a30

Browse files
authored
Merge pull request #42 from comet-ml/darenj/redisgn-ng
Darenj/redisgn ng
2 parents f0f8b5f + eb2f764 commit 7d58a30

File tree

4 files changed

+360
-72
lines changed

4 files changed

+360
-72
lines changed

main.tf

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,7 @@ module "comet_eks" {
7070
eks_private_subnets = var.enable_vpc ? module.comet_vpc[0].private_subnets : var.comet_private_subnets
7171
eks_cluster_name = var.eks_cluster_name
7272
eks_cluster_version = var.eks_cluster_version
73-
eks_mng_name = var.eks_mng_name
7473
eks_mng_ami_type = var.eks_mng_ami_type
75-
eks_node_types = var.eks_node_types
76-
eks_mng_desired_size = var.eks_mng_desired_size
77-
eks_mng_max_size = var.eks_mng_max_size
7874
eks_mng_disk_size = var.eks_mng_disk_size
7975
eks_aws_load_balancer_controller = var.eks_aws_load_balancer_controller
8076
eks_cert_manager = var.eks_cert_manager
@@ -85,12 +81,45 @@ module "comet_eks" {
8581
s3_enabled = var.enable_s3
8682
comet_ec2_s3_iam_policy = var.enable_s3 ? module.comet_s3[0].comet_s3_iam_policy_arn : null
8783

84+
# MPM Infrastructure toggle
8885
enable_mpm_infra = var.enable_mpm_infra
8986

90-
eks_druid_instance_type = var.eks_druid_instance_type
91-
eks_druid_node_count = var.eks_druid_node_count
92-
eks_airflow_instance_type = var.eks_airflow_instance_type
93-
eks_airflow_node_count = var.eks_airflow_node_count
87+
# Node Group Toggles
88+
enable_admin_node_group = var.eks_enable_admin_node_group
89+
enable_comet_node_group = var.eks_enable_comet_node_group
90+
enable_druid_node_group = var.eks_enable_druid_node_group
91+
enable_airflow_node_group = var.eks_enable_airflow_node_group
92+
93+
# Admin Node Group
94+
eks_admin_name = var.eks_admin_name
95+
eks_admin_instance_types = var.eks_admin_instance_types
96+
eks_admin_min_size = var.eks_admin_min_size
97+
eks_admin_max_size = var.eks_admin_max_size
98+
eks_admin_desired_size = var.eks_admin_desired_size
99+
100+
# Comet Node Group
101+
eks_comet_name = var.eks_comet_name
102+
eks_comet_instance_types = var.eks_comet_instance_types
103+
eks_comet_min_size = var.eks_comet_min_size
104+
eks_comet_max_size = var.eks_comet_max_size
105+
eks_comet_desired_size = var.eks_comet_desired_size
106+
107+
# Druid Node Group
108+
eks_druid_name = var.eks_druid_name
109+
eks_druid_instance_types = var.eks_druid_instance_types
110+
eks_druid_min_size = var.eks_druid_min_size
111+
eks_druid_max_size = var.eks_druid_max_size
112+
eks_druid_desired_size = var.eks_druid_desired_size
113+
114+
# Airflow Node Group
115+
eks_airflow_name = var.eks_airflow_name
116+
eks_airflow_instance_types = var.eks_airflow_instance_types
117+
eks_airflow_min_size = var.eks_airflow_min_size
118+
eks_airflow_max_size = var.eks_airflow_max_size
119+
eks_airflow_desired_size = var.eks_airflow_desired_size
120+
121+
# Additional custom node groups
122+
additional_node_groups = var.eks_additional_node_groups
94123
}
95124

96125
module "comet_elasticache" {

modules/comet_eks/main.tf

Lines changed: 57 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,42 @@ module "eks" {
2525
}
2626

2727
eks_managed_node_groups = merge(
28-
{
28+
# Admin Node Group
29+
var.enable_admin_node_group ? {
30+
admin = {
31+
name = var.eks_admin_name
32+
instance_types = var.eks_admin_instance_types
33+
min_size = var.eks_admin_min_size
34+
max_size = var.eks_admin_max_size
35+
desired_size = var.eks_admin_desired_size
36+
block_device_mappings = {
37+
xvda = {
38+
device_name = "/dev/xvda"
39+
ebs = {
40+
volume_size = var.eks_mng_disk_size
41+
volume_type = local.volume_type
42+
encrypted = local.volume_encrypted
43+
delete_on_termination = local.volume_delete_on_termination
44+
}
45+
}
46+
}
47+
labels = {
48+
nodegroup_name = "admin"
49+
}
50+
tags = var.common_tags
51+
tags_propagate_at_launch = true
52+
launch_template_version = "$Latest"
53+
iam_role_additional_policies = var.s3_enabled ? { comet_s3_access = var.comet_ec2_s3_iam_policy } : {}
54+
}
55+
} : {},
56+
# Comet Node Group
57+
var.enable_comet_node_group ? {
2958
comet = {
30-
name = var.eks_mng_name
31-
instance_types = var.eks_node_types
32-
min_size = var.eks_mng_desired_size
33-
max_size = var.eks_mng_max_size
34-
desired_size = var.eks_mng_desired_size
59+
name = var.eks_comet_name
60+
instance_types = var.eks_comet_instance_types
61+
min_size = var.eks_comet_min_size
62+
max_size = var.eks_comet_max_size
63+
desired_size = var.eks_comet_desired_size
3564
block_device_mappings = {
3665
xvda = {
3766
device_name = "/dev/xvda"
@@ -51,14 +80,15 @@ module "eks" {
5180
launch_template_version = "$Latest"
5281
iam_role_additional_policies = var.s3_enabled ? { comet_s3_access = var.comet_ec2_s3_iam_policy } : {}
5382
}
54-
},
55-
var.enable_mpm_infra ? {
83+
} : {},
84+
# Druid Node Group
85+
(var.enable_druid_node_group && var.enable_mpm_infra) ? {
5686
druid = {
57-
name = "druid"
58-
instance_types = [var.eks_druid_instance_type]
59-
min_size = var.eks_druid_node_count
60-
max_size = var.eks_druid_node_count
61-
desired_size = var.eks_druid_node_count
87+
name = var.eks_druid_name
88+
instance_types = var.eks_druid_instance_types
89+
min_size = var.eks_druid_min_size
90+
max_size = var.eks_druid_max_size
91+
desired_size = var.eks_druid_desired_size
6292
block_device_mappings = {
6393
xvda = {
6494
device_name = "/dev/xvda"
@@ -74,16 +104,19 @@ module "eks" {
74104
nodegroup_name = "druid"
75105
}
76106
tags = var.common_tags
77-
tags_propogate_at_launch = true
107+
tags_propagate_at_launch = true
78108
launch_template_version = "$Latest"
79109
iam_role_additional_policies = var.s3_enabled ? { comet_s3_access = var.comet_ec2_s3_iam_policy } : {}
80-
},
110+
}
111+
} : {},
112+
# Airflow Node Group
113+
(var.enable_airflow_node_group && var.enable_mpm_infra) ? {
81114
airflow = {
82-
name = "airflow"
83-
instance_types = [var.eks_airflow_instance_type]
84-
min_size = var.eks_airflow_node_count
85-
max_size = var.eks_airflow_node_count
86-
desired_size = var.eks_airflow_node_count
115+
name = var.eks_airflow_name
116+
instance_types = var.eks_airflow_instance_types
117+
min_size = var.eks_airflow_min_size
118+
max_size = var.eks_airflow_max_size
119+
desired_size = var.eks_airflow_desired_size
87120
block_device_mappings = {
88121
xvda = {
89122
device_name = "/dev/xvda"
@@ -99,11 +132,13 @@ module "eks" {
99132
nodegroup_name = "airflow"
100133
}
101134
tags = var.common_tags
102-
tags_propogate_at_launch = true
135+
tags_propagate_at_launch = true
103136
launch_template_version = "$Latest"
104137
iam_role_additional_policies = var.s3_enabled ? { comet_s3_access = var.comet_ec2_s3_iam_policy } : {}
105138
}
106-
} : {}
139+
} : {},
140+
# Additional custom node groups
141+
var.additional_node_groups
107142
)
108143
}
109144

modules/comet_eks/variables.tf

Lines changed: 133 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,29 +23,71 @@ variable "eks_cluster_version" {
2323
type = string
2424
}
2525

26-
variable "eks_mng_name" {
27-
description = "Name for the EKS managed nodegroup"
26+
# Admin Node Group Variables
27+
variable "eks_admin_name" {
28+
description = "Name for the admin node group"
2829
type = string
30+
default = "admin"
31+
}
32+
33+
variable "eks_admin_instance_types" {
34+
description = "Instance types for admin node group"
35+
type = list(string)
36+
default = ["t3.large"]
37+
}
38+
39+
variable "eks_admin_min_size" {
40+
description = "Minimum number of nodes in admin node group"
41+
type = number
42+
default = 1
43+
}
44+
45+
variable "eks_admin_max_size" {
46+
description = "Maximum number of nodes in admin node group"
47+
type = number
48+
default = 3
49+
}
50+
51+
variable "eks_admin_desired_size" {
52+
description = "Desired number of nodes in admin node group"
53+
type = number
54+
default = 2
55+
}
56+
57+
# Comet Node Group Variables
58+
variable "eks_comet_name" {
59+
description = "Name for the comet node group"
60+
type = string
61+
default = "comet"
2962
}
3063

3164
variable "eks_mng_ami_type" {
3265
description = "AMI family to use for the EKS nodes"
3366
type = string
3467
}
3568

36-
variable "eks_node_types" {
37-
description = "Node instance types for EKS managed node group"
69+
variable "eks_comet_instance_types" {
70+
description = "Instance types for comet node group"
3871
type = list(string)
72+
default = ["m7i.4xlarge"]
3973
}
4074

41-
variable "eks_mng_desired_size" {
42-
description = "Desired number of nodes in EKS cluster"
75+
variable "eks_comet_min_size" {
76+
description = "Minimum number of nodes in comet node group"
4377
type = number
78+
default = 2
4479
}
4580

46-
variable "eks_mng_max_size" {
47-
description = "Maximum number of nodes in EKS cluster"
81+
variable "eks_comet_max_size" {
82+
description = "Maximum number of nodes in comet node group"
4883
type = number
84+
default = 10
85+
}
86+
87+
variable "eks_comet_desired_size" {
88+
description = "Desired number of nodes in comet node group"
89+
type = number
90+
default = 3
4991
}
5092

5193
variable "eks_mng_disk_size" {
@@ -90,33 +132,107 @@ variable "comet_ec2_s3_iam_policy" {
90132
default = null
91133
}
92134

135+
# Node Group Toggles
136+
variable "enable_admin_node_group" {
137+
description = "Enable admin node group for EKS cluster management tasks"
138+
type = bool
139+
default = true
140+
}
141+
142+
variable "enable_comet_node_group" {
143+
description = "Enable comet node group for main Comet application workloads"
144+
type = bool
145+
default = true
146+
}
147+
148+
variable "enable_druid_node_group" {
149+
description = "Enable druid node group for Apache Druid workloads (requires enable_mpm_infra to be true)"
150+
type = bool
151+
default = true
152+
}
153+
154+
variable "enable_airflow_node_group" {
155+
description = "Enable airflow node group for Apache Airflow workloads (requires enable_mpm_infra to be true)"
156+
type = bool
157+
default = true
158+
}
159+
93160
variable "enable_mpm_infra" {
94-
description = "Sets MNGs to be created for MPM compute"
161+
description = "Master toggle for MPM infrastructure (Druid/Airflow node groups will only be created if this is true)"
95162
type = bool
163+
default = false
96164
}
97165

98-
variable "eks_druid_instance_type" {
99-
description = "Instance type for EKS Druid nodes"
166+
# Druid Node Group Variables
167+
variable "eks_druid_name" {
168+
description = "Name for the druid node group"
100169
type = string
170+
default = "druid"
171+
}
172+
173+
variable "eks_druid_instance_types" {
174+
description = "Instance types for druid node group"
175+
type = list(string)
176+
default = ["m7i.2xlarge"]
177+
}
178+
179+
variable "eks_druid_min_size" {
180+
description = "Minimum number of nodes in druid node group"
181+
type = number
182+
default = 2
183+
}
184+
185+
variable "eks_druid_max_size" {
186+
description = "Maximum number of nodes in druid node group"
187+
type = number
188+
default = 8
101189
}
102190

103-
variable "eks_druid_node_count" {
104-
description = "Instance count for EKS Druid nodes"
191+
variable "eks_druid_desired_size" {
192+
description = "Desired number of nodes in druid node group"
105193
type = number
194+
default = 4
106195
}
107196

108-
variable "eks_airflow_instance_type" {
109-
description = "Instance type for EKS Airflow nodes"
197+
# Airflow Node Group Variables
198+
variable "eks_airflow_name" {
199+
description = "Name for the airflow node group"
110200
type = string
201+
default = "airflow"
111202
}
112203

113-
variable "eks_airflow_node_count" {
114-
description = "Instance count for EKS Airflow nodes"
204+
variable "eks_airflow_instance_types" {
205+
description = "Instance types for airflow node group"
206+
type = list(string)
207+
default = ["t3.medium"]
208+
}
209+
210+
variable "eks_airflow_min_size" {
211+
description = "Minimum number of nodes in airflow node group"
212+
type = number
213+
default = 1
214+
}
215+
216+
variable "eks_airflow_max_size" {
217+
description = "Maximum number of nodes in airflow node group"
115218
type = number
219+
default = 4
220+
}
221+
222+
variable "eks_airflow_desired_size" {
223+
description = "Desired number of nodes in airflow node group"
224+
type = number
225+
default = 2
116226
}
117227

118228
variable "common_tags" {
119229
type = map(string)
120230
description = "A map of common tags"
121231
default = {}
122232
}
233+
234+
variable "additional_node_groups" {
235+
description = "Additional EKS managed node groups to create beyond the predefined ones (admin, comet, druid, airflow)"
236+
type = any
237+
default = {}
238+
}

0 commit comments

Comments
 (0)