1
+ # Create k8s service resource group
2
+ resource "azurerm_resource_group" "rg" {
3
+ name = upper (var. resource_group_name )
4
+ location = var. location
5
+ tags = {
6
+ Environment = upper (var. environment )
7
+ Orchestrator = " Terraform"
8
+ DisplayName = upper (var. resource_group_name )
9
+ ApplicationName = lower (var. application_name )
10
+ Temporary = upper (var. temporary )
11
+ }
12
+ }
13
+
14
+ # Create AKS cluster, nodepools, loadbalancer etc
15
+ resource "azurerm_kubernetes_cluster" "aks_cluster" {
16
+ name = upper (var. aks_cluster_name )
17
+ location = var. location
18
+ resource_group_name = azurerm_resource_group. rg . name
19
+ automatic_upgrade_channel = var. automatic_upgrade_channel
20
+ kubernetes_version = var. kubernetes_version
21
+ sku_tier = var. kubernetes_sku_tier
22
+ node_resource_group = var. aks_node_resource_group_name
23
+
24
+ dns_prefix = var. aks_cluster_name
25
+
26
+ azure_active_directory_role_based_access_control {
27
+ tenant_id = data. azurerm_client_config . current . tenant_id
28
+ admin_group_object_ids = data. azuread_groups . cluster_admin . object_ids
29
+ }
30
+
31
+ network_profile {
32
+ network_plugin = var. network_plugin
33
+ network_plugin_mode = var. network_plugin_mode
34
+ network_policy = var. network_policy
35
+ pod_cidr = var. pod_cidr_range
36
+ service_cidr = var. service_cidr_subnet
37
+ load_balancer_sku = var. load_balancer_sku
38
+ dns_service_ip = cidrhost ((var. service_cidr_subnet ), 5 ) # 5th ip on service cidr subnet
39
+ }
40
+
41
+ service_principal {
42
+ client_id = data. azurerm_key_vault_secret . appid . value
43
+ client_secret = data. azurerm_key_vault_secret . secret . value
44
+ }
45
+
46
+ workload_identity_enabled = var. workload_identity_enabled
47
+ oidc_issuer_enabled = var. workload_identity_enabled ? true : false
48
+
49
+ support_plan = var. support_plan
50
+
51
+ storage_profile {
52
+ blob_driver_enabled = var. enable_blob_driver
53
+ disk_driver_enabled = var. enable_disk_driver
54
+ file_driver_enabled = var. enable_fileshare_driver
55
+ }
56
+
57
+ default_node_pool {
58
+ name = var. default_nodepool_name
59
+ vm_size = var. default_nodepool_sku
60
+ auto_scaling_enabled = var. default_nodepool_autoscaling
61
+ type = " VirtualMachineScaleSets"
62
+ node_public_ip_enabled = var. node_public_ip_enabled
63
+ orchestrator_version = var. kubernetes_version
64
+ max_pods = var. max_pods_per_node
65
+ vnet_subnet_id = data. azurerm_subnet . vnet_subnet_cidr . id
66
+ os_sku = var. os_sku
67
+ max_count = var. default_nodepool_max_count
68
+ min_count = var. default_nodepool_min_count
69
+ tags = {
70
+ Environment = upper (var. environment )
71
+ DisplayName = upper (var. default_nodepool_name )
72
+ ApplicationName = lower (var. application_name )
73
+ Temporary = upper (var. temporary )
74
+ }
75
+
76
+ }
77
+
78
+ depends_on = [ azurerm_resource_group . rg ]
79
+
80
+ key_vault_secrets_provider {
81
+ secret_rotation_enabled = var. key_vault_secrets_provider
82
+ secret_rotation_interval = var. secret_rotation_interval
83
+ }
84
+
85
+ tags = {
86
+ Environment = upper (var. environment )
87
+ Orchestrator = " Terraform"
88
+ DisplayName = upper (var. aks_cluster_name )
89
+ ApplicationName = lower (var. application_name )
90
+ Temporary = upper (var. temporary )
91
+ }
92
+
93
+ }
94
+
95
+ # Create worker nodepool
96
+ resource "azurerm_kubernetes_cluster_node_pool" "workernodes" {
97
+ name = var. worker_nodepool_name
98
+ kubernetes_cluster_id = azurerm_kubernetes_cluster. aks_cluster . id
99
+ vm_size = var. worker_nodepool_sku
100
+ auto_scaling_enabled = var. worker_nodepool_autoscaling
101
+ node_public_ip_enabled = var. node_public_ip_enabled
102
+ priority = var. worker_node_spot ? " Spot" : " Regular"
103
+ scale_down_mode = var. worker_node_scaledown_mode
104
+ vnet_subnet_id = data. azurerm_subnet . vnet_subnet_cidr . id
105
+ min_count = var. worker_nodepool_min_count
106
+ max_count = var. worker_nodepool_max_count
107
+ eviction_policy = var. worker_nodepool_eviction_policy
108
+ os_sku = var. os_sku
109
+ os_disk_size_gb = var. os_disk_size_in_gb
110
+ orchestrator_version = var. kubernetes_version
111
+ max_pods = var. max_pods_per_node
112
+ tags = {
113
+ Environment = upper (var. environment )
114
+ DisplayName = upper (var. worker_nodepool_name )
115
+ ApplicationName = lower (var. application_name )
116
+ Temporary = upper (var. temporary )
117
+ }
118
+ }
0 commit comments