Skip to content

[Major] Code Freeze PR #21

Merged
merged 66 commits into from
Apr 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
7358d10
add startup taint
morga471 Mar 5, 2025
07d456f
add namespace and startup taint to template
morga471 Mar 5, 2025
ea60e93
templatlize
morga471 Mar 5, 2025
40ed7b6
fix vals
morga471 Mar 5, 2025
0d8a8f6
fewer things
morga471 Mar 5, 2025
501aacd
add a few missing values
morga471 Mar 5, 2025
19cf7e6
create ns
morga471 Mar 5, 2025
1a547b5
update values
morga471 Mar 5, 2025
d445b1c
add nodeSelector and tolerations
morga471 Mar 5, 2025
81a8b56
remove digest
morga471 Mar 5, 2025
449243a
node group
morga471 Mar 5, 2025
b0c7ec8
fmt
morga471 Mar 5, 2025
0d06502
syntax and startupTaints
morga471 Mar 5, 2025
2b46504
fix syntax
morga471 Mar 5, 2025
69e8502
update values
morga471 Mar 5, 2025
7c5fa11
remove ng selector
morga471 Mar 5, 2025
9c910c3
lower cpu requests
morga471 Mar 5, 2025
ec02f16
use digest again
morga471 Mar 5, 2025
116fdff
simplify repository
morga471 Mar 5, 2025
671a726
fix repository
morga471 Mar 5, 2025
8c8cbf1
escape the .
morga471 Mar 5, 2025
762af8a
fix subnets_name
morga471 Mar 5, 2025
bc4911c
subnet selector
morga471 Mar 5, 2025
91b59f7
use the outputs from karpenter module
morga471 Mar 5, 2025
38dab0b
create instance profile true
morga471 Mar 5, 2025
687523d
cleanup
morga471 Mar 5, 2025
e49cb0d
without cluster tag
morga471 Mar 5, 2025
64c71a1
pass in vpc
morga471 Mar 5, 2025
a7d4d44
enable debug and disable serviceMonitor
morga471 Mar 6, 2025
4ef14ef
fix merge issues
morga471 Mar 11, 2025
7e9c2b6
update resources and set eksControlPlane true
morga471 Mar 22, 2025
92bb9ca
try enable_pod_identity
morga471 Mar 24, 2025
7652208
update updated upstream
morga471 Mar 24, 2025
6ca5756
more options for namings
morga471 Mar 24, 2025
1d20564
shorter
morga471 Mar 24, 2025
33b6967
validate role name length
morga471 Mar 24, 2025
8a57be2
validate event rules name length
morga471 Mar 24, 2025
a10b32e
shorter
morga471 Mar 24, 2025
82c4bfb
shorter still
morga471 Mar 24, 2025
b31af4f
fix prefix
morga471 Mar 24, 2025
d03299a
name the queue
morga471 Mar 24, 2025
591720c
66 - 3 = 63, limit 64
morga471 Mar 24, 2025
c37722a
longest event name is InstanceStateChange
morga471 Mar 24, 2025
d07da3c
another
morga471 Mar 25, 2025
47cf922
maybe
morga471 Mar 25, 2025
a76b71e
name
morga471 Mar 25, 2025
6a49954
name_prefix
morga471 Mar 25, 2025
c6d8a70
or_not
morga471 Mar 25, 2025
bb56bad
add module release process
morga471 Apr 1, 2025
f203a80
update module source
morga471 Apr 1, 2025
37fe374
update release actions
morga471 Apr 3, 2025
16ca976
pull from ent-ecr
morga471 Apr 14, 2025
a3016e4
Clean up unused variables and values (#20)
yang0352 Apr 16, 2025
2783eed
Merge branch 'main' into mcmCluster
morga471 Apr 16, 2025
17337bb
use eecr images
morga471 Apr 17, 2025
d41777f
pull across accounts from central ecr
morga471 Apr 17, 2025
842cfb2
pull across accounts from central ecr
morga471 Apr 17, 2025
d2dd085
add irsa back
morga471 Apr 17, 2025
6685e28
remove dupes from bad merge
morga471 Apr 17, 2025
1317544
dynamic version
morga471 Apr 18, 2025
c2bc87f
remove eecr data item as it is in the provider
morga471 Apr 18, 2025
a80a6e8
update copy images for eecr pulling
morga471 Apr 19, 2025
2ab325e
update var and ent_ecr_source
morga471 Apr 19, 2025
f5325b3
ensure workflows are current
morga471 Apr 21, 2025
b914632
ensure workflows are current
morga471 Apr 21, 2025
8a7a188
ensure committed
morga471 Apr 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/terraform-release.yaml
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
name: Terraform CI/CD
name: Terraform Module Release
on:
workflow_dispatch:
pull_request:
types: [closed]
branches:
- main
jobs:
terraform-ci-cd:
runs-on: 229685449397
terraform-release:
runs-on: "229685449397"
permissions:
contents: write

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/terraform-validate.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
- name: Setup Terraform
uses: CSVD/gh-actions-setup-terraform@v2
with:
terraform_version: '1.7.3'
terraform_version: '1.10.5'

- name: Validate Terraform Configuration
id: validate
Expand Down
13 changes: 10 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,16 @@ The module deploys Karpenter needed AWS resources, namely in IAM. It copies the
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.13 |
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.14.0 |
| <a name="requirement_helm"></a> [helm](#requirement\_helm) | >= 2.11.0 |
| <a name="requirement_null"></a> [null](#requirement\_null) | >= 3.2.1 |

## Providers

| Name | Version |
|------|---------|
| <a name="provider_aws"></a> [aws](#provider\_aws) | 5.89.0 |
| <a name="provider_aws"></a> [aws](#provider\_aws) | 5.94.1 |
| <a name="provider_aws.eecr"></a> [aws.eecr](#provider\_aws.eecr) | 5.94.1 |
| <a name="provider_helm"></a> [helm](#provider\_helm) | 2.17.0 |
| <a name="provider_null"></a> [null](#provider\_null) | 3.2.3 |

## Modules

Expand All @@ -41,27 +44,31 @@ The module deploys Karpenter needed AWS resources, namely in IAM. It copies the
|------|------|
| [helm_release.karpenter](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) | resource |
| [helm_release.nodepool_resources](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) | resource |
| [null_resource.git_version](https://registry.terraform.io/providers/hashicorp/null/latest/docs/resources/resource) | resource |
| [aws_arn.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/arn) | data source |
| [aws_caller_identity.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/caller_identity) | data source |
| [aws_ecr_authorization_token.ecr_token](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ecr_authorization_token) | data source |
| [aws_ecr_authorization_token.token](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ecr_authorization_token) | data source |
| [aws_ecr_image.karpenter_image](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/ecr_image) | data source |

## Inputs

| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| <a name="input_account_id"></a> [account\_id](#input\_account\_id) | aws account number | `string` | `""` | no |
| <a name="input_cluster_endpoint"></a> [cluster\_endpoint](#input\_cluster\_endpoint) | Endpoint for your Kubernetes API server | `string` | n/a | yes |
| <a name="input_cluster_name"></a> [cluster\_name](#input\_cluster\_name) | EKS cluster name name component used through out the EKS cluster describing its purpose (ex: dice-dev) | `string` | n/a | yes |
| <a name="input_eecr_info"></a> [eecr\_info](#input\_eecr\_info) | Enterprise ECR source information | <pre>object({<br/> account_id = string<br/> alias = string<br/> profile = string<br/> region = string<br/> })</pre> | <pre>{<br/> "account_id": "269222635945",<br/> "alias": "lab-gov-shared-nonprod",<br/> "profile": "269222635945-lab-gov-shared-nonprod",<br/> "region": "us-gov-east-1"<br/>}</pre> | no |
| <a name="input_karpenter_helm_chart"></a> [karpenter\_helm\_chart](#input\_karpenter\_helm\_chart) | Which helm chart of karpenter | `string` | `"1.1.1"` | no |
| <a name="input_karpenter_helm_repo"></a> [karpenter\_helm\_repo](#input\_karpenter\_helm\_repo) | Helm repo for official karpenter chart | `string` | `"oci://public.ecr.aws/karpenter"` | no |
| <a name="input_karpenter_node_group_name"></a> [karpenter\_node\_group\_name](#input\_karpenter\_node\_group\_name) | The cluster node group that will host karpenter, should not be a karpenter managed node group | `string` | n/a | yes |
| <a name="input_karpenter_tag"></a> [karpenter\_tag](#input\_karpenter\_tag) | Which tag of karpenter image | `string` | `"1.1.1"` | no |
| <a name="input_namespace"></a> [namespace](#input\_namespace) | Namespace for Karpenter | `string` | `"namespace"` | no |
| <a name="input_oidc_provider_arn"></a> [oidc\_provider\_arn](#input\_oidc\_provider\_arn) | The ARN of the OIDC Provider if `enable_irsa = true` | `string` | n/a | yes |
| <a name="input_oidc_provider_arn"></a> [oidc\_provider\_arn](#input\_oidc\_provider\_arn) | The ARN of the OIDC Provider if `enable_irsa = true` | `string` | `""` | no |
| <a name="input_profile"></a> [profile](#input\_profile) | AWS config profile | `string` | `""` | no |
| <a name="input_region"></a> [region](#input\_region) | AWS region | `string` | n/a | yes |
| <a name="input_subnets_name"></a> [subnets\_name](#input\_subnets\_name) | Define the name of the subnets to be used by this cluster | `string` | `"*-container-*"` | no |
| <a name="input_tags"></a> [tags](#input\_tags) | AWS Tags to apply to appropriate resources | `map(string)` | `{}` | no |
| <a name="input_vpc_id"></a> [vpc\_id](#input\_vpc\_id) | The ID of the VPC where the resources will be deployed | `string` | n/a | yes |

## Outputs

Expand Down
30 changes: 25 additions & 5 deletions copy_images.tf
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
locals {
karpenter_key = format("%v#%v", "karpenter/controller", var.karpenter_tag)
karpenter_key = format("%v#%v", "karpenter/controller", var.karpenter_tag)
ent_ecr_source = format("%v.%v.%v.%v", var.eecr_info.account_id, "dkr.ecr", var.region, "amazonaws.com/ent-images")

image_config = [
{
enabled = true
dest_path = null
name = "karpenter/controller"
source_image = "karpenter/controller"
source_registry = "public.ecr.aws"
source_registry = format("%v/%v", local.ent_ecr_source, "public-ecr")
source_tag = var.karpenter_tag
tag = var.karpenter_tag
},
]
}

# 224384469011.dkr.ecr.us-gov-east-1.amazonaws.com/platform-test-1/karpenter:0.37.0
# map[repository:224384469011.dkr.ecr.us-gov-east-1.amazonaws.com/platform-test-1/karpenter tag:0.37.0]
module "images" {
source = "git::https://github.e.it.census.gov/terraform-modules/aws-ecr-copy-images.git/?ref=tf-upgrade"

Expand All @@ -27,5 +26,26 @@ module "images" {
enable_lifecycle_policy = true
lifecycle_policy_all = true
force_delete = true
lifecycle_policy_keep_count = 3
lifecycle_policy_keep_count = 5

source_username = data.aws_ecr_authorization_token.ecr_token.user_name
source_password = data.aws_ecr_authorization_token.ecr_token.password

destination_username = data.aws_ecr_authorization_token.token.user_name
destination_password = data.aws_ecr_authorization_token.token.password
}

data "aws_ecr_authorization_token" "token" {
registry_id = var.account_id
}

data "aws_ecr_authorization_token" "ecr_token" {
provider = aws.eecr
registry_id = var.eecr_info.account_id
}

provider "aws" {
alias = "eecr"
profile = var.eecr_info.profile
region = var.eecr_info.region
}
1 change: 0 additions & 1 deletion karpenter-resources/values.yaml.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ ec2NodeClass:
amiFamily: ${amd_ami_family}
amiSelectorTerms:
- alias: ${amd_ami_alias}
vpcId: ${vpc_id}
subnetSelectorTerms:
- tags:
Name: "${subnets_name}"
Expand Down
6 changes: 0 additions & 6 deletions karpenter/values.yaml.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,6 @@ controller:
env:
- name: AWS_REGION
value: ${region}
nodeSelector:
kubernetes.io/os: linux
tolerations:
- key: "node-role.kubernetes.io/control-plane"
operator: "Exists"
effect: "NoSchedule"

nodeSelector:
kubernetes.io/os: linux
Expand Down
5 changes: 2 additions & 3 deletions main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ module "karpenter_resources" {
create_node_iam_role = true
create_pod_identity_association = true
enable_irsa = true
enable_pod_identity = true
enable_v1_permissions = true
irsa_namespace_service_accounts = ["${var.namespace}:karpenter"]
irsa_oidc_provider_arn = var.oidc_provider_arn
enable_pod_identity = true
enable_v1_permissions = true
node_iam_role_name = local.node_iam_role_name
queue_name = local.queue_name
rule_name_prefix = local.rule_name_prefix
Expand Down Expand Up @@ -104,7 +104,6 @@ resource "helm_release" "nodepool_resources" {
karpenter_node_profile = module.karpenter_resources.instance_profile_name
subnets_name = var.subnets_name
tags = var.tags
vpc_id = var.vpc_id
})
]
}
4 changes: 4 additions & 0 deletions requirements.tf
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,9 @@ terraform {
source = "hashicorp/helm"
version = ">= 2.11.0"
}
null = {
source = "hashicorp/null"
version = ">= 3.2.1"
}
}
}
77 changes: 48 additions & 29 deletions variables.tf
Original file line number Diff line number Diff line change
@@ -1,32 +1,39 @@
variable "region" {
description = "AWS region"
variable "account_id" {
description = "aws account number"
type = string
default = ""
}

variable "profile" {
description = "AWS config profile"
variable "cluster_endpoint" {
description = "Endpoint for your Kubernetes API server"
type = string
default = ""
}

variable "cluster_name" {
description = "EKS cluster name name component used through out the EKS cluster describing its purpose (ex: dice-dev)"
type = string
}

variable "cluster_endpoint" {
description = "Endpoint for your Kubernetes API server"
type = string
variable "eecr_info" {
description = "Enterprise ECR source information"
type = object({
account_id = string
alias = string
profile = string
region = string
})
default = {
account_id = "269222635945"
alias = "lab-gov-shared-nonprod"
profile = "269222635945-lab-gov-shared-nonprod"
region = "us-gov-east-1"
}
}

variable "oidc_provider_arn" {
description = "The ARN of the OIDC Provider if `enable_irsa = true`"
type = string
}

variable "karpenter_node_group_name" {
description = "The cluster node group that will host karpenter, should not be a karpenter managed node group"
variable "karpenter_helm_chart" {
description = "Which helm chart of karpenter"
type = string
default = "1.1.1"
}

variable "karpenter_helm_repo" {
Expand All @@ -36,10 +43,9 @@ variable "karpenter_helm_repo" {
# default = "https://charts.karpenter.sh/" public.ecr.aws/karpenter/karpenter:0.37.0
}

variable "karpenter_helm_chart" {
description = "Which helm chart of karpenter"
variable "karpenter_node_group_name" {
description = "The cluster node group that will host karpenter, should not be a karpenter managed node group"
type = string
default = "1.1.1"
}

variable "karpenter_tag" {
Expand All @@ -48,6 +54,30 @@ variable "karpenter_tag" {
default = "1.1.1"
}

variable "namespace" {
description = "Namespace for Karpenter"
type = string
default = "namespace"
}

# tflint-ignore: terraform_unused_declarations
variable "oidc_provider_arn" {
description = "The ARN of the OIDC Provider if `enable_irsa = true`"
type = string
default = ""
}

variable "profile" {
description = "AWS config profile"
type = string
default = ""
}

variable "region" {
description = "AWS region"
type = string
}

variable "subnets_name" {
description = "Define the name of the subnets to be used by this cluster"
type = string
Expand All @@ -59,14 +89,3 @@ variable "tags" {
type = map(string)
default = {}
}

variable "namespace" {
description = "Namespace for Karpenter"
type = string
default = "namespace"
}

variable "vpc_id" {
description = "The ID of the VPC where the resources will be deployed"
type = string
}
14 changes: 13 additions & 1 deletion version.tf
Original file line number Diff line number Diff line change
@@ -1,4 +1,16 @@
resource "null_resource" "git_version" {
triggers = {
# Force this to run on every apply to get the latest tag value
always_run = timestamp()
}

provisioner "local-exec" {
command = "git describe --tags --abbrev=0 2>/dev/null || echo 'unknown' > ${path.module}/.git_tag"
on_failure = continue
}
}

locals {
module_name = "tfmod-karpenter"
module_version = "0.1.1"
module_version = fileexists("${path.module}/.git_tag") ? trimspace(file("${path.module}/.git_tag")) : "latest"
}