Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update AKS module with default configuration #343

Merged
merged 11 commits into from
Oct 18, 2024
11 changes: 7 additions & 4 deletions modules/terraform/azure/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ SCENARIO_NAME=nap-c4n10p100
RUN_ID=$(date +%s)
CLOUD=azure
REGION=eastus2
SKU_TIER=free
SKU_TIER=Free
NETWORK_POLICY=cilium
TERRAFORM_MODULES_DIR=modules/terraform/$CLOUD
TERRAFORM_INPUT_FILE=$(pwd)/scenarios/$SCENARIO_TYPE/$SCENARIO_NAME/terraform-inputs/${CLOUD}.tfvars
SYSTEM_NODE_POOL=${SYSTEM_NODE_POOL:-null}
Expand Down Expand Up @@ -58,13 +59,15 @@ Set `INPUT_JSON` variable. This variable is not exhaustive and may vary dependin
INPUT_JSON=$(jq -n \
--arg run_id $RUN_ID \
--arg region $REGION \
--arg aks_cli_sku_tier "$SKU_TIER" \
--arg aks_sku_tier "$SKU_TIER" \
--arg aks_network_policy "$NETWORK_POLICY" \
--argjson aks_cli_system_node_pool "$SYSTEM_NODE_POOL" \
--argjson aks_cli_user_node_pool "$USER_NODE_POOL" \
'{
run_id: $run_id,
region: $region,
aks_cli_sku_tier: $aks_cli_sku_tier,
aks_sku_tier: $aks_sku_tier,
aks_network_policy: $aks_network_policy,
aks_cli_system_node_pool: $aks_cli_system_node_pool,
aks_cli_user_node_pool: $aks_cli_user_node_pool
}' | jq 'with_entries(select(.value != null and .value != ""))')
Expand All @@ -77,7 +80,7 @@ Set `INPUT_JSON` variable. This variable is not exhaustive and may vary dependin
pushd $TERRAFORM_MODULES_DIR
terraform init
terraform plan -var json_input=$(echo $INPUT_JSON | jq -c .) -var-file $TERRAFORM_INPUT_FILE
terraform apply -var json_input=$(echo $INPUT_JSON | jq -c .) -var-file $TERRAFORM_INPUT_FILE
terraform apply -var json_input=$(echo $INPUT_JSON | jq -c .) -var-file $TERRAFORM_INPUT_FILE --auto-approve
popd
```

Expand Down
16 changes: 13 additions & 3 deletions modules/terraform/azure/aks/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ resource "azurerm_kubernetes_cluster" "aks" {
only_critical_addons_enabled = var.aks_config.default_node_pool.only_critical_addons_enabled
temporary_name_for_rotation = var.aks_config.default_node_pool.temporary_name_for_rotation
max_pods = var.aks_config.default_node_pool.max_pods
min_count = var.aks_config.default_node_pool.min_count
max_count = var.aks_config.default_node_pool.max_count
enable_auto_scaling = var.aks_config.default_node_pool.enable_auto_scaling
}

network_profile {
Expand All @@ -38,6 +41,12 @@ resource "azurerm_kubernetes_cluster" "aks" {
outbound_type = var.aks_config.network_profile.outbound_type
pod_cidr = var.aks_config.network_profile.pod_cidr
}

auto_scaler_profile {
}

automatic_channel_upgrade = "patch"

identity {
type = "SystemAssigned"
}
Expand All @@ -49,9 +58,7 @@ resource "azurerm_kubernetes_cluster" "aks" {
}
}

oidc_issuer_enabled = true
workload_identity_enabled = true
kubernetes_version = var.aks_config.kubernetes_version
kubernetes_version = var.aks_config.kubernetes_version
}

resource "azurerm_kubernetes_cluster_node_pool" "pools" {
Expand All @@ -65,9 +72,12 @@ resource "azurerm_kubernetes_cluster_node_pool" "pools" {
os_sku = each.value.os_sku
os_disk_type = each.value.os_disk_type
max_pods = each.value.max_pods
min_count = each.value.min_count
max_count = each.value.max_count
ultra_ssd_enabled = try(each.value.ultra_ssd_enabled, false)
zones = try(each.value.zones, [])
node_taints = each.value.node_taints
enable_auto_scaling = try(each.value.enable_auto_scaling, true)
}

resource "azurerm_role_assignment" "aks_on_subnet" {
Expand Down
41 changes: 22 additions & 19 deletions modules/terraform/azure/aks/variables.tf
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
variable "resource_group_name" {
description = "Value of the resource group name"
type = string
default = "rg"
}

variable "location" {
description = "Value of the location"
type = string
default = "East US"
}

variable "tags" {
type = map(string)
default = {
}
description = "value of the tags"
type = map(string)
}

variable "subnet_id" {
Expand Down Expand Up @@ -41,8 +38,8 @@ variable "aks_config" {
dns_prefix = string
subnet_name = optional(string, null)
network_profile = optional(object({
network_plugin = optional(string, null)
network_plugin_mode = optional(string, null)
network_plugin = optional(string, "azure")
network_plugin_mode = optional(string, "overlay")
network_policy = optional(string, null)
ebpf_data_plane = optional(string, null)
outbound_type = optional(string, null)
Expand All @@ -57,20 +54,26 @@ variable "aks_config" {
os_sku = optional(string, "Ubuntu")
os_disk_type = optional(string, "Managed")
only_critical_addons_enabled = bool
temporary_name_for_rotation = string
max_pods = optional(number, null)
temporary_name_for_rotation = optional(string, "defaulttmp")
max_pods = optional(number, 110)
min_count = optional(number, 2)
max_count = optional(number, 5)
enable_auto_scaling = optional(bool, true)
})
extra_node_pool = list(object({
name = string
subnet_name = optional(string, null)
node_count = number
vm_size = string
os_sku = optional(string, "Ubuntu")
os_disk_type = optional(string, "Managed")
max_pods = optional(number, null)
ultra_ssd_enabled = optional(bool, false)
zones = optional(list(string), [])
node_taints = optional(list(string), [])
name = string
subnet_name = optional(string, null)
node_count = number
vm_size = string
os_sku = optional(string, "Ubuntu")
os_disk_type = optional(string, "Managed")
max_pods = optional(number, 110)
min_count = optional(number, 2)
max_count = optional(number, 100)
ultra_ssd_enabled = optional(bool, false)
zones = optional(list(string), [])
node_taints = optional(list(string), [])
enable_auto_scaling = optional(bool, true)
}))
role_assignment_list = optional(list(string), [])
service_mesh_profile = optional(object({
Expand Down
5 changes: 4 additions & 1 deletion modules/terraform/azure/azure_input_schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@
"region": {
"type": "string"
},
"aks_cli_sku_tier": {
"aks_sku_tier": {
"type": "string"
},
"aks_network_policy": {
"type": "string"
},
"aks_cli_system_node_pool": {
Expand Down
42 changes: 28 additions & 14 deletions modules/terraform/azure/main.tf
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
locals {
region = lookup(var.json_input, "region", "East US")
run_id = lookup(var.json_input, "run_id", "123456")
aks_cli_sku_tier = lookup(var.json_input, "aks_cli_sku_tier", "standard")
aks_sku_tier = lookup(var.json_input, "aks_sku_tier", "Standard")
aks_network_policy = lookup(var.json_input, "aks_network_policy", null)
aks_cli_system_node_pool = lookup(var.json_input, "aks_cli_system_node_pool", null)
aks_cli_user_node_pool = lookup(var.json_input, "aks_cli_user_node_pool", null)
aks_custom_headers = lookup(var.json_input, "aks_custom_headers", [])
Expand All @@ -14,22 +15,35 @@ locals {
"run_id" = local.run_id
}

aks_config_map = { for aks in var.aks_config_list : aks.role => aks }
updated_aks_config_list = length(var.aks_config_list) == 1 ? [
for aks in var.aks_config_list : merge(
aks,
{
sku_tier = length(local.aks_sku_tier) > 0 ? local.aks_sku_tier : aks.sku_tier
network_profile = merge(
aks.network_profile,
{
network_policy = local.aks_network_policy != null ? local.aks_network_policy : aks.network_profile.network_policy
ebpf_data_plane = local.aks_network_policy != null && local.aks_network_policy == "cilium" ? local.aks_network_policy : aks.network_profile.ebpf_data_plane
}
)
}
)
] : []

aks_config_map = length(local.updated_aks_config_list) == 0 ? { for aks in var.aks_config_list : aks.role => aks } : { for aks in local.updated_aks_config_list : aks.role => aks }

updated_aks_cli_config_list = (length(var.aks_cli_config_list) == 1) ? flatten([
for aks in var.aks_cli_config_list : [
updated_aks_cli_config_list = length(var.aks_cli_config_list) == 1 ? [
for aks in var.aks_cli_config_list : merge(
aks,
{
role = aks.role
aks_name = aks.aks_name
sku_tier = length(local.aks_cli_sku_tier) > 0 ? local.aks_cli_sku_tier : aks.sku_tier
aks_custom_headers = length(local.aks_custom_headers) > 0 ? local.aks_custom_headers : aks.aks_custom_headers
use_aks_preview_cli_extension = aks.use_aks_preview_cli_extension
default_node_pool = local.aks_cli_system_node_pool != null ? local.aks_cli_system_node_pool : aks.default_node_pool
extra_node_pool = local.aks_cli_user_node_pool != null ? local.aks_cli_user_node_pool : aks.extra_node_pool
optional_parameters = aks.optional_parameters
sku_tier = length(local.aks_sku_tier) > 0 ? local.aks_sku_tier : aks.sku_tier
aks_custom_headers = length(local.aks_custom_headers) > 0 ? local.aks_custom_headers : aks.aks_custom_headers
default_node_pool = local.aks_cli_system_node_pool != null ? local.aks_cli_system_node_pool : aks.default_node_pool
extra_node_pool = local.aks_cli_user_node_pool != null ? local.aks_cli_user_node_pool : aks.extra_node_pool
}
]
]) : []
)
] : []

aks_cli_config_map = length(local.updated_aks_cli_config_list) == 0 ? { for aks in var.aks_cli_config_list : aks.role => aks } : { for aks in local.updated_aks_cli_config_list : aks.role => aks }
}
Expand Down
26 changes: 16 additions & 10 deletions modules/terraform/azure/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ variable "json_input" {
type = object({
run_id = string
region = string
aks_cli_sku_tier = optional(string, "standard")
aks_sku_tier = optional(string, "Standard")
aks_network_policy = optional(string, null)
aks_custom_headers = optional(list(string), [])
aks_cli_system_node_pool = optional(object({
name = string
Expand Down Expand Up @@ -58,8 +59,8 @@ variable "aks_config_list" {
subnet_name = optional(string)
dns_prefix = string
network_profile = optional(object({
network_plugin = optional(string, null)
network_plugin_mode = optional(string, null)
network_plugin = optional(string, "azure")
network_plugin_mode = optional(string, "overlay")
network_policy = optional(string, null)
ebpf_data_plane = optional(string, null)
outbound_type = optional(string, null)
Expand All @@ -74,20 +75,25 @@ variable "aks_config_list" {
subnet_name = optional(string)
node_count = number
vm_size = string
os_sku = optional(string)
os_disk_type = optional(string)
os_sku = optional(string, "Ubuntu")
os_disk_type = optional(string, "Managed")
only_critical_addons_enabled = bool
temporary_name_for_rotation = string
max_pods = optional(number)
temporary_name_for_rotation = optional(string, "defaulttmp")
max_pods = optional(number, 110)
min_count = optional(number, 2)
max_count = optional(number, 5)
enable_auto_scaling = optional(bool, true)
})
extra_node_pool = list(object({
name = string
subnet_name = optional(string)
node_count = number
vm_size = string
os_sku = optional(string)
os_disk_type = optional(string)
max_pods = optional(number)
os_sku = optional(string, "Ubuntu")
os_disk_type = optional(string, "Managed")
max_pods = optional(number, 110)
min_count = optional(number, 2)
max_count = optional(number, 100)
ultra_ssd_enabled = optional(bool, false)
zones = optional(list(string), [])
node_taints = optional(list(string), [])
Expand Down
4 changes: 4 additions & 0 deletions steps/terraform/set-input-variables-azure.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,17 @@ steps:
INPUT_VARIABLES=$(jq -n \
--arg run_id $RUN_ID \
--arg region $REGION \
--arg aks_sku_tier "$SKU_TIER" \
--arg aks_network_policy "$NETWORK_POLICY" \
--argjson aks_custom_headers "$AKS_CUSTOM_HEADERS" \
--argjson aks_cli_system_node_pool "$SYSTEM_NODE_POOL" \
--argjson aks_cli_user_node_pool "$USER_NODE_POOL" \
'{
run_id: $run_id,
region: $region,
aks_custom_headers: $aks_custom_headers,
aks_sku_tier: $aks_sku_tier,
aks_network_policy: $aks_network_policy,
aks_cli_system_node_pool: $aks_cli_system_node_pool,
aks_cli_user_node_pool: $aks_cli_user_node_pool
}' | jq 'with_entries(select(.value != null and .value != ""))')
Expand Down
Loading