Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This article explains how to discover the Nexus Kubernetes version bundles that an Operator Nexus cluster can deploy or upgrade Nexus Kubernetes clusters to. The kubernetesVersions catalog is published per Operator Nexus cluster as a Microsoft.NetworkCloud/kubernetesVersions resource named default. It's anchored to the Operator Nexus cluster's custom location (extended location).
Use this API when you want to:
- Plan Nexus Kubernetes cluster creations or upgrades against a known list of available bundles before targeting a specific Nexus Kubernetes cluster.
- Verify the general availability (GA), end-of-support (EOS), and end-of-extended-availability (EOEA) dates for a bundle.
- Inspect the Features and component versions packaged inside a version bundle.
For upgrade options for an existing Nexus Kubernetes cluster, see Check for available upgrades.
What the kubernetesVersions catalog contains
Each Microsoft.NetworkCloud/kubernetesVersions resource is the catalog of every Nexus Kubernetes version bundle that the owning Operator Nexus cluster can deploy or upgrade Nexus Kubernetes clusters to. The catalog is structured as follows:
- Supported Kubernetes minor versions. The catalog's
properties.values[]array lists every Kubernetes minor version (for example,1.30,1.31,1.32,1.33) for which Operator Nexus currently ships at least one bundle on this Operator Nexus cluster. - Version bundles per minor version. Each minor version entry contains one or more patch-level version bundles. A bundle is the unit Operator Nexus deploys: it pins a specific Kubernetes patch release together with the Features (Calico, MetalLB, Azure Arc agents, CSI drivers, and so on) and the OS image that ship with that release.
- Lifecycle dates per bundle. Each bundle carries a general-availability date, an end-of-support date, and an end-of-extended-availability date. Operator Nexus uses these dates to govern which bundles are valid creation or upgrade targets at any given time. See Lifecycle visibility rules.
- Component manifest per bundle. Each bundle records the exact Feature and OS image versions it packages, so you can correlate a Kubernetes patch release with the supporting components that ship alongside it.
In the current preview API version (2026-01-01-preview), the patch-level bundle data for a minor version is returned as a single text field named description. The remainder of this article shows how to retrieve that field, how to read it, and how to filter it.
Prerequisites
- An Azure subscription with access to an Azure Operator Nexus instance whose Operator Nexus cluster is running a build that supports the
2026-01-01-previewMicrosoft.NetworkCloud API version or newer. If the resource doesn't appear for an Operator Nexus cluster, the build on that instance doesn't yet exposeMicrosoft.NetworkCloud/kubernetesVersions. - The Azure CLI installed and signed in. If you need to install or upgrade it, see Install Azure CLI.
- Reader access on the subscription (or on the Operator Nexus cluster's managed HostedResources resource group).
Microsoft.NetworkCloud/kubernetesVersionsis projected into the HostedResources group. - To use the
az networkcloud kubernetesversioncommands, install the previewnetworkcloudCLI extension (5.0.0b1or later):az extension add --name networkcloud --version 5.0.0b1 --allow-preview true. Theaz restexamples in this article work with any Azure CLI install and don't require the preview extension.
Locate the kubernetesVersions resource
Microsoft.NetworkCloud/kubernetesVersions is a singleton named default per Operator Nexus cluster. List the resources visible to your subscription:
az resource list \
--resource-type Microsoft.NetworkCloud/kubernetesVersions \
--query "[].{name:name, location:location, id:id}" \
--output table
Or, with the preview networkcloud extension, list every Operator Nexus cluster's kubernetesVersions catalog in a single call:
az networkcloud kubernetesversion list --output table
Each row corresponds to one Operator Nexus cluster. The table view projects Location, Name (always default), ProvisioningState, and ResourceGroup. To see the full ARM id and extendedLocation, rerun the command with --output json or project them with --query:
az networkcloud kubernetesversion list \
--query "[].{id:id, resourceGroup:resourceGroup, extendedLocation:extendedLocation.name}" \
--output table
Each id has the form:
/subscriptions/<sub>/resourceGroups/<cluster>-<hash>-HostedResources-<hash>/providers/Microsoft.NetworkCloud/kubernetesVersions/default
The kubernetesVersions resource's extendedLocation matches the Operator Nexus cluster's custom location. Use the id value as <KubernetesVersionsResourceId> in the next step.
Find the HostedResources resource group for your Operator Nexus cluster
Microsoft.NetworkCloud/kubernetesVersions lives in the Operator Nexus cluster's managed HostedResources resource group, not in the resource group that holds the Operator Nexus cluster. The table output from the previous step already exposes the HostedResources group in the ResourceGroup column. To extract it programmatically for a specific Operator Nexus cluster, filter the list by the Operator Nexus cluster's custom location:
az networkcloud kubernetesversion list \
--query "[?contains(extendedLocation.name, '<cluster-name>')].resourceGroup" \
--output tsv
Pass the output as --resource-group to every az networkcloud kubernetesversion command in this article.
Get the kubernetesVersions catalog
Fetch the kubernetesVersions catalog through ARM with az rest:
az rest --method get \
--url "https://management.azure.com<KubernetesVersionsResourceId>?api-version=2026-01-01-preview"
Or, with the preview networkcloud extension:
az networkcloud kubernetesversion show \
--resource-group <cluster>-<hash>-HostedResources-<hash> \
--name default
You can also list every kubernetesVersions catalog visible to a subscription in a single call (one entry per Operator Nexus cluster):
az rest --method get \
--url "https://management.azure.com/subscriptions/<SubscriptionId>/providers/Microsoft.NetworkCloud/kubernetesVersions?api-version=2026-01-01-preview"
Or:
az networkcloud kubernetesversion list
Sample output
The current preview Microsoft.NetworkCloud/kubernetesVersions API returns a list of supported minor versions. For each minor version, the description field is a single text string that embeds every patch-level entry's component manifest and lifecycle dates. The following example is trimmed for readability:
{
"id": "/subscriptions/<sub>/resourceGroups/<cluster>-<hash>-HostedResources-<hash>/providers/Microsoft.NetworkCloud/kubernetesVersions/default",
"name": "default",
"type": "microsoft.networkcloud/kubernetesversions",
"location": "uksouth",
"extendedLocation": {
"name": "/subscriptions/<sub>/resourceGroups/<cluster>-hostedresources-<hash>/providers/microsoft.extendedlocation/customlocations/<cluster>-cstm-loc",
"type": "CustomLocation"
},
"properties": {
"provisioningState": "Succeeded",
"values": [
{
"version": "1.33",
"description": "[{ components: {Name: azure-arc-k8sagents, Type: Feature, Version: 1.31.7},{Name: azure-arc-servers, Type: Feature, Version: v1.2.6},{Name: calico, Type: Feature, Version: v1.9.1},{Name: cloud-provider-kubevirt, Type: Feature, Version: v1.0.8},{Name: csi-nfs, Type: Feature, Version: 10.2.0-41},{Name: csi-volume, Type: Feature, Version: 10.2.0-41},{Name: ipam-cni-plugin, Type: Feature, Version: v1.0.13},{Name: metallb, Type: Feature, Version: v1.3.5},{Name: metrics-server, Type: Feature, Version: v1.0.7},{Name: multus, Type: Feature, Version: v1.4.4},{Name: node-local-dns, Type: Feature, Version: v1.2.3},{Name: sriov-dp, Type: Feature, Version: v1.1.7},{Name: AzureLinux3, Type: OSImage, Version: 1.33.x-y.z}, endOfExtendedAvailabilityDate: 2027-MM-DD 00:00:00 +0000 UTC, generalAvailabilityDate: 2026-MM-DD 00:00:00 +0000 UTC, patchVersion: v1.33.x-y.z, supportExpiryDate: 2027-MM-DD 00:00:00 +0000 UTC }, ... ]"
},
{
"version": "1.32",
"description": "[{ components: {...}, endOfExtendedAvailabilityDate: ..., generalAvailabilityDate: ..., patchVersion: v1.32.x-y.z, supportExpiryDate: ... }, ... ]"
},
{
"version": "1.31",
"description": "[{ components: {...}, ... patchVersion: v1.31.x-y.z, ... }, ... ]"
},
{
"version": "1.30",
"description": "[{ components: {...}, ... patchVersion: v1.30.x-y.z, ... }, ... ]"
}
]
}
}
kubernetesVersions resource and field reference (preview API)
Top-level kubernetesVersions resource:
| Field | Description |
|---|---|
id |
The ARM ID of the kubernetesVersions catalog. The kubernetesVersions catalog is always named default, scoped to the Operator Nexus cluster's managed HostedResources resource group. |
location |
Azure region of the Operator Nexus cluster. |
extendedLocation |
The custom location (extended location) reference of the Operator Nexus cluster that owns this kubernetesVersions catalog. |
properties.provisioningState |
Succeeded once the kubernetesVersions catalog has been seeded. |
properties.values |
One entry per supported Kubernetes minor version (for example, 1.30, 1.31, 1.32, 1.33). |
Per-entry fields in properties.values[]:
| Field | Description |
|---|---|
version |
The Kubernetes minor version (<major>.<minor>) the entry describes. |
description |
A text string that lists every patch-level version bundle Operator Nexus publishes for this minor version. Each entry includes the bundle's component versions, Feature versions, and the lifecycle dates listed in the next table. |
The keys embedded in each patch entry inside description are:
| Embedded key | Maps to |
|---|---|
patchVersion |
The full version bundle identifier in the form v<major>.<minor>.<patch>-<bundle>. See Nexus Kubernetes service version components. |
components |
The Features and OS image packaged in the bundle (Calico, MetalLB, container runtime, AzureLinux, and so on). For the public component matrix, see Components version and breaking changes. |
generalAvailabilityDate |
UTC date when the bundle entered general availability. A zero value (0001-01-01 00:00:00 +0000 UTC) means the bundle predates GA tracking on this Operator Nexus cluster. |
supportExpiryDate |
UTC date when the bundle reaches end of support. After this date, Operator Nexus surfaces the bundle with an unsupported warning and stops shipping further patches against it. |
endOfExtendedAvailabilityDate |
UTC date when the bundle is removed from Microsoft.NetworkCloud/kubernetesVersions and can no longer be selected for Nexus Kubernetes cluster creation or upgrade. See Extended availability policy. |
Lifecycle visibility rules
Regardless of how the data is rendered, the lifecycle rules Operator Nexus applies to entries in the kubernetesVersions catalog are:
- Generally available bundles are returned with
supportExpiryDateandendOfExtendedAvailabilityDatein the future. - Bundles past end of support but before end of extended availability are still returned, but Operator Nexus surfaces them with an unsupported warning. New Nexus Kubernetes cluster creation on these bundles isn't recommended; existing Nexus Kubernetes clusters can still be upgraded out of them. Refer to the Extended availability policy for what's supported during this period.
- Bundles past end of extended availability aren't returned. Nexus Kubernetes clusters that remain on a removed bundle become abandoned clusters and the only supported operation is deletion.
For the full set of policy questions, including upgrade behavior outside the support window, see the FAQ in the supported versions reference.
Filter the kubernetesVersions catalog with JMESPath
The standard Azure CLI --query option works on the structured top-level fields. The following examples refine the response.
List only the supported minor versions:
az rest --method get \
--url "https://management.azure.com<KubernetesVersionsResourceId>?api-version=2026-01-01-preview" \
--query "properties.values[].version" \
--output tsv
Get every patch entry text blob for a specific minor version:
az rest --method get \
--url "https://management.azure.com<KubernetesVersionsResourceId>?api-version=2026-01-01-preview" \
--query "properties.values[?version=='1.33'].description | [0]" \
--output tsv
Find every Operator Nexus cluster kubernetesVersions catalog visible to the subscription:
az rest --method get \
--url "https://management.azure.com/subscriptions/<SubscriptionId>/providers/Microsoft.NetworkCloud/kubernetesVersions?api-version=2026-01-01-preview" \
--query "value[].{customLocation:extendedLocation.name, location:location, minorVersions:properties.values[].version}" \
--output json
Render the description in human-readable form
Because each minor version's description is returned as a single text string, the raw response is difficult to read for catalogs with more than a handful of patches. The following convenience script pulls the value with az networkcloud kubernetesversion show and uses two awk passes to:
- Split each patch entry, component row, and lifecycle date onto its own line and strip the surrounding
{,}, and[]punctuation. - Reorder each patch block so that
patchVersionappears first, the lifecycle dates appear next, and thecomponentslist appears last, to match the typical reading order for a version bundle.
The script uses only az, bash, and awk (POSIX), so it can be ran unmodified on Linux operating systems.
#!/usr/bin/env bash
# Pretty-print the Microsoft.NetworkCloud/kubernetesVersions description blob
# for a single minor version. Replace RESOURCE_GROUP and MINOR as needed.
RESOURCE_GROUP="<cluster>-<hash>-HostedResources-<hash>"
MINOR="1.33"
az networkcloud kubernetesversion show \
--resource-group "$RESOURCE_GROUP" \
--name default \
--query "values[?version=='$MINOR'].description | [0]" \
--output tsv \
| awk '{
gsub(/\},\{ components:/, "}\n\n{ components:")
gsub(/, patchVersion:/, "\n patchVersion:")
gsub(/, generalAvailabilityDate:/, "\n generalAvailabilityDate:")
gsub(/, supportExpiryDate:/, "\n supportExpiryDate:")
gsub(/, endOfExtendedAvailabilityDate:/, "\n endOfExtendedAvailabilityDate:")
gsub(/\{Name:/, "\n {Name:")
gsub(/[\{\}\[\]]/, "")
print
}' \
| awk 'BEGIN{RS=""} {
pv=""; ga=""; se=""; eea=""; nc=0
n=split($0, lines, "\n")
for (i=1; i<=n; i++) {
if (lines[i] ~ /^[ \t]*patchVersion:/) pv=lines[i]
else if (lines[i] ~ /^[ \t]*generalAvailabilityDate:/) ga=lines[i]
else if (lines[i] ~ /^[ \t]*supportExpiryDate:/) se=lines[i]
else if (lines[i] ~ /^[ \t]*endOfExtendedAvailabilityDate:/) eea=lines[i]
else if (lines[i] ~ /^[ \t]*(components:|.*Name:)/) comp[++nc]=lines[i]
}
if (pv == "") next
sub(/^[ \t]+/, "", pv); print pv
if (ga != "") { sub(/^[ \t]+/, "", ga); print ga }
if (se != "") { sub(/^[ \t]+/, "", se); print se }
if (eea != "") { sub(/^[ \t]+/, "", eea); print eea }
for (i=1; i<=nc; i++) print comp[i]
print ""
}'
Sample reformatted output (one patch entry shown; real responses contain several patches per minor version):
patchVersion: v1.33.x-y.z
generalAvailabilityDate: 2026-MM-DD 00:00:00 +0000 UTC
supportExpiryDate: 2027-MM-DD 00:00:00 +0000 UTC
endOfExtendedAvailabilityDate: 2027-MM-DD 00:00:00 +0000 UTC
components:
Name: azure-arc-k8sagents, Type: Feature, Version: 1.31.7,
Name: azure-arc-servers, Type: Feature, Version: v1.2.6,
Name: calico, Type: Feature, Version: v1.9.1,
Name: cloud-provider-kubevirt, Type: Feature, Version: v1.0.8,
Name: csi-nfs, Type: Feature, Version: 10.2.0-41,
Name: csi-volume, Type: Feature, Version: 10.2.0-41,
Name: ipam-cni-plugin, Type: Feature, Version: v1.0.13,
Name: metallb, Type: Feature, Version: v1.3.5,
Name: metrics-server, Type: Feature, Version: v1.0.8,
Name: multus, Type: Feature, Version: v1.4.6,
Name: node-local-dns, Type: Feature, Version: v1.2.4,
Name: sriov-dp, Type: Feature, Version: v1.1.10,
Name: AzureLinux3, Type: OSImage, Version: 1.33.x-y.z
To render every minor version in the kubernetesVersions catalog with a banner before each block, wrap the same awk pipeline in a small loop:
URL="https://management.azure.com<KubernetesVersionsResourceId>?api-version=2026-01-01-preview"
for v in $(az rest --method get --url "$URL" --query "properties.values[].version" -o tsv); do
echo "===== Kubernetes $v ====="
az rest --method get --url "$URL" \
--query "properties.values[?version=='$v'].description | [0]" -o tsv \
| awk '{
gsub(/\},\{ components:/, "}\n\n{ components:")
gsub(/, patchVersion:/, "\n patchVersion:")
gsub(/, generalAvailabilityDate:/, "\n generalAvailabilityDate:")
gsub(/, supportExpiryDate:/, "\n supportExpiryDate:")
gsub(/, endOfExtendedAvailabilityDate:/, "\n endOfExtendedAvailabilityDate:")
gsub(/\{Name:/, "\n {Name:")
gsub(/[\{\}\[\]]/, "")
print
}' \
| awk 'BEGIN{RS=""} {
pv=""; ga=""; se=""; eea=""; nc=0
n=split($0, lines, "\n")
for (i=1; i<=n; i++) {
if (lines[i] ~ /^[ \t]*patchVersion:/) pv=lines[i]
else if (lines[i] ~ /^[ \t]*generalAvailabilityDate:/) ga=lines[i]
else if (lines[i] ~ /^[ \t]*supportExpiryDate:/) se=lines[i]
else if (lines[i] ~ /^[ \t]*endOfExtendedAvailabilityDate:/) eea=lines[i]
else if (lines[i] ~ /^[ \t]*(components:|.*Name:)/) comp[++nc]=lines[i]
}
if (pv == "") next
sub(/^[ \t]+/, "", pv); print pv
if (ga != "") { sub(/^[ \t]+/, "", ga); print ga }
if (se != "") { sub(/^[ \t]+/, "", se); print se }
if (eea != "") { sub(/^[ \t]+/, "", eea); print eea }
for (i=1; i<=nc; i++) print comp[i]
print ""
}'
echo
done
Compare with available upgrades for a specific Nexus Kubernetes cluster
Microsoft.NetworkCloud/kubernetesVersions returns the kubernetesVersions catalog for an entire Operator Nexus cluster. To see only the upgrade targets that apply to a specific Nexus Kubernetes cluster, use the cluster-scoped query against that Nexus Kubernetes cluster. That query is already filtered by the Kubernetes version-skew policy and the Nexus Kubernetes cluster's current bundle, and it returns structured upgrade candidates today:
az networkcloud kubernetescluster show \
--name <NexusK8sClusterName> \
--resource-group <ResourceGroup> \
--query availableUpgrades \
--output json
For the full upgrade workflow, see Upgrade an Azure Operator Nexus Kubernetes cluster.