1
+ locals {
2
+ eks_worker_tags = {
3
+ " k8s.io/cluster-autoscaler/enabled" = " true"
4
+ " k8s.io/cluster-autoscaler/${local.name}" = " owned"
5
+ }
6
+ }
7
+
8
+ data "aws_ami" "eks_default_bottlerocket" {
9
+ most_recent = true
10
+ owners = [" amazon" ]
11
+
12
+ filter {
13
+ name = " name"
14
+ values = [" bottlerocket-aws-k8s-${ var . eks_cluster_version } -x86_64-*" ]
15
+ }
16
+ }
17
+
1
18
# tfsec:ignore:aws-vpc-no-public-egress-sgr tfsec:ignore:aws-eks-enable-control-plane-logging tfsec:ignore:aws-eks-encrypt-secrets tfsec:ignore:aws-eks-no-public-cluster-access tfsec:ignore:aws-eks-no-public-cluster-access-to-cidr
2
19
module "eks" {
3
20
source = " terraform-aws-modules/eks/aws"
@@ -72,108 +89,104 @@ module "eks" {
72
89
}
73
90
}
74
91
75
- eks_managed_node_group_defaults = {
76
- ami_type = " AL2_x86_64"
77
- disk_size = 100
92
+ self_managed_node_group_defaults = {
93
+ block_device_mappings = {
94
+ xvda = {
95
+ device_name = " /dev/xvda"
96
+ ebs = {
97
+ delete_on_termination = true
98
+ encrypted = false
99
+ volume_size = 100
100
+ volume_type = " gp3"
101
+ }
102
+
103
+ }
104
+ }
78
105
iam_role_additional_policies = var.eks_workers_additional_policies
106
+ metadata_options = {
107
+ http_endpoint = " enabled"
108
+ http_tokens = " required"
109
+ http_put_response_hop_limit = 1
110
+ instance_metadata_tags = " disabled"
111
+ }
79
112
}
80
113
81
- eks_managed_node_groups = {
114
+ self_managed_node_groups = {
82
115
spot = {
83
- name = " ${ local . name } -spot"
84
- iam_role_name = " ${ local . name } -spot"
85
- desired_size = var.node_group_spot.desired_capacity
86
- max_size = var.node_group_spot.max_capacity
87
- min_size = var.node_group_spot.min_capacity
88
- instance_types = var.node_group_spot.instance_types
89
- capacity_type = var.node_group_spot.capacity_type
90
- subnet_ids = module.vpc.private_subnets
91
-
92
- force_update_version = var.node_group_spot.force_update_version
93
-
94
- labels = {
95
- Environment = local.env
96
- nodegroup = " spot"
97
- }
98
- tags = {
99
- Name = " ${ local . name } -spot"
100
- }
116
+ name = " ${ local . name } -spot"
117
+ iam_role_name = " ${ local . name } -spot"
118
+ desired_size = var.node_group_spot.desired_capacity
119
+ max_size = var.node_group_spot.max_capacity
120
+ min_size = var.node_group_spot.min_capacity
121
+ subnet_ids = module.vpc.private_subnets
122
+
123
+ bootstrap_extra_args = " --kubelet-extra-args '--node-labels=eks.amazonaws.com/capacityType=SPOT --node-labels=nodegroup=spot'"
124
+ capacity_rebalance = var.node_group_spot.capacity_rebalance
125
+ use_mixed_instances_policy = var.node_group_spot.use_mixed_instances_policy
126
+ mixed_instances_policy = var.node_group_spot.mixed_instances_policy
127
+
128
+ tags = local.eks_worker_tags
101
129
},
102
130
ondemand = {
103
- name = " ${ local . name } -ondemand"
104
- iam_role_name = " ${ local . name } -ondemand"
105
- desired_size = var.node_group_ondemand.desired_capacity
106
- max_size = var.node_group_ondemand.max_capacity
107
- min_size = var.node_group_ondemand.min_capacity
108
- instance_types = var.node_group_ondemand.instance_types
109
- capacity_type = var.node_group_ondemand.capacity_type
110
- subnet_ids = module.vpc.private_subnets
111
-
112
- force_update_version = var.node_group_ondemand.force_update_version
113
-
114
- labels = {
115
- Environment = local.env
116
- nodegroup = " ondemand"
117
- }
118
- tags = {
119
- Name = " ${ local . name } -ondemand"
120
- }
131
+ name = " ${ local . name } -ondemand"
132
+ iam_role_name = " ${ local . name } -ondemand"
133
+ desired_size = var.node_group_ondemand.desired_capacity
134
+ max_size = var.node_group_ondemand.max_capacity
135
+ min_size = var.node_group_ondemand.min_capacity
136
+ instance_type = var.node_group_ondemand.instance_type
137
+ subnet_ids = module.vpc.private_subnets
138
+
139
+ bootstrap_extra_args = " --kubelet-extra-args '--node-labels=eks.amazonaws.com/capacityType=ON_DEMAND --node-labels=nodegroup=ondemand'"
140
+ capacity_rebalance = var.node_group_ondemand.capacity_rebalance
141
+ use_mixed_instances_policy = var.node_group_ondemand.use_mixed_instances_policy
142
+ mixed_instances_policy = var.node_group_ondemand.mixed_instances_policy
143
+
144
+ tags = local.eks_worker_tags
121
145
},
122
146
ci = {
123
- name = " ${ local . name } -ci"
124
- iam_role_name = " ${ local . name } -ci"
125
- desired_size = var.node_group_ci.desired_capacity
126
- max_size = var.node_group_ci.max_capacity
127
- min_size = var.node_group_ci.min_capacity
128
- instance_types = var.node_group_ci.instance_types
129
- capacity_type = var.node_group_ci.capacity_type
130
- subnet_ids = module.vpc.private_subnets
131
-
132
- force_update_version = var.node_group_ci.force_update_version
133
-
134
- labels = {
135
- Environment = local.env
136
- nodegroup = " ci"
137
- }
138
- tags = {
139
- Name = " ${ local . name } -ci"
140
- }
141
- taints = [
142
- {
143
- key = " nodegroup"
144
- value = " ci"
145
- effect = " NO_SCHEDULE"
146
- }
147
- ]
147
+ name = " ${ local . name } -ci"
148
+ iam_role_name = " ${ local . name } -ci"
149
+ desired_size = var.node_group_ci.desired_capacity
150
+ max_size = var.node_group_ci.max_capacity
151
+ min_size = var.node_group_ci.min_capacity
152
+ subnet_ids = module.vpc.private_subnets
153
+
154
+ bootstrap_extra_args = " --kubelet-extra-args '--node-labels=eks.amazonaws.com/capacityType=SPOT --node-labels=nodegroup=ci --register-with-taints=nodegroup=ci:NoSchedule'"
155
+ capacity_rebalance = var.node_group_ci.capacity_rebalance
156
+ use_mixed_instances_policy = var.node_group_ci.use_mixed_instances_policy
157
+ mixed_instances_policy = var.node_group_ci.mixed_instances_policy
158
+
159
+ tags = merge (local. eks_worker_tags , { " k8s.io/cluster-autoscaler/node-template/label/nodegroup" = " ci" })
148
160
},
149
161
bottlerocket = {
150
- name = " ${ local . name } -bottlerocket"
151
- iam_role_name = " ${ local . name } -bottlerocket"
152
- desired_size = var.node_group_br.desired_capacity
153
- max_size = var.node_group_br.max_capacity
154
- min_size = var.node_group_br.min_capacity
155
- instance_types = var.node_group_br.instance_types
156
- capacity_type = var.node_group_br.capacity_type
157
- subnet_ids = module.vpc.private_subnets
158
-
159
- ami_type = " BOTTLEROCKET_x86_64"
160
-
161
- force_update_version = var.node_group_br.force_update_version
162
-
163
- labels = {
164
- Environment = local.env
165
- nodegroup = " bottlerocket"
166
- }
167
- taints = [
168
- {
169
- key = " nodegroup"
170
- value = " bottlerocket"
171
- effect = " NO_SCHEDULE"
172
- }
173
- ]
174
- tags = {
175
- Name = " ${ local . name } -bottlerocket"
176
- }
162
+ name = " ${ local . name } -bottlerocket"
163
+ iam_role_name = " ${ local . name } -bottlerocket"
164
+ desired_size = var.node_group_br.desired_capacity
165
+ max_size = var.node_group_br.max_capacity
166
+ min_size = var.node_group_br.min_capacity
167
+ subnet_ids = module.vpc.private_subnets
168
+
169
+ platform = " bottlerocket"
170
+ ami_id = data.aws_ami.eks_default_bottlerocket.id
171
+ bootstrap_extra_args = <<- EOT
172
+ [settings.host-containers.admin]
173
+ enabled = false
174
+
175
+ [settings.host-containers.control]
176
+ enabled = true
177
+
178
+ [settings.kubernetes.node-labels]
179
+ "eks.amazonaws.com/capacityType" = "SPOT"
180
+ "nodegroup" = "bottlerocket"
181
+
182
+ [settings.kubernetes.node-taints]
183
+ "nodegroup" = "bottlerocket:NoSchedule"
184
+ EOT
185
+ capacity_rebalance = var.node_group_br.capacity_rebalance
186
+ use_mixed_instances_policy = var.node_group_br.use_mixed_instances_policy
187
+ mixed_instances_policy = var.node_group_br.mixed_instances_policy
188
+
189
+ tags = merge (local. eks_worker_tags , { " k8s.io/cluster-autoscaler/node-template/label/nodegroup" = " bottlerocket" })
177
190
}
178
191
}
179
192
@@ -194,4 +207,5 @@ module "eks" {
194
207
})
195
208
}
196
209
}
210
+
197
211
}
0 commit comments