6.Compute.Cluster/container.k8s.tf (94 lines of code) (raw):

#################################################################################### # Kubernetes Fleet (https://learn.microsoft.com/azure/kubernetes-fleet/overview) # # Kubernetes Service (https://learn.microsoft.com/azure/aks/what-is-aks) # #################################################################################### variable kubernetes { type = object({ enable = bool fleetManager = object({ name = string dnsPrefix = string }) clusters = list(object({ enable = bool name = string dnsPrefix = string systemNodePool = object({ name = string machine = object({ size = string count = number }) }) userNodePools = list(object({ name = string machine = object({ size = string count = number }) spot = object({ enable = bool evictionPolicy = string }) })) })) }) } locals { kubernetesUserNodePools = flatten([ for kubernetesCluster in var.kubernetes.clusters : [ for userNodePool in kubernetesCluster.userNodePools : merge(userNodePool, { key = "${kubernetesCluster.name}-${userNodePool.name}" clusterName = kubernetesCluster.name }) ] if kubernetesCluster.enable ]) } resource azapi_resource fleet_manager { count = var.kubernetes.enable ? 1 : 0 name = var.kubernetes.fleetManager.name parent_id = azurerm_resource_group.cluster_container_aks[0].id location = azurerm_resource_group.cluster_container_aks[0].location type = "Microsoft.ContainerService/fleets@2025-03-01" body = { properties = { hubProfile = { dnsPrefix = var.kubernetes.fleetManager.dnsPrefix != "" ? var.kubernetes.fleetManager.dnsPrefix : var.kubernetes.fleetManager.name } # nodeResourceGroup = "${azurerm_resource_group.cluster_container_aks[0].name}.Managed" } } schema_validation_enabled = false } # DO NOT USE (DEPRECATED) - Creates a fleet manager WITHOUT a hub cluster! # resource azurerm_kubernetes_fleet_manager studio { # count = var.kubernete.enable ? 1 : 0 # name = var.kubernetes.fleetManager.name # resource_group_name = azurerm_resource_group.cluster_container_aks[0].name # location = azurerm_resource_group.cluster_container_aks[0].location # hub_profile { # dns_prefix = var.kubernetes.fleetManager.dnsPrefix != "" ? var.kubernetes.fleetManager.dnsPrefix : var.kubernetes.fleetManager.name # } # } resource azurerm_kubernetes_cluster studio { for_each = { for kubernetesCluster in var.kubernetes.clusters : kubernetesCluster.name => kubernetesCluster if var.kubernetes.enable && kubernetesCluster.enable } name = each.value.name resource_group_name = azurerm_resource_group.cluster_container_aks[0].name location = azurerm_resource_group.cluster_container_aks[0].location dns_prefix = each.value.dnsPrefix == "" ? "studio" : each.value.dnsPrefix private_cluster_enabled = true identity { type = "UserAssigned" identity_ids = [ data.azurerm_user_assigned_identity.studio.id ] } default_node_pool { name = each.value.systemNodePool.name vm_size = each.value.systemNodePool.machine.size node_count = each.value.systemNodePool.machine.count vnet_subnet_id = each.value.network.subnetId only_critical_addons_enabled = true } } resource azurerm_kubernetes_cluster_node_pool studio { for_each = { for userNodePool in local.kubernetesUserNodePools : userNodePool.key => userNodePool } name = each.value.name kubernetes_cluster_id = "${azurerm_resource_group.cluster_container_aks[0].id}/providers/Microsoft.ContainerService/managedClusters/${each.value.clusterName}" vm_size = each.value.machineSize node_count = each.value.machineCount priority = each.value.spotEnable ? "Spot" : "Regular" eviction_policy = each.value.spotEnable ? each.value.spotEvictionPolicy : null depends_on = [ azurerm_kubernetes_cluster.studio ] }