@@ -6,20 +6,14 @@ provider "helm" {
66 kubernetes {
77 host = module. eks . cluster_endpoint
88 cluster_ca_certificate = base64decode (module. eks . cluster_certificate_authority_data )
9- token = data. aws_eks_cluster_auth . this . token
10- }
11- }
129
13- provider "kubectl" {
14- apply_retry_count = 30
15- host = module. eks . cluster_endpoint
16- cluster_ca_certificate = base64decode (module. eks . cluster_certificate_authority_data )
17- load_config_file = false
18- token = data. aws_eks_cluster_auth . this . token
19- }
20-
21- data "aws_eks_cluster_auth" "this" {
22- name = module. eks . cluster_name
10+ exec {
11+ api_version = " client.authentication.k8s.io/v1beta1"
12+ command = " aws"
13+ # This requires the awscli to be installed locally where Terraform is executed
14+ args = [" eks" , " get-token" , " --cluster-name" , module . eks . cluster_name ]
15+ }
16+ }
2317}
2418
2519data "aws_caller_identity" "current" {}
@@ -157,21 +151,22 @@ module "disabled" {
157151
158152module "eks" {
159153 source = " terraform-aws-modules/eks/aws"
160- version = " ~> 19.10 "
154+ version = " ~> 19.16 "
161155
162- cluster_name = local. name
163- cluster_version = " 1.24"
156+ cluster_name = local. name
157+ cluster_version = " 1.27"
158+ cluster_endpoint_public_access = true
164159
165160 vpc_id = module. vpc . vpc_id
166161 subnet_ids = module. vpc . private_subnets
167162
168163 eks_managed_node_groups = {
169164 initial = {
170- instance_types = [" m5.xlarge " ]
165+ instance_types = [" m5.large " ]
171166
172167 min_size = 1
173- max_size = 2
174- desired_size = 1
168+ max_size = 3
169+ desired_size = 2
175170 }
176171 }
177172
@@ -185,7 +180,7 @@ module "eks" {
185180
186181module "vpc" {
187182 source = " terraform-aws-modules/vpc/aws"
188- version = " ~> 4 .0"
183+ version = " ~> 5 .0"
189184
190185 name = local. name
191186 cidr = local. vpc_cidr
@@ -218,7 +213,6 @@ resource "aws_iam_instance_profile" "karpenter" {
218213}
219214
220215data "aws_iam_policy_document" "karpenter_controller" {
221- # # checkov:skip=CKV_AWS_111
222216 statement {
223217 actions = [
224218 " ec2:CreateLaunchTemplate" ,
@@ -298,85 +292,3 @@ resource "aws_iam_policy" "karpenter_controller" {
298292
299293 tags = local. tags
300294}
301-
302- # ###############################################################################
303- # Karpenter Provisioner
304- # ###############################################################################
305-
306- # Workaround - https://github.com/hashicorp/terraform-provider-kubernetes/issues/1380#issuecomment-967022975
307- resource "kubectl_manifest" "karpenter_provisioner" {
308- yaml_body = <<- YAML
309- ---
310- apiVersion: karpenter.sh/v1alpha5
311- kind: Provisioner
312- metadata:
313- name: default
314- spec:
315- requirements:
316- - key: karpenter.sh/capacity-type
317- operator: In
318- values: ["spot"]
319- limits:
320- resources:
321- cpu: 1000
322- providerRef:
323- name: default
324- ttlSecondsAfterEmpty: 30
325- YAML
326-
327- depends_on = [
328- module . helm_release_irsa . helm_release
329- ]
330- }
331-
332- resource "kubectl_manifest" "karpenter_node_template" {
333- yaml_body = <<- YAML
334- apiVersion: karpenter.k8s.aws/v1alpha1
335- kind: AWSNodeTemplate
336- metadata:
337- name: default
338- spec:
339- subnetSelector:
340- ${ local . karpenter_tag_key } : ${ module . eks . cluster_name }
341- securityGroupSelector:
342- ${ local . karpenter_tag_key } : ${ module . eks . cluster_name }
343- tags:
344- ${ local . karpenter_tag_key } : ${ module . eks . cluster_name }
345- YAML
346-
347- depends_on = [
348- kubectl_manifest . karpenter_provisioner
349- ]
350- }
351-
352- # Example deployment using the [pause image](https://www.ianlewis.org/en/almighty-pause-container)
353- # and starts with zero replicas
354- resource "kubectl_manifest" "karpenter_example_deployment" {
355- yaml_body = <<- YAML
356- apiVersion: apps/v1
357- kind: Deployment
358- metadata:
359- name: inflate
360- spec:
361- replicas: 0
362- selector:
363- matchLabels:
364- app: inflate
365- template:
366- metadata:
367- labels:
368- app: inflate
369- spec:
370- terminationGracePeriodSeconds: 0
371- containers:
372- - name: inflate
373- image: public.ecr.aws/eks-distro/kubernetes/pause:3.2
374- resources:
375- requests:
376- cpu: 1
377- YAML
378-
379- depends_on = [
380- kubectl_manifest . karpenter_node_template
381- ]
382- }
0 commit comments