Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
c236286
Add Aspire.Hosting.Azure.Kubernetes package (Phase 1)
mitchdenny Apr 12, 2026
1883bf6
Add AKS support implementation spec
mitchdenny Apr 12, 2026
5c29c0e
Add unit tests for AzureKubernetesEnvironment
mitchdenny Apr 12, 2026
140f095
Add workload identity, VNet delegation, and NSP support
mitchdenny Apr 12, 2026
df06c58
Add AddNodePool and WithNodePoolAffinity for workload scheduling
mitchdenny Apr 12, 2026
372558d
Auto-create default user node pool when none configured
mitchdenny Apr 12, 2026
fb1b6b1
Fix publish: add inner K8s environment to model for Helm chart genera…
mitchdenny Apr 12, 2026
3c1cab8
Generate valid AKS Bicep instead of empty output placeholders
mitchdenny Apr 12, 2026
0256306
Add ACR integration and fix localhive packaging
mitchdenny Apr 12, 2026
8e07262
Fix localhive to include NonShipping packages in hive
mitchdenny Apr 12, 2026
cc3714f
Fix MethodAccessException: use public AddKubernetesEnvironment API
mitchdenny Apr 12, 2026
8f88138
Revert localhive.ps1 changes
mitchdenny Apr 13, 2026
80929cf
Clean up ConfigureAksInfrastructure: remove stale ProvisioningOutput …
mitchdenny Apr 13, 2026
e01c5a9
Add kubeconfig isolation for AKS deployments
mitchdenny Apr 13, 2026
3dfa157
Fix resource group resolution: read from Azure config instead of Para…
mitchdenny Apr 13, 2026
7f90b53
Fix: use resource name directly instead of BicepOutputReference for c…
mitchdenny Apr 13, 2026
b506ae3
Fix: depend on provision-azure-bicep-resources aggregation step
mitchdenny Apr 13, 2026
5624c2d
Fix: wire container registry to inner K8s env at creation time, not d…
mitchdenny Apr 13, 2026
cecd848
Fix push steps blocking: wire push to depend on ACR provisioning
mitchdenny Apr 13, 2026
235d25c
Fix push dependency: use provision-azure-bicep-resources aggregation …
mitchdenny Apr 13, 2026
782ef8a
Fix push-prereq: find step by name and add provision dependency
mitchdenny Apr 13, 2026
db33463
Add diagnostic logging to push step wiring
mitchdenny Apr 13, 2026
f4080f1
Fix push steps having no dependencies in K8s compute environment
mitchdenny Apr 13, 2026
c87adca
Fix resource group resolution: query Azure directly via az aks list
mitchdenny Apr 13, 2026
cc16e0c
Fix az aks get-credentials arguments: quote values and clean resource…
mitchdenny Apr 13, 2026
60e8e0f
Fix resource group query: use az resource list instead of az aks list
mitchdenny Apr 13, 2026
191b126
Fix resource group from deployment state + attach ACR to AKS
mitchdenny Apr 13, 2026
dccb490
Add AcrPull role assignment in Bicep instead of CLI
mitchdenny Apr 13, 2026
18cf2fb
Add AKS cluster info and get-credentials command to deploy summary
mitchdenny Apr 13, 2026
6fb34a3
Fix Bicep BCP120: use compile-time values for role assignment name
mitchdenny Apr 13, 2026
ad4639a
Fix first deploy: fall back to az CLI when deployment state not loaded
mitchdenny Apr 13, 2026
54deeb1
Support multi-environment AKS with shared ACR and WithComputeEnvironment
mitchdenny Apr 13, 2026
0b9c931
Add multi-environment targeting test
mitchdenny Apr 13, 2026
2f42741
Fix publish to include compute resources in Helm chart templates
mitchdenny Apr 13, 2026
4750b54
Fix Helm template parse error for Azure Bicep output references
mitchdenny Apr 13, 2026
14a687b
Add VNet subnet integration for AKS via WithDelegatedSubnet
mitchdenny Apr 14, 2026
fa24e53
Fix: AKS doesn't support subnet delegation — add WithSubnet extension
mitchdenny Apr 14, 2026
94bb45f
Resolve IValueProvider expressions in Helm values at deploy time
mitchdenny Apr 14, 2026
8b822af
Fix composite expressions with deferred values + scope Helm chart names
mitchdenny Apr 14, 2026
5e392f8
Fix deferred value detection: recurse into connection strings and exp…
mitchdenny Apr 14, 2026
97aaf29
Fix Helm key: use env var name instead of value expression for deferr…
mitchdenny Apr 14, 2026
7e87ab1
Move node pool to base K8s package with WithNodePool API
mitchdenny Apr 14, 2026
4e058b0
Add AzureVmSizes constants class and generator tool
mitchdenny Apr 14, 2026
3767fcf
Support per-node-pool subnet via WithSubnet on AksNodePoolResource
mitchdenny Apr 14, 2026
cddbb6c
Implement workload identity via AppIdentityAnnotation
mitchdenny Apr 14, 2026
a3f1c16
Fix empty workload identity clientId in ServiceAccount annotation
mitchdenny Apr 14, 2026
1790d41
Fix missing workload identity pod label
mitchdenny Apr 14, 2026
459bed9
Rename AzureVmSizes to AksNodeVmSizes
mitchdenny Apr 14, 2026
ec07536
Update AKS spec to reflect current implementation
mitchdenny Apr 14, 2026
b746172
Query all US regions for VM sizes in GenVmSizes tool
mitchdenny Apr 15, 2026
115bbe5
Address PR review: pragmas and DelegatedSubnetAnnotation
mitchdenny Apr 15, 2026
6e3edbb
Enable ATS exports for all AKS public APIs
mitchdenny Apr 15, 2026
e9052ba
Refactor az CLI usage to shared ProcessSpec/ProcessUtil infrastructure
mitchdenny Apr 15, 2026
dea304c
Use IFileSystemService for kubeconfig temp directory
mitchdenny Apr 15, 2026
f72e08e
Capture kubeconfig via stdout to control file permissions
mitchdenny Apr 15, 2026
579dfab
Remove redundant HelmValue allocation in ResolveUnknownValue
mitchdenny Apr 15, 2026
af759f9
Fix node pool model bugs and update AKS API version
mitchdenny Apr 15, 2026
38cce70
Migrate to Azure.Provisioning.ContainerService SDK
mitchdenny Apr 15, 2026
8ac1609
Fix cluster name resolution after Azure.Provisioning migration
mitchdenny Apr 15, 2026
f4b5bf7
Fix code review findings
mitchdenny Apr 15, 2026
6f60409
Fix markdownlint errors in AKS spec
mitchdenny Apr 15, 2026
c271436
Address James's PR feedback
mitchdenny Apr 15, 2026
c518b9e
Remove AsPrivateCluster and WithSkuTier public APIs
mitchdenny Apr 15, 2026
7562fab
Add T1.1 AKS E2E deployment test with Azure Provisioning
mitchdenny Apr 15, 2026
f5fa7a1
Add Tier 1 AKS E2E deployment tests (T1.2-T1.7)
mitchdenny Apr 15, 2026
d21c501
Add TypeScript AppHost AKS E2E deployment tests
mitchdenny Apr 15, 2026
d7e6034
Remove WithVersion public API — use ConfigureInfrastructure instead
mitchdenny Apr 15, 2026
68622be
Remove non-functional WithContainerInsights and WithAzureLogAnalytics…
mitchdenny Apr 15, 2026
66bef99
Fix AppHost.cs modification in all AKS E2E tests
mitchdenny Apr 15, 2026
555018c
Use smaller VM sizes to avoid quota exhaustion in CI
mitchdenny Apr 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions .github/workflows/update-azure-vm-sizes.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Update Azure VM Sizes

