modules/feature-node-autoscaler/main.tf (50 lines of code) (raw):

locals { karpenter_default_values_dot_yaml = <<VALUES spec: serviceAccount: # -- Specifies if a ServiceAccount should be created. create: true # -- The name of the ServiceAccount to use. # If not set and create is true, a name is generated using the fullname template. name: "karpenter" # -- Additional annotations for the ServiceAccount. annotations: eks.amazonaws.com/role-arn: "${var.aws_iam_role_arn}" controller: resources: requests: cpu: 2 memory: 2Gi limits: cpu: 2 memory: 2Gi # -- Global Settings to configure Karpenter settings: # -- The maximum length of a batch window. The longer this is, the more pods we can consider for provisioning at one # time which usually results in fewer but larger nodes. batchMaxDuration: 10s # -- The maximum amount of time with no new ending pods that if exceeded ends the current batching window. If pods arrive # faster than this time, the batching window will be extended up to the maxDuration. If they arrive slower, the pods # will be batched separately. batchIdleDuration: 1s # -- Duration of assumed credentials in minutes. Default value is 15 minutes. Not used unless assumeRoleARN set. assumeRoleDuration: 15m # -- Cluster CA bundle for TLS configuration of provisioned nodes. If not set, this is taken from the controller's TLS configuration for the API server. clusterCABundle: "${var.kubernetes_cluster_ca_bundle}" # -- Cluster name. clusterName: "${var.kubernetes_cluster_name}" # -- Cluster endpoint. If not set, will be discovered during startup (EKS only) clusterEndpoint: "${var.kubernetes_cluster_endpoint}" # -- If true then assume we can't reach AWS services which don't have a VPC endpoint # This also has the effect of disabling look-ups to the AWS pricing endpoint isolatedVPC: false # -- The VM memory overhead as a percent that will be subtracted from the total memory for all instance types vmMemoryOverheadPercent: 0.075 # -- interruptionQueue is disabled if not specified. Enabling interruption handling may # require additional permissions on the controller service account. Additional permissions are outlined in the docs. interruptionQueue: "${var.aws_interruption_queue}" # -- Reserved ENIs are not included in the calculations for max-pods or kube-reserved # This is most often used in the VPC CNI custom networking setup https://docs.aws.amazon.com/eks/latest/userguide/cni-custom-network.html reservedENIs: "0" # -- Feature Gate configuration values. Feature Gates will follow the same graduation process and requirements as feature gates # in Kubernetes. More information here https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/#feature-gates-for-alpha-or-beta-features featureGates: # -- drift is in BETA and is enabled by default. # Setting drift to false disables the drift disruption method to watch for drift between currently deployed nodes # and the desired state of nodes set in nodepools and nodeclasses drift: true # -- spotToSpotConsolidation is disabled by default. # Setting this to true will enable spot replacement consolidation for both single and multi-node consolidation. spotToSpotConsolidation: false VALUES } module "karpenter_helm_chart" { source = "JetBrains/helm-charts/kubernetes" version = "0.3.0" charts = [{ namespace = var.helm_chart_namespace repository = var.helm_chart_repository repository_config = var.helm_chart_repository_config app = { name = var.helm_chart_name chart = var.helm_chart_name version = var.helm_chart_version create_namespace = var.helm_chart_create_namespace } values = try(coalesce(var.helm_chart_values, local.karpenter_default_values_dot_yaml), local.karpenter_default_values_dot_yaml) params = var.helm_chart_params secrets = var.helm_chart_secrets }] }