@@ -110,92 +110,121 @@ resource "azuread_group" "aks_administrators" {
110
110
- This is going to be a very big terraform template when compared to what we created so far we will do it slowly step by step.
111
111
112
112
```
113
+ # Provision AKS Cluster
114
+ /*
115
+ 1. Add Basic Cluster Settings
116
+ - Get Latest Kubernetes Version from datasource (kubernetes_version)
117
+ - Add Node Resource Group (node_resource_group)
118
+ 2. Add Default Node Pool Settings
119
+ - orchestrator_version (latest kubernetes version using datasource)
120
+ - availability_zones
121
+ - enable_auto_scaling
122
+ - max_count, min_count
123
+ - os_disk_size_gb
124
+ - type
125
+ - node_labels
126
+ - tags
127
+ 3. Enable MSI
128
+ 4. Add On Profiles
129
+ - Azure Policy
130
+ - Azure Monitor (Reference Log Analytics Workspace id)
131
+ 5. RBAC & Azure AD Integration
132
+ 6. Admin Profiles
133
+ - Windows Admin Profile
134
+ - Linux Profile
135
+ 7. Network Profile
136
+ 8. Cluster Tags
137
+ */
138
+
113
139
resource "azurerm_kubernetes_cluster" "aks_cluster" {
114
- dns_prefix = "${azurerm_resource_group.aks_rg.name}-cluster"
115
- location = azurerm_resource_group.aks_rg.location
116
140
name = "${azurerm_resource_group.aks_rg.name}-cluster"
141
+ location = azurerm_resource_group.aks_rg.location
117
142
resource_group_name = azurerm_resource_group.aks_rg.name
143
+ dns_prefix = "${azurerm_resource_group.aks_rg.name}-cluster"
118
144
kubernetes_version = data.azurerm_kubernetes_service_versions.current.latest_version
119
145
node_resource_group = "${azurerm_resource_group.aks_rg.name}-nrg"
120
146
121
-
122
147
default_node_pool {
123
- name = "systempool"
124
- vm_size = "Standard_DS2_v2"
148
+ name = "systempool"
149
+ vm_size = "Standard_DS2_v2"
125
150
orchestrator_version = data.azurerm_kubernetes_service_versions.current.latest_version
126
151
availability_zones = [1, 2, 3]
127
152
enable_auto_scaling = true
128
153
max_count = 3
129
154
min_count = 1
130
155
os_disk_size_gb = 30
131
- type = "VirtualMachineScaleSets"
156
+ type = "VirtualMachineScaleSets"
132
157
node_labels = {
133
- "nodepool-type" = "system"
134
- "environment" = "production "
135
- "nodepoolos" = "linux"
136
- "app" = "system-apps"
137
- }
138
- tags = {
139
- "nodepool-type" = "system"
140
- "environment" = "production "
141
- "nodepoolos" = "linux"
142
- "app" = "system-apps"
143
- }
158
+ "nodepool-type" = "system"
159
+ "environment" = "dev "
160
+ "nodepoolos" = "linux"
161
+ "app" = "system-apps"
162
+ }
163
+ tags = {
164
+ "nodepool-type" = "system"
165
+ "environment" = "dev "
166
+ "nodepoolos" = "linux"
167
+ "app" = "system-apps"
168
+ }
144
169
}
145
170
146
171
# Identity (System Assigned or Service Principal)
147
- identity { type = "SystemAssigned" }
172
+ identity {
173
+ type = "SystemAssigned"
174
+ }
148
175
149
176
# Add On Profiles
150
177
addon_profile {
151
- azure_policy { enabled = true }
178
+ azure_policy {enabled = true }
152
179
oms_agent {
153
- enabled = true
180
+ enabled = true
154
181
log_analytics_workspace_id = azurerm_log_analytics_workspace.insights.id
155
182
}
156
183
}
157
184
158
185
# RBAC and Azure AD Integration Block
159
- role_based_access_control {
160
- enabled = true
161
- azure_active_directory {
162
- managed = true
163
- admin_group_object_ids = [azuread_group.aks_administrators.object_id]
186
+ role_based_access_control {
187
+ enabled = true
188
+ azure_active_directory {
189
+ managed = true
190
+ admin_group_object_ids = [azuread_group.aks_administrators.id]
191
+ }
164
192
}
165
- }
166
193
167
- # Windows Admin Profile
168
- windows_profile {
169
- admin_username = var.windows_admin_username
170
- admin_password = var.windows_admin_password
171
- }
194
+ # Windows Profile
195
+ windows_profile {
196
+ admin_username = var.windows_admin_username
197
+ admin_password = var.windows_admin_password
198
+ }
172
199
173
200
# Linux Profile
174
- linux_profile {
175
- admin_username = "ubuntu"
176
- ssh_key {
201
+ linux_profile {
202
+ admin_username = "ubuntu"
203
+ ssh_key {
177
204
key_data = file(var.ssh_public_key)
205
+ }
178
206
}
179
- }
180
207
181
208
# Network Profile
182
- network_profile {
183
- load_balancer_sku = "Standard "
184
- network_plugin = "azure "
185
- }
209
+ network_profile {
210
+ network_plugin = "azure "
211
+ load_balancer_sku = "Standard "
212
+ }
186
213
187
- # AKS Cluster Tags
188
- tags = {
189
- Environment = "prod"
214
+ tags = {
215
+ Environment = "dev"
216
+ }
190
217
}
191
218
192
-
193
- }
194
219
```
195
220
196
221
## Step-08: Create Terraform Output Values for AKS Cluster
197
222
- Create a file named ** 08-outputs.tf**
198
223
```
224
+ # Create Outputs
225
+ # 1. Resource Group Location
226
+ # 2. Resource Group Id
227
+ # 3. Resource Group Name
199
228
200
229
# Resource Group Outputs
201
230
output "location" {
@@ -210,6 +239,24 @@ output "resource_group_name" {
210
239
value = azurerm_resource_group.aks_rg.name
211
240
}
212
241
242
+ # Azure AKS Versions Datasource
243
+ output "versions" {
244
+ value = data.azurerm_kubernetes_service_versions.current.versions
245
+ }
246
+
247
+ output "latest_version" {
248
+ value = data.azurerm_kubernetes_service_versions.current.latest_version
249
+ }
250
+
251
+ # Azure AD Group Object Id
252
+ output "azure_ad_group_id" {
253
+ value = azuread_group.aks_administrators.id
254
+ }
255
+ output "azure_ad_group_objectid" {
256
+ value = azuread_group.aks_administrators.object_id
257
+ }
258
+
259
+
213
260
# Azure AKS Outputs
214
261
215
262
output "aks_cluster_id" {
@@ -223,6 +270,7 @@ output "aks_cluster_name" {
223
270
output "aks_cluster_kubernetes_version" {
224
271
value = azurerm_kubernetes_cluster.aks_cluster.kubernetes_version
225
272
}
273
+
226
274
```
227
275
228
276
0 commit comments