diff --git a/modules/aws/eks/main.tf b/modules/aws/eks/main.tf index 4b8f5b6..b7a2131 100644 --- a/modules/aws/eks/main.tf +++ b/modules/aws/eks/main.tf @@ -189,3 +189,22 @@ resource "aws_iam_role_policy_attachment" "ebs_csi_policy_attach" { } +##Karpenter sub-module for easily enabling Karpenter on EKS +module "karpenter" { + source = "terraform-aws-modules/eks/aws//modules/karpenter" + version = "19.0.4" + + cluster_name = module.eks.cluster_id + + irsa_oidc_provider_arn = module.eks.oidc_provider_arn + irsa_namespace_service_accounts = ["karpenter:karpenter"] + enable_spot_termination = false ##AWS SQS queue and EventBridge rules for node termination handling + create = true + iam_role_arn = module.eks.worker_iam_role_arn + # Since Karpenter is running on an EKS Managed Node group, + # we can re-use the role that was created for the node group + create_iam_role = false + create_instance_profile = true + irsa_tag_key="kubernetes.io/cluster" +} + diff --git a/modules/aws/eks/outputs.tf b/modules/aws/eks/outputs.tf index aa5c0ab..f7fe653 100644 --- a/modules/aws/eks/outputs.tf +++ b/modules/aws/eks/outputs.tf @@ -50,3 +50,19 @@ output "eks_admin_group_arn" { output "eks_admin_policy_arn" { value = aws_iam_group_policy.eks_admin_group_policy.name } + +output "eks_worker_node_instance_profile_arn" { + value = module.karpenter.instance_profile_arn +} + +output "eks_worker_node_instance_profile_name" { + value = module.karpenter.instance_profile_name +} + +output "karpenter_controller_iam_role_arn" { + value = module.karpenter.irsa_arn +} + +output "eks_worker_sg_id" { + value = module.eks.worker_security_group_id +} \ No newline at end of file