Skip to content

Commit 489fe6d

Browse files
authored
Merge pull request #51 from arunlalp/master
Feat: New parent module added for the eks cluster
2 parents 50fed2b + 4c36a06 commit 489fe6d

File tree

8 files changed

+643
-543
lines changed

8 files changed

+643
-543
lines changed

infra/eks-cluster/main.tf

Lines changed: 1 addition & 283 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ provider "aws" {
22
region = var.region
33
}
44

5+
56
module "eks-cluster" {
67
source = "../../modules/eks"
78
cluster_name = var.cluster_name
@@ -17,286 +18,3 @@ module "eks-cluster" {
1718
vpc_id = var.vpc_id
1819
}
1920

20-
# provider "aws" {
21-
# region = local.region
22-
# }
23-
24-
provider "aws" {
25-
region = "us-west-2"
26-
alias = "virginia"
27-
}
28-
29-
provider "aws" {
30-
region = "us-east-1"
31-
alias = "east1"
32-
}
33-
34-
data "aws_security_groups" "security_groups" {
35-
filter {
36-
name = "tag:aws:eks:cluster-name"
37-
values = [var.cluster_name]
38-
}
39-
}
40-
41-
resource "aws_ec2_tag" "security_groups" {
42-
for_each = toset(data.aws_security_groups.security_groups.ids)
43-
44-
resource_id = each.value
45-
key = "karpenter.sh/discovery"
46-
value = var.cluster_name
47-
}
48-
49-
data "aws_eks_cluster" "cert_authority_data" {
50-
provider = aws.virginia
51-
name = var.cluster_name
52-
53-
depends_on = [ module.eks-cluster ]
54-
}
55-
56-
data "aws_eks_cluster_auth" "cluster_auth" {
57-
provider = aws.virginia
58-
name = data.aws_eks_cluster.cert_authority_data.name
59-
60-
depends_on = [ module.eks-cluster ]
61-
}
62-
63-
provider "helm" {
64-
kubernetes {
65-
host = data.aws_eks_cluster.cert_authority_data.endpoint
66-
cluster_ca_certificate = base64decode(data.aws_eks_cluster.cert_authority_data.certificate_authority[0].data)
67-
68-
exec {
69-
api_version = "client.authentication.k8s.io/v1beta1"
70-
command = "aws"
71-
args = ["eks", "get-token", "--cluster-name", data.aws_eks_cluster.cert_authority_data.name, "--region", local.region]
72-
}
73-
}
74-
}
75-
76-
77-
provider "kubectl" {
78-
apply_retry_count = 5
79-
host = data.aws_eks_cluster.cert_authority_data.endpoint
80-
cluster_ca_certificate = base64decode(data.aws_eks_cluster.cert_authority_data.certificate_authority[0].data)
81-
load_config_file = false
82-
83-
exec {
84-
api_version = "client.authentication.k8s.io/v1beta1"
85-
command = "aws"
86-
# This requires the awscli to be installed locally where Terraform is executed
87-
args = ["eks", "get-token", "--cluster-name", data.aws_eks_cluster.cert_authority_data.name]
88-
}
89-
}
90-
91-
data "aws_availability_zones" "available" {}
92-
data "aws_ecrpublic_authorization_token" "token" {
93-
provider = aws.east1
94-
}
95-
96-
locals {
97-
name = "ex-${basename(path.cwd)}"
98-
region = "us-west-2"
99-
100-
vpc_cidr = "10.0.0.0/16"
101-
azs = slice(data.aws_availability_zones.available.names, 0, 3)
102-
103-
tags = {
104-
Example = local.name
105-
}
106-
}
107-
108-
109-
# Karpenter
110-
111-
module "karpenter" {
112-
source = "../../modules/karpenter"
113-
114-
create = var.create
115-
tags = var.tags
116-
cluster_name = var.cluster_name
117-
create_iam_role = var.create_iam_role
118-
iam_role_name = var.iam_role_name
119-
iam_role_use_name_prefix = var.iam_role_use_name_prefix
120-
iam_role_path = var.iam_role_path
121-
iam_role_description = var.iam_role_description
122-
iam_role_max_session_duration = var.iam_role_max_session_duration
123-
iam_role_permissions_boundary_arn = var.iam_role_permissions_boundary_arn
124-
iam_role_tags = var.iam_role_tags
125-
iam_policy_name = var.iam_policy_name
126-
iam_policy_use_name_prefix = var.iam_policy_use_name_prefix
127-
iam_policy_path = var.iam_policy_path
128-
iam_policy_description = var.iam_policy_description
129-
iam_policy_statements = var.iam_policy_statements
130-
iam_role_policies = var.iam_role_policies
131-
ami_id_ssm_parameter_arns = var.ami_id_ssm_parameter_arns
132-
enable_pod_identity = var.enable_pod_identity
133-
enable_v1_permissions = var.enable_v1_permissions
134-
enable_irsa = var.enable_irsa
135-
irsa_oidc_provider_arn = var.irsa_oidc_provider_arn
136-
irsa_namespace_service_accounts = var.irsa_namespace_service_accounts
137-
irsa_assume_role_condition_test = var.irsa_assume_role_condition_test
138-
create_pod_identity_association = var.create_pod_identity_association
139-
namespace = var.namespace
140-
service_account = var.service_account
141-
enable_spot_termination = var.enable_spot_termination
142-
queue_name = var.queue_name
143-
queue_managed_sse_enabled = var.queue_managed_sse_enabled
144-
queue_kms_master_key_id = var.queue_kms_master_key_id
145-
queue_kms_data_key_reuse_period_seconds = var.queue_kms_data_key_reuse_period_seconds
146-
create_node_iam_role = var.create_node_iam_role
147-
cluster_ip_family = var.cluster_ip_family
148-
node_iam_role_arn = var.node_iam_role_arn
149-
node_iam_role_name = var.node_iam_role_name
150-
node_iam_role_use_name_prefix = var.node_iam_role_use_name_prefix
151-
node_iam_role_path = var.node_iam_role_path
152-
node_iam_role_description = var.node_iam_role_description
153-
node_iam_role_max_session_duration = var.node_iam_role_max_session_duration
154-
node_iam_role_permissions_boundary = var.node_iam_role_permissions_boundary
155-
node_iam_role_attach_cni_policy = var.node_iam_role_attach_cni_policy
156-
node_iam_role_additional_policies = var.node_iam_role_additional_policies
157-
node_iam_role_tags = var.node_iam_role_tags
158-
create_access_entry = var.create_access_entry
159-
access_entry_type = var.access_entry_type
160-
create_instance_profile = var.create_instance_profile
161-
rule_name_prefix = var.rule_name_prefix
162-
163-
depends_on = [ module.eks-cluster ]
164-
165-
}
166-
167-
module "karpenter_disabled" {
168-
source = "../../modules/karpenter"
169-
170-
create = false
171-
}
172-
173-
# Karpenter Helm chart & manifests
174-
175-
resource "helm_release" "karpenter" {
176-
namespace = "kube-system"
177-
name = "karpenter"
178-
repository = "oci://public.ecr.aws/karpenter"
179-
repository_username = data.aws_ecrpublic_authorization_token.token.user_name
180-
repository_password = data.aws_ecrpublic_authorization_token.token.password
181-
chart = "karpenter"
182-
version = "1.3.0"
183-
wait = false
184-
185-
values = [
186-
<<-EOT
187-
serviceAccount:
188-
name: karpenter
189-
settings:
190-
clusterName: ${data.aws_eks_cluster.cert_authority_data.name}
191-
clusterEndpoint: ${data.aws_eks_cluster.cert_authority_data.endpoint}
192-
interruptionQueue: ${module.karpenter.queue_name}
193-
EOT
194-
]
195-
196-
depends_on = [ module.eks-cluster ]
197-
198-
}
199-
200-
resource "kubectl_manifest" "karpenter_node_class" {
201-
yaml_body = <<-YAML
202-
apiVersion: karpenter.k8s.aws/v1
203-
kind: EC2NodeClass
204-
metadata:
205-
name: default
206-
spec:
207-
blockDeviceMappings:
208-
- deviceName: /dev/xvda
209-
ebs:
210-
volumeSize: 80Gi
211-
volumeType: gp3
212-
deleteOnTermination: true
213-
214-
amiSelectorTerms:
215-
- alias: bottlerocket@latest
216-
217-
role: ${module.karpenter.node_iam_role_name}
218-
subnetSelectorTerms:
219-
- tags:
220-
karpenter.sh/discovery: ${data.aws_eks_cluster.cert_authority_data.name}
221-
securityGroupSelectorTerms:
222-
- tags:
223-
karpenter.sh/discovery: ${data.aws_eks_cluster.cert_authority_data.name}
224-
tags:
225-
karpenter.sh/discovery: ${data.aws_eks_cluster.cert_authority_data.name}
226-
YAML
227-
228-
depends_on = [
229-
helm_release.karpenter
230-
]
231-
}
232-
233-
resource "kubectl_manifest" "karpenter_node_pool" {
234-
yaml_body = <<-YAML
235-
apiVersion: karpenter.sh/v1
236-
kind: NodePool
237-
metadata:
238-
name: default
239-
spec:
240-
template:
241-
spec:
242-
nodeClassRef:
243-
group: karpenter.k8s.aws
244-
kind: EC2NodeClass
245-
name: default
246-
requirements:
247-
- key: "karpenter.k8s.aws/instance-category"
248-
operator: In
249-
values: ["c", "m", "r"]
250-
- key: "karpenter.k8s.aws/instance-cpu"
251-
operator: In
252-
values: ["4", "8", "16", "32"]
253-
- key: "karpenter.k8s.aws/instance-hypervisor"
254-
operator: In
255-
values: ["nitro"]
256-
- key: "karpenter.k8s.aws/instance-generation"
257-
operator: Gt
258-
values: ["2"]
259-
limits:
260-
cpu: 1000
261-
disruption:
262-
consolidationPolicy: WhenEmpty
263-
consolidateAfter: 30s
264-
YAML
265-
266-
depends_on = [
267-
kubectl_manifest.karpenter_node_class
268-
]
269-
}
270-
271-
# Example deployment using the [pause image](https://www.ianlewis.org/en/almighty-pause-container)
272-
# and starts with zero replicas
273-
resource "kubectl_manifest" "karpenter_example_deployment" {
274-
yaml_body = <<-YAML
275-
apiVersion: apps/v1
276-
kind: Deployment
277-
metadata:
278-
name: inflate
279-
spec:
280-
replicas: 0
281-
selector:
282-
matchLabels:
283-
app: inflate
284-
template:
285-
metadata:
286-
labels:
287-
app: inflate
288-
spec:
289-
terminationGracePeriodSeconds: 0
290-
containers:
291-
- name: inflate
292-
image: public.ecr.aws/eks-distro/kubernetes/pause:3.7
293-
resources:
294-
requests:
295-
cpu: 1
296-
YAML
297-
298-
depends_on = [
299-
helm_release.karpenter
300-
]
301-
}
302-

0 commit comments

Comments
 (0)