on:
workflow_dispatch:
schedule:
- cron: '0 6 1 * *' # Monthly on the 1st at 06:00 UTC

permissions:
contents: write
pull-requests: write

jobs:
generate-and-pr:
runs-on: ubuntu-latest
if: ${{ github.repository_owner == 'microsoft' }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Azure Login
uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}

- name: Generate updated Azure VM size descriptors
working-directory: src/Aspire.Hosting.Azure.Kubernetes/tools
run: |
set -e
"$GITHUB_WORKSPACE/dotnet.sh" run GenVmSizes.cs

- name: Generate GitHub App Token
id: app-token
uses: actions/create-github-app-token@df432ceedc7162793a195dd1713ff69aefc7379e # v2.0.6
with:
app-id: ${{ secrets.ASPIRE_BOT_APP_ID }}
private-key: ${{ secrets.ASPIRE_BOT_PRIVATE_KEY }}

- name: Create or update pull request
uses: ./.github/actions/create-pull-request
with:
token: ${{ steps.app-token.outputs.token }}
branch: update-azure-vm-sizes
base: main
commit-message: "[Automated] Update Azure VM Sizes"
labels: |
area-integrations
area-engineering-systems
title: "[Automated] Update Azure VM Sizes"
body: "Auto-generated update of Azure VM size descriptors (AksNodeVmSizes.Generated.cs)."
2 changes: 2 additions & 0 deletions Aspire.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@
<Project Path="src/Aspire.Hosting.Azure.EventHubs/Aspire.Hosting.Azure.EventHubs.csproj" />
<Project Path="src/Aspire.Hosting.Azure.Functions/Aspire.Hosting.Azure.Functions.csproj" />
<Project Path="src/Aspire.Hosting.Azure.KeyVault/Aspire.Hosting.Azure.KeyVault.csproj" />
<Project Path="src/Aspire.Hosting.Azure.Kubernetes/Aspire.Hosting.Azure.Kubernetes.csproj" />
<Project Path="src/Aspire.Hosting.Azure.Kusto/Aspire.Hosting.Azure.Kusto.csproj" />
<Project Path="src/Aspire.Hosting.Azure.Network/Aspire.Hosting.Azure.Network.csproj" />
<Project Path="src/Aspire.Hosting.Azure.OperationalInsights/Aspire.Hosting.Azure.OperationalInsights.csproj" />
Expand Down Expand Up @@ -467,6 +468,7 @@
<Project Path="tests/Aspire.Hosting.Analyzers.Tests/Aspire.Hosting.Analyzers.Tests.csproj" />
<Project Path="tests/Aspire.Hosting.Foundry.Tests/Aspire.Hosting.Foundry.Tests.csproj" />
<Project Path="tests/Aspire.Hosting.Azure.Kusto.Tests/Aspire.Hosting.Azure.Kusto.Tests.csproj" />
<Project Path="tests/Aspire.Hosting.Azure.Kubernetes.Tests/Aspire.Hosting.Azure.Kubernetes.Tests.csproj" />
<Project Path="tests/Aspire.Hosting.Azure.Tests/Aspire.Hosting.Azure.Tests.csproj" />
<Project Path="tests/Aspire.Hosting.Containers.Tests/Aspire.Hosting.Containers.Tests.csproj" />
<Project Path="tests/Aspire.Hosting.DevTunnels.Tests/Aspire.Hosting.DevTunnels.Tests.csproj" />
Expand Down
1 change: 1 addition & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
<PackageVersion Include="Azure.Provisioning.AppService" Version="1.3.1" />
<PackageVersion Include="Azure.Provisioning.ApplicationInsights" Version="1.1.0" />
<PackageVersion Include="Azure.Provisioning.ContainerRegistry" Version="1.1.0" />
<PackageVersion Include="Azure.Provisioning.ContainerService" Version="1.0.0-beta.3" />
<PackageVersion Include="Azure.Provisioning.CognitiveServices" Version="1.2.0" />
<PackageVersion Include="Azure.Provisioning.CosmosDB" Version="1.0.0" />
<PackageVersion Include="Azure.Provisioning.EventHubs" Version="1.1.0" />
Expand Down
620 changes: 620 additions & 0 deletions docs/specs/aks-support.md

