You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This article describes how to create Kubernetes clusters on Azure Local using the REST API. The Azure resource type for [AKS Arc provisioned clusters](/azure/templates/microsoft.hybridcontainerservice/provisionedclusterinstances?pivots=deployment-language-arm-template) is **"Microsoft.HybridContainerService/provisionedClusterInstances"**. This resource is an extension of the [connected clusters](/azure/templates/microsoft.kubernetes/connectedclusters?pivots=deployment-language-arm-template) resource type, **"Microsoft.Kubernetes/connectedClusters"**. Due to this dependency, you must first create a connected cluster resource before creating an AKS Arc resource.
17
+
18
+
## Before you begin
19
+
20
+
Before you begin, make sure you have the following details from your on-premises infrastructure administrator:
21
+
22
+
-**Azure subscription ID**: The Azure subscription ID that Azure Local uses for deployment and registration.
23
+
-**Custom Location ID**: The Azure Resource Manager ID of the custom location. The custom location is configured during the Azure Local cluster deployment. Your infrastructure admin should give you the Resource Manager ID of the custom location. This parameter is required in order to create Kubernetes clusters. If the infrastructure admin provides a custom location name and resource group name, you can also get the Resource Manager ID using the following command:
24
+
25
+
```azurecli
26
+
az customlocation show --name "<custom location name>" --resource-group <azure resource group> --query "id" -o tsv
27
+
```
28
+
29
+
-**Network ID**: The Azure Resource Manager ID of the Azure Local logical network you created [following these steps](aks-networks.md). Your admin should give you the ID of the logical network. This parameter is required in order to create Kubernetes clusters. If you know the resource group in which the logical network was created, you can also get the Azure Resource Manager ID using the following command:
30
+
31
+
```azurecli
32
+
az stack-hci-vm network lnet show --name "<lnet name>" --resource-group <azure resource group> --query "id" -o tsv
33
+
```
34
+
35
+
-**Create an SSH key pair**: Create an SSH key pair in Azure and store the private key file for troubleshooting and log collection purposes. For detailed instructions, see [Create and store SSH keys with the Azure CLI](/azure/virtual-machines/ssh-keys-azure-cli), or with the [Azure portal](/azure/virtual-machines/ssh-keys-portal).
36
+
- To connect to the Kubernetes cluster from anywhere, create a Microsoft Entra group and add members to it. All the members in the Microsoft Entra group have cluster administrator access to the cluster. Make sure to add yourself as a member to the Microsoft Entra group. If you don't add yourself, you can't access the Kubernetes cluster using **kubectl**. For more information about creating Microsoft Entra groups and adding users, see [Manage Microsoft Entra groups and group membership](/entra/fundamentals/how-to-manage-groups).
37
+
38
+
## Step 1: Create a connected cluster resource
39
+
40
+
See the API definition for [connected clusters](/rest/api/hybridkubernetes/connected-cluster/create) and create a **PUT** request with the `kind` property set to `ProvisionedCluster`. The following example is a sample **PUT** request to create a connected cluster resource using the REST API:
41
+
42
+
```http
43
+
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kubernetes/connectedClusters/{connectedClusterName}?api-version=2024-01-01
44
+
Content-Type: application/json
45
+
Authorization: Bearer <access_token>
46
+
47
+
{
48
+
"location": "<region>",
49
+
"identity": {
50
+
"type": "SystemAssigned"
51
+
},
52
+
"kind": "ProvisionedCluster",
53
+
"properties": {
54
+
"agentPublicKeyCertificate": "",
55
+
"azureHybridBenefit": "NotApplicable",
56
+
"distribution": "AKS",
57
+
"distributionVersion": "1.0",
58
+
"aadProfile": {
59
+
"enableAzureRBAC": true,
60
+
"adminGroupObjectIDs": [
61
+
"<entra-group-id>"
62
+
],
63
+
"tenantID": "<tenant-id>"
64
+
},
65
+
}
66
+
}
67
+
```
68
+
69
+
Replace all placeholder values with your actual details. For more information, see the [connected clusters API documentation](/rest/api/hybridkubernetes/connected-cluster/create).
70
+
71
+
## Step 2: Create a provisioned cluster resource
72
+
73
+
See the API definition for [provisioned clusters](/rest/api/hybridcontainer/provisioned-cluster-instances/create-or-update). In this **PUT** call, pass the Azure Resource Manager identifier created in the previous step as the URI parameter. The following code is an example HTTP **PUT** request to create a provisioned cluster resource with only the required parameters:
74
+
75
+
```http
76
+
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.HybridContainerService/provisionedClusterInstances/{clusterName}?api-version=2024-01-01-preview
77
+
Content-Type: application/json
78
+
Authorization: Bearer <access_token>
79
+
80
+
{
81
+
"extendedLocation": {
82
+
"type": "CustomLocation",
83
+
"name": "<ARM ID of Custom Location>"
84
+
},
85
+
"properties": {
86
+
"controlPlane": {
87
+
"count": 1,
88
+
"vmSize": "Standard_A4_v2"
89
+
},
90
+
"agentPoolProfiles": [
91
+
{
92
+
"name": "default-nodepool-1",
93
+
"count": 1,
94
+
"vmSize": "Standard_A4_v2",
95
+
"osType": "Linux",
96
+
}
97
+
],
98
+
"linuxProfile": {
99
+
"ssh": {
100
+
"publicKeys": [
101
+
{
102
+
"keyData": "<SSH public key>"
103
+
}
104
+
]
105
+
}
106
+
},
107
+
"cloudProviderProfile": {
108
+
"infraNetworkProfile": {
109
+
"vnetSubnetIds": [
110
+
"<ARM ID of logical network>"
111
+
]
112
+
}
113
+
},
114
+
}
115
+
}
116
+
117
+
```
118
+
119
+
Replace the placeholder values with your actual details. For more information, see the [provisioned clusters API documentation](/rest/api/hybridcontainer/provisioned-cluster-instances/create-or-update).
120
+
121
+
## Connect to the Kubernetes cluster
122
+
123
+
Now you can connect to your Kubernetes cluster by running the `az connectedk8s proxy` command from your development machine. Make sure you sign in to Azure before running this command. If you have multiple Azure subscriptions, select the appropriate subscription ID using the [az account set](/cli/azure/account#az-account-set) command.
124
+
125
+
This command downloads the **kubeconfig** of your Kubernetes cluster to your development machine and opens a proxy connection channel to your on-premises Kubernetes cluster. The channel is open for as long as the command runs. Let this command run for as long as you want to access your cluster. If it times out, close the CLI window, open a fresh one, and then run the command again.
126
+
127
+
You must have Contributor permissions on the resource group that hosts the Kubernetes cluster in order to successfully run the following command:
128
+
129
+
```azurecli
130
+
az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config
131
+
```
132
+
133
+
Expected output:
134
+
135
+
```output
136
+
Proxy is listening on port 47011
137
+
Merged "aks-workload" as current context in .\\aks-arc-kube-config
138
+
Start sending kubectl requests on 'aks-workload' context using
139
+
kubeconfig at .\\aks-arc-kube-config
140
+
Press Ctrl+C to close proxy.
141
+
```
142
+
143
+
Keep this session running and connect to your Kubernetes cluster from a different terminal or command prompt. Verify that you can connect to your Kubernetes cluster by running the `kubectl get` command. This command returns a list of the cluster nodes:
144
+
145
+
```azurecli
146
+
kubectl get node -A --kubeconfig .\aks-arc-kube-config
147
+
```
148
+
149
+
The following example output shows the node you created in the previous steps. Make sure the node status is **Ready**:
Copy file name to clipboardExpand all lines: AKS-Arc/aks-platforms-compare.md
+9-9Lines changed: 9 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,7 +3,7 @@ title: Azure Kubernetes Service (AKS) Cloud, Edge, and On-Premises Comparison
3
3
description: Learn about Azure Kubernetes Service (AKS) features, capabilities, and pricing across cloud, edge, and on-premises environments to choose the best deployment for your needs.
4
4
author: sethmanheim
5
5
ms.topic: concept-article
6
-
ms.date: 06/12/2025
6
+
ms.date: 06/16/2025
7
7
ms.author: sethm
8
8
ms.reviewer: rmody
9
9
---
@@ -23,7 +23,7 @@ This article describes how AKS extends features across multiple platforms and hi
23
23
24
24
## General comparison of AKS across platforms
25
25
26
-
|Platform| Azure (Cloud) | Azure Local (Edge/On-premises) | Edge Essentials (Edge/On-premises, Windows IoT client/server) | Windows Server (Edge/On-premises) |
26
+
|Feature| Azure (Cloud) | Azure Local (Edge/On-premises) | Edge Essentials (Edge/On-premises, Windows IoT client/server) | Windows Server (Edge/On-premises) |
27
27
| --- | --- | --- | --- | --- |
28
28
| Supported infrastructure for Kubernetes cluster | Azure cloud | Azure Local, version 23H2 or later | - Windows 10/11 IoT Enterprise<br>- Windows 10/11 Enterprise<br>- Windows 10/11 Pro<br>- Windows Server 2019/2022 | - Windows Server 2019<br>- Windows Server 2022 |
29
29
| CNCF conformant | Yes | Yes | Yes | Yes |
@@ -38,7 +38,7 @@ This article describes how AKS extends features across multiple platforms and hi
38
38
39
39
## Monitoring and diagnostic capabilities
40
40
41
-
| Feature |Azure Cloud| AKS on Azure Local |Edge Essentials (Windows IoT client/server) |Windows Server |
41
+
| Feature | Azure (Cloud) |Azure Local (Edge/On-premises) |Edge Essentials (Edge/On-premises, Windows IoT client/server) |Windows Server (Edge/On-premises)|
42
42
| --- | --- | --- | --- | --- |
43
43
| Azure Monitor Container Insights | Yes | Yes, via Arc extensions | Yes, via Arc extensions | Yes, via Arc extensions |
44
44
| Azure Monitor Managed Prometheus and control plane metrics scraping | Yes | Yes, via Arc extensions | Yes, via Arc extensions | Yes, via Arc extensions |
@@ -48,7 +48,7 @@ This article describes how AKS extends features across multiple platforms and hi
48
48
49
49
## Node pool capabilities
50
50
51
-
| Feature | Azure Cloud |AKS on Azure Local | Edge Essentials (Windows IoT client/server) | Windows Server |
51
+
| Feature| Azure (Cloud)| Azure Local (Edge/On-premises) | Edge Essentials (Edge/On-premises, Windows IoT client/server) | Windows Server (Edge/On-premises)|
52
52
| --- | --- | --- | --- | --- |
53
53
| Windows node pool support | - Yes<br>- Windows Server 2019 Datacenter<br>- Windows Server 2022 Datacenter | - Yes<br>- Windows Server 2019 Datacenter<br>- Windows Server 2022 Datacenter | - Yes<br>- Windows Server 2022 Datacenter (Core) | - Yes<br>- Windows Server 2019 Datacenter<br>- Windows Server 2022 Datacenter |
54
54
| Linux OS offerings | - Ubuntu 18.04<br>- Azure Linux |[CBL-Mariner](https://github.com/microsoft/CBL-Mariner)|[CBL-Mariner](https://github.com/microsoft/CBL-Mariner)|[CBL-Mariner](https://github.com/microsoft/CBL-Mariner)|
@@ -67,7 +67,7 @@ This article describes how AKS extends features across multiple platforms and hi
67
67
68
68
## Networking capabilities
69
69
70
-
| Feature | Azure Cloud |AKS on Azure Local | Edge Essentials (Windows IoT /Client/Server) | Windows Server |
70
+
| Feature| Azure (Cloud)| Azure Local (Edge/On-premises) | Edge Essentials (Edge/On-premises, Windows IoT client/server) | Windows Server (Edge/On-premises)|
71
71
| --- | --- | --- | --- | --- |
72
72
| Network creation and management | By default, Azure creates a virtual network and subnet for you. You can also choose an existing virtual network in which to create your AKS clusters. | Setting up networking parameters is a required prerequisite to deploy AKS on Azure Local. Network must have connectivity and IP address availability for successful operation of the cluster. | You must provide the IP address range for node IPs and service IPs that are available and have the right connection. The network configuration needed for the cluster is handled by AKS. See [AKS Edge Essentials networking](aks-edge-concept-networking.md). | You must create the network in Windows Server before creating an AKS cluster. Network must have connectivity and IP address availability for successful operation of the cluster. |
73
73
| Supported networking option | Bring your own Azure virtual network for AKS clusters. | Static IP networks with/without VLAN ID. | Static IP address or use reserved IPs when using DHCP. | - DHCP networks with/without VLAN ID.<br>- Static IP networks with/without VLAN ID. |
@@ -79,7 +79,7 @@ This article describes how AKS extends features across multiple platforms and hi
79
79
80
80
## Storage features
81
81
82
-
|Feature | Azure Cloud| AKS on Azure Local | Edge Essentials (Windows IoT /Client/Server) | Windows Server |
82
+
| Feature| Azure (Cloud) |Azure Local (Edge/On-premises) | Edge Essentials (Edge/On-premises, Windows IoT client/server) | Windows Server (Edge/On-premises)|
83
83
| --- | --- | --- | --- | --- |
84
84
| Types of supported persistent volumes | - Read Write Once<br>- Read Write Many | - VHDX – Read Write Once<br>- SMB or NFS – Read Write Many<br>- ACSA - Read Write Many | - PVC using local storage<br>- ACSA | - VHDX – Read Write Once<br>- SMB or NFS - Read Write Many |
@@ -90,7 +90,7 @@ This article describes how AKS extends features across multiple platforms and hi
90
90
91
91
## Security and authentication options
92
92
93
-
|Feature | Azure Cloud |AKS on Azure Local | Edge Essentials (Windows IoT /Client/Server) | Windows Server |
93
+
| Feature| Azure (Cloud)| Azure Local (Edge/On-premises) | Edge Essentials (Edge/On-premises, Windows IoT client/server) | Windows Server (Edge/On-premises)|
@@ -107,15 +107,15 @@ This article describes how AKS extends features across multiple platforms and hi
107
107
108
108
## Pricing and SLA details
109
109
110
-
|Feature | Azure Cloud| AKS on Azure Local | Edge Essentials (Windows IoT client/server) | Windows Server |
110
+
| Feature| Azure (Cloud) |Azure Local (Edge/On-premises) | Edge Essentials (Edge/On-premises, Windows IoT client/server) | Windows Server (Edge/On-premises)|
111
111
| --- | --- | --- | --- | --- |
112
112
| Pricing | - Unlimited free clusters, pay for on-demand compute of worker node VMs.<br>- Paid tier available with uptime SLA, support for 5k nodes. | Included in Azure Local at no extra cost. | Cost is per device per month. | Pricing is based on the number of workload cluster vCPUs. Control plane nodes and load balancer VMs are free. |
113
113
| Azure Hybrid Benefit support | Not applicable | Not applicable - AKS already included at no extra cost. | No | Yes |
114
114
| SLA | Paid uptime SLA clusters for production with fixed cost on the API + worker node compute, storage and networking costs. | No SLA offered as the Kubernetes cluster is running on premises. | No SLA offered as the Kubernetes cluster is running on premises. | No SLA offered as the Kubernetes cluster is running on premises. |
115
115
116
116
### AI/ML capabilities offered in each platform
117
117
118
-
|Feature | Azure Cloud |AKS on Azure Local | Edge Essentials (Windows IoT /Client/Server) | Windows Server |
118
+
| Feature| Azure (Cloud)| Azure Local (Edge/On-premises) | Edge Essentials (Edge/On-premises, Windows IoT client/server) | Windows Server (Edge/On-premises)|
119
119
| --- | --- | --- | --- | --- |
120
120
| GPU support | Yes | Yes | Yes | Yes |
121
121
| KAITO (Kubernetes AI toolchain operator) | Yes | Yes, via Arc extensions | No | No |
0 commit comments