Conversation
Adding Harshit from the Azure Linux engineering team as an author, as much of the KubeVirt doc is based off a doc he wrote.
Updated authors list to include 'harshit-gupta'.
Added an introduction to KubeVirt and its benefits for VM management in Kubernetes.
Updated tags to include 'kubevirt' for better categorization.
There was a problem hiding this comment.
Pull request overview
This PR adds a new blog post about deploying KubeVirt on AKS, scheduled for publication on January 26, 2026. The post provides a step-by-step guide for users to set up KubeVirt, an open-source CNCF project that enables running virtual machines within Kubernetes clusters.
Changes:
- Added a new blog post explaining KubeVirt benefits and providing deployment instructions for AKS
- Added new author "harshit-gupta" to authors.yml
- Added new "kubevirt" tag to tags.yml
- Fixed incomplete description for the "kueue" tag
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 8 comments.
| File | Description |
|---|---|
| website/blog/2026-01-26-kubevirt-on-aks/index.md | New blog post with KubeVirt deployment guide including cluster creation, installation steps, and VMI creation examples |
| website/blog/authors.yml | Added new author entry for Harshit Gupta |
| website/blog/tags.yml | Added kubevirt tag and fixed truncated kueue tag description |
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
| virtctl console vmi-fedora | ||
| ``` | ||
|
|
||
| When prompted with credentials, the default username/password should be `fedora`/`fedora`. |
There was a problem hiding this comment.
Can we change instructions so that we don't have default username/password? Seems like anyone who copy/pastes this will end up with a potentially risky endpoint?
There was a problem hiding this comment.
Users can change the username/password through the vmi-fedora.yaml file above. I had just given the defaulted user/pass so it'd be easier for folks to get setup/remember in this tutorial, but I can rework it to have folks provide their own credentials.
| | kubectl apply -f - | ||
| ``` | ||
|
|
||
| Notice the empty `nodePlacement: {}` and the update for the node selector. By default, KubeVirt sets the node-affinity of operator/custom resource components to control-plane nodes. Because AKS control-plane nodes are fully managed by Azure and inaccessible to KubeVirt, this update to utilize worker nodes avoids potential failures. |
There was a problem hiding this comment.
According to the Microsoft Style Guide, "Notice" should not be used to start sentences as it's a directive verb. Instead, use "Note:" for informational callouts.
Change "Notice the empty nodePlacement: {}" to "Note that the empty nodePlacement: {}" or use a blockquote format:
> **Note**: The empty `nodePlacement: {}` and the update for the node selector...| password: fedora | ||
| chpasswd: { expire: False } |
There was a problem hiding this comment.
The password is hardcoded in the cloud-init configuration as plaintext. While this is a tutorial/demo example, it's a security best practice to call out that this is for demonstration purposes only and should not be used in production.
Consider adding a comment or note after this YAML section:
> **Warning**: This example uses a hardcoded password for demonstration purposes only. In production, use SSH keys or integrate with a secrets management solution.|
|
||
| ## Running in prod | ||
|
|
||
| When running large scale, production grade workloads, stability of both the KubeVirt components and the individual VMs can also be a point of consideration. As we hinted at earlier, KubeVirt typically sets the node-affinity of operator/custom resource components to control-plane nodes. In our deployment, we have the KubeVirt components running on worker nodes. |
There was a problem hiding this comment.
The phrase "When running large scale, production grade workloads" should use hyphens for compound modifiers. According to the Microsoft Style Guide, hyphenate compound adjectives when they appear before a noun.
Change to: "When running large-scale, production-grade workloads"
|
|
||
| Management of these otherwise disparate deployments can be simplified and unified. This unified management can help teams avoid the sprawl that would otherwise come with managing multiple platforms. | ||
|
|
||
| The capability to mix and match your workloads in a "hybrid" setting can also allow organizations that might have more complex, legacy VM-based applications to incrementally transition to containers while ensuring their applications remain operational throughout the trainsition. |
There was a problem hiding this comment.
The word "trainsition" is misspelled. It should be "transition".
| The capability to mix and match your workloads in a "hybrid" setting can also allow organizations that might have more complex, legacy VM-based applications to incrementally transition to containers while ensuring their applications remain operational throughout the trainsition. | |
| The capability to mix and match your workloads in a "hybrid" setting can also allow organizations that might have more complex, legacy VM-based applications to incrementally transition to containers while ensuring their applications remain operational throughout the transition. |
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
| Using the [Standard_D4s_v5](https://learn.microsoft.com/azure/virtual-machines/sizes/general-purpose/dv5-series?tabs=sizebasic#feature-support) SKU as an example, on the SKU page, you can see whether or not nested virtualization is supported in the "Feature support" section. | ||
| - Install the `virtctl` binary utility to better access and control your VirtualMachineInstances. You can follow instructions [on the KubeVirt page](https://kubevirt.io/user-guide/user_workloads/virtctl_client_tool/) to install `virtctl`. | ||
|
|
||
|  |
There was a problem hiding this comment.
The alt text could be more descriptive. Consider changing it to something like "Azure VM SKU documentation page showing nested virtualization feature marked as supported in the feature support table" to better describe what readers will see in the image.
|  | |
|  |
| tags: ["kubevirt", "general", "operations"] | ||
| --- | ||
|
|
||
| Many organizations still depend on virtual machines (VMs) to run applications to meet technical, regulatory, or operational requirements. While Kubernetes adoption continues to grow, not every workload can or should be redesigned for containers. |
There was a problem hiding this comment.
According to the Microsoft Style Guide, "VMs" should use "a" not "an" as the article since it's pronounced "vee emms" (starts with consonant sound). Change "an" to "a".
| harshit-gupta: | ||
| name: Harshit Gupta | ||
| title: Senior Software Engineer at Microsoft | ||
| url: https://www.linkedin.com/in/hagupta/ | ||
| socials: | ||
| linkedin: hagupta | ||
| github: harshitgupta1337 |
There was a problem hiding this comment.
The author entry is missing an image_url field. Most other author entries include an image URL (typically from GitHub). Consider adding image_url: https://github.com/harshitgupta1337.png for consistency with other entries.
|
|
||
| In order to maintain a control-plane/worker node split, it can be advisable to aim to deploy KubeVirt components in an agentpool that can be designated as the "control-plane" node, while VMs spun up can be ran in designated "worker node" agentpools. | ||
|
|
||
| KubeVirt is currently not an officially supported AKS addon/extension, so there is no Microsoft backed SLA/SLO in place for KubeVirt deployments in AKS. If customers need an officially supported offering, [Azure Redhat Openshift](https://learn.microsoft.com/en-us/azure/openshift/howto-create-openshift-virtualization) is a generally available platform to manage virtualized and containerized applications together. |
There was a problem hiding this comment.
The URL contains /en-us/ which is a locale-based path. According to the blog post guidelines, you should use generic links without locale prefixes. Change the URL to https://learn.microsoft.com/azure/openshift/howto-create-openshift-virtualization (removing the /en-us/ part).
| <!-- truncate --> | ||
|
|
||
| :::note | ||
| If you're using KubeVirt on AKS or are interested in trying it, [we'd love to hear from you]((https://github.com/Azure/AKS/issues/5445))! Your feedback will help the AKS team plan how to best support this feature on our platform. |
There was a problem hiding this comment.
There's a double opening parenthesis in the URL. The link should be https://github.com/Azure/AKS/issues/5445 not https://github.com/Azure/AKS/issues/5445)).
| If you're using KubeVirt on AKS or are interested in trying it, [we'd love to hear from you]((https://github.com/Azure/AKS/issues/5445))! Your feedback will help the AKS team plan how to best support this feature on our platform. | |
| If you're using KubeVirt on AKS or are interested in trying it, [we'd love to hear from you](https://github.com/Azure/AKS/issues/5445)! Your feedback will help the AKS team plan how to best support this feature on our platform. |
|
|
||
| ## Converting your VMs | ||
|
|
||
| At this point, you should have KubeVirt up and running in your AKS cluster and a VMI deployed. KubeVirt can help with a [plethora of scenarios](https://kubevirt.io/) that operational teams may run into. Migrating legacy VMs to KubeVirt can be an involved process, however. [Doing it manually](https://www.spectrocloud.com/blog/how-to-migrate-your-vms-to-kubevirt-with-forklift) involves steps like converting VM's disk and persisting a VM disk to creating a VM template. |
There was a problem hiding this comment.
According to the Microsoft Style Guide, possessives should use "VM's" (with apostrophe) when referring to ownership. However, the phrase "VM's disk" should be "VM disk" (no apostrophe, using VM as an adjective) to match Microsoft conventions for acronyms used as modifiers.
| At this point, you should have KubeVirt up and running in your AKS cluster and a VMI deployed. KubeVirt can help with a [plethora of scenarios](https://kubevirt.io/) that operational teams may run into. Migrating legacy VMs to KubeVirt can be an involved process, however. [Doing it manually](https://www.spectrocloud.com/blog/how-to-migrate-your-vms-to-kubevirt-with-forklift) involves steps like converting VM's disk and persisting a VM disk to creating a VM template. | |
| At this point, you should have KubeVirt up and running in your AKS cluster and a VMI deployed. KubeVirt can help with a [plethora of scenarios](https://kubevirt.io/) that operational teams may run into. Migrating legacy VMs to KubeVirt can be an involved process, however. [Doing it manually](https://www.spectrocloud.com/blog/how-to-migrate-your-vms-to-kubevirt-with-forklift) involves steps like converting the VM disk and persisting a VM disk to creating a VM template. |
|
|
||
| In order to maintain a control-plane/worker node split, it can be advisable to aim to deploy KubeVirt components in an agentpool that can be designated as the "control-plane" node, while VMs spun up can be ran in designated "worker node" agentpools. | ||
|
|
||
| KubeVirt is currently not an officially supported AKS addon/extension, so there is no Microsoft backed SLA/SLO in place for KubeVirt deployments in AKS. If customers need an officially supported offering, [Azure Redhat Openshift](https://learn.microsoft.com/en-us/azure/openshift/howto-create-openshift-virtualization) is a generally available platform to manage virtualized and containerized applications together. |
There was a problem hiding this comment.
The product name should be "Azure Red Hat OpenShift" (with proper capitalization and spacing). The current text has "Azure Redhat Openshift" which doesn't match the official product name.
| KubeVirt is currently not an officially supported AKS addon/extension, so there is no Microsoft backed SLA/SLO in place for KubeVirt deployments in AKS. If customers need an officially supported offering, [Azure Redhat Openshift](https://learn.microsoft.com/en-us/azure/openshift/howto-create-openshift-virtualization) is a generally available platform to manage virtualized and containerized applications together. | |
| KubeVirt is currently not an officially supported AKS addon/extension, so there is no Microsoft backed SLA/SLO in place for KubeVirt deployments in AKS. If customers need an officially supported offering, [Azure Red Hat OpenShift](https://learn.microsoft.com/en-us/azure/openshift/howto-create-openshift-virtualization) is a generally available platform to manage virtualized and containerized applications together. |
Linter fixes.
| harshit-gupta: | ||
| name: Harshit Gupta | ||
| title: Senior Software Engineer at Microsoft | ||
| url: https://www.linkedin.com/in/hagupta/ |
There was a problem hiding this comment.
The new author entry is missing the image_url field. Most other authors in the file include this field for their profile picture. Consider adding image_url: https://github.com/harshitgupta1337.png or another appropriate profile image URL to be consistent with other author entries.
| url: https://www.linkedin.com/in/hagupta/ | |
| url: https://www.linkedin.com/in/hagupta/ | |
| image_url: https://github.com/harshitgupta1337.png |
| - KubeVirt on AKS requires a chosen VM SKU to support nested virtualization. You can confirm support on the VM size's Microsoft Learn page, such as [Standard_D4s_v5](https://learn.microsoft.com/azure/virtual-machines/sizes/general-purpose/dv5-series?tabs=sizebasic#feature-support). | ||
| Using the [Standard_D4s_v5](https://learn.microsoft.com/azure/virtual-machines/sizes/general-purpose/dv5-series?tabs=sizebasic#feature-support) SKU as an example, on the SKU page, you can see whether or not nested virtualization is supported in the "Feature support" section. |
There was a problem hiding this comment.
The period is incorrectly placed inside the link. The sentence should end with a period outside the link. Change on the VM size's Microsoft Learn page, such as [Standard_D4s_v5](https://learn.microsoft.com/azure/virtual-machines/sizes/general-purpose/dv5-series?tabs=sizebasic#feature-support). to have the period after the closing parenthesis. However, this line appears to be part of a run-on sentence. Consider revising for clarity.
| | yq '.spec.infra.nodePlacement={}' \ | ||
| | kubectl apply -f - |
There was a problem hiding this comment.
The command uses yq (a YAML processing tool) without mentioning it in the prerequisites section. Readers may not have yq installed. Consider either adding yq to the prerequisites section with installation instructions, or providing an alternative command that doesn't require additional tools.
Adding a blog about deploying KubeVirt on AKS, to be published on 2-06-2026.