Large diffs are not rendered by default.

30 changes: 30 additions & 0 deletions src/Aspire.Hosting.Azure.Kubernetes/AksNetworkProfile.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

namespace Aspire.Hosting.Azure.Kubernetes;

/// <summary>
/// Network profile configuration for an AKS cluster.
/// </summary>
internal sealed class AksNetworkProfile
{
/// <summary>
/// Gets or sets the network plugin. Defaults to "azure" for Azure CNI.
/// </summary>
public string NetworkPlugin { get; set; } = "azure";

/// <summary>
/// Gets or sets the network policy. Defaults to "calico".
/// </summary>
public string? NetworkPolicy { get; set; } = "calico";

/// <summary>
/// Gets or sets the service CIDR.
/// </summary>
public string ServiceCidr { get; set; } = "10.0.4.0/22";

/// <summary>
/// Gets or sets the DNS service IP address.
/// </summary>
public string DnsServiceIP { get; set; } = "10.0.4.10";
}
35 changes: 35 additions & 0 deletions src/Aspire.Hosting.Azure.Kubernetes/AksNodePoolConfig.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

namespace Aspire.Hosting.Azure.Kubernetes;

/// <summary>
/// Configuration for an AKS node pool.
/// </summary>
/// <param name="Name">The name of the node pool.</param>
/// <param name="VmSize">The VM size for nodes in the pool.</param>
/// <param name="MinCount">The minimum number of nodes.</param>
/// <param name="MaxCount">The maximum number of nodes.</param>
/// <param name="Mode">The mode of the node pool.</param>
public sealed record AksNodePoolConfig(
string Name,
string VmSize,
int MinCount,
int MaxCount,
AksNodePoolMode Mode);

/// <summary>
/// Specifies the mode of an AKS node pool.
/// </summary>
public enum AksNodePoolMode
{
/// <summary>
/// System node pool for hosting system pods.
/// </summary>
System,

/// <summary>
/// User node pool for hosting application workloads.
/// </summary>
User
}
30 changes: 30 additions & 0 deletions src/Aspire.Hosting.Azure.Kubernetes/AksNodePoolResource.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using Aspire.Hosting.Kubernetes;

namespace Aspire.Hosting.Azure.Kubernetes;

/// <summary>
/// Represents an AKS node pool with Azure-specific configuration such as VM size and autoscaling.
/// Extends the base <see cref="KubernetesNodePoolResource"/> with provisioning configuration
/// that is used to generate Azure Bicep for the AKS agent pool profile.
/// </summary>
/// <param name="name">The name of the node pool resource.</param>
/// <param name="config">The Azure-specific node pool configuration.</param>
/// <param name="parent">The parent AKS environment resource.</param>
public class AksNodePoolResource(
string name,
AksNodePoolConfig config,
AzureKubernetesEnvironmentResource parent) : KubernetesNodePoolResource(name, parent.KubernetesEnvironment)
{
/// <summary>
/// Gets the parent AKS environment resource.
/// </summary>
public AzureKubernetesEnvironmentResource AksParent { get; } = parent ?? throw new ArgumentNullException(nameof(parent));

/// <summary>
/// Gets the Azure-specific node pool configuration.
/// </summary>
public AksNodePoolConfig Config { get; } = config ?? throw new ArgumentNullException(nameof(config));
}
Loading
Loading