我们可以利用 Microsoft Azure 的 Azure 虚拟机服务在云端创建和运行虚拟机(VM),而无需亲自管理底层的基础设施。我们可以根据需要在虚拟机中配置所需的操作系统,例如 Linux、Windows 或 Mac。
目录
什么是 Microsoft Azure?
Azure 的定义是一个在线门户,它允许我们管理和访问云服务及各种资源。这里的服务就像存储我们的数据,并可以根据我们的需求进行调整。它由 Microsoft 提供。关于 Microsoft Azure,有很多事情我们需要了解:
- 有超过数千家公司正在使用 Azure 提供的服务来满足他们的 云计算 需求。
- Microsoft Azure 于 2010 年 2 月 1 日正式启动。
- 诸如 Java、Node.js 和 C# 等编程语言都在 Azure 中被使用。
什么是虚拟机?
虚拟机就像一台物理计算机,但实际上它是物理计算机的数字化版本。事实上,它与物理计算机并没有太大的不同,因为它们也有 内存、CPU,还有用于存储我们数据或各种文件的磁盘,而且更有趣的是,它们也可以连接到互联网。所以我们可以说,虚拟机实际上是一种软件定义的计算机,它仅以代码的形式存在,但托管在 物理服务器 上。
虚拟机的用途
- 虚拟机可以备份我们现有的操作系统。这是虚拟机的一个重要用途,即我们当前使用的现有操作系统可以被虚拟机备份。
- 应用程序可以在云中构建和部署,而虚拟机可以用于在云中构建和部署应用程序。
- 虚拟机可用于在并非为其原始设计的操作系统上运行各种应用程序和软件。有许多应用程序和软件不是为某些操作系统制作的,但在这种情况下可以使用虚拟机来克服此类问题。
- Azure 开发测试实验室利用虚拟机来测试和运行现有操作系统之外的各种软件。它们实际上建立了一个新的环境,这为开发者部署开发测试场景提供了一种更简单的方式。
- 虚拟机的另一种用途是,每当发布新的操作系统时,首先会在虚拟机上试用,以进行适当的测试和验证其工作情况。
在创建 Azure 虚拟机之前
在 Azure 中创建虚拟机之前,有一些重要的事项我们需要知道。
- 我们应该决定我们正在处理的应用程序资源的名称。我们正在处理的应用程序及其资源名称应被正确地提及。
- 第二步是我们必须确定虚拟机的位置。这意味着我们资源存储的地理位置。
- 然后,根据我们的工作负载决定虚拟机的大小。
- 还应决定虚拟机运行在哪种操作系统上。
- 我们应该了解我们在 Azure 上创建的虚拟机的所有配置。
Azure 虚拟机的位置
在 Azure 中,我们创建的资源分布在各个区域之间,该区域被称为“位置”。通常,这个过程被称为指定位置。这意味着虚拟机位置指定了虚拟硬盘存储在哪里。由于有不同的方法可以让我们获取位置列表。
第一种方法是,当我们创建虚拟机时,我们可以从 Azure 门户提供的列表中选择位置。Azure 门户中提供了区域或位置的列表,我们可以从中选择列表中的任何位置。
Azure PowerShell 是第二种方法,我们可以使用 Get-AzLocation 命令来选择我们虚拟机的位置。我们必须在这里使用 PowerShell 来了解哪些位置可用,哪些位置不可用于创建我们的虚拟机。
Azure 虚拟机的大小
虚拟机大小也是决定我们虚拟机运行状况的一个重要因素。正如我们上面提到的,虚拟机的大小取决于我们所从事的工作负载类型。如果工作负载非常大,我们就必须根据情况选择更大的虚拟机规格,以确保工作流程顺畅可行。
2026 年技术演进:AI 原生与代码即基础设施
在深入了解如何创建和管理 VM 之前,我们需要先跳出传统的思维框架。作为在 2026 年工作的开发者,我们发现单纯地创建一个“虚拟服务器”已经不再是终点,而是现代化应用架构的起点。在这一章节中,我们将探讨现代开发范式如何与 Azure VM 深度融合,这些内容在我们最近的多个大型云迁移项目中至关重要。
拥抱 "Vibe Coding"(氛围编程)
你可能已经听说过 Vibe Coding 这个术语。在过去的一年里,这已经成为我们团队内部的核心开发理念。简单来说,它是指利用 AI 驱动的自然语言编程实践,让 AI 成为我们的结对编程伙伴。
在 Azure VM 的场景下,这意味着我们不再手动编写复杂的 Bash 或 PowerShell 脚本来配置环境。相反,我们使用像 Cursor 或 Windsurf 这样的现代 AI IDE,通过自然语言描述来生成基础设施代码。
让我们来看一个实际的例子。
假设我们需要在 Ubuntu VM 上自动安装 Docker 并配置防火墙。以前,我们会去 Google 搜索脚本片段。现在,我们直接在 IDE 中输入注释:
# 使用 Azure PowerShell 在创建 VM 后自动配置 Docker 环境
# 这段脚本展示了如何利用自定义脚本扩展实现声明式配置
# 定义配置参数
$vmName = "AiDev-VM-01"
$resourceGroup = "AiProd-RG"
$location = "EastUS"
# 我们可以使用 Public Key 认证,这比密码更安全且符合 2026 年的安全标准
# 在生产环境中,建议务必使用 SSH 密钥对
$adminUsername = "aiadmin"
# 定义一个将在远程 VM 上执行的脚本块
# 注意:这里我们实际上是在教 AI 如何帮我们写脚本
$scriptBlock = {
# 更新包列表并安装 Docker
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo " deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo \"$VERSION_CODENAME\") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启用 Docker 服务
sudo systemctl enable docker
sudo systemctl start docker
# 将当前用户添加到 docker 组以避免每次都使用 sudo
sudo usermod -aG docker $env:USER
}
# 在实际操作中,我们不会直接运行这个,而是将其保存为文件并通过 Set-AzVMCustomScriptExtension 执行
Write-Host "AI 提示:脚本已生成,建议使用 Azure VM Custom Script Extension 进行部署。"
在上面的例子中,虽然脚本看起来很标准,但在 2026 年,编写这段代码的过程往往是 AI 辅助的。我们可能只是对 IDE 说:“准备一个 Azure 脚本,在 EastUS 的 Ubuntu VM 上安装最新的 Docker CE,并确保防火墙允许 80 和 443 端口。” AI 会自动填充细节,甚至包括针对特定 Ubuntu 版本的优化。
Agentic AI 与多模态开发工作流
我们现在的开发工作流通常是多模态的。Agentic AI(自主 AI 代理)不仅仅是生成代码,它还能自主执行一系列复杂的任务。
想象一下这样的场景:你部署了一个 VM,但应用程序无法访问。在传统模式下,你会登录 VM,查看日志,检查网络安全组(NSG)。而在现代工作流中,我们部署的 AI 代理可以自动执行这些排查步骤:
- 自主诊断:代理检查 Azure Monitor 中的指标。
- 日志分析:代理读取 Log Analytics Workspace 中的数据。
- 根因分析:代理结合代码库的上下文,发现是因为某个配置文件与新的 VM 硬件架构不兼容。
为了支持这种智能体,我们在创建 VM 时,必须预装特定的监控代理和开放端口,以便 AI 能够进行“读”和“写”操作。这改变了我们配置 VM 安全组(NSG)的方式——我们需要为 AI 管理工具预留受信任的访问通道。
深入企业级架构:何时使用虚拟机(2026 视角)
随着 Serverless 和容器化技术的成熟,你可能会问:“我们还需要 VM 吗?” 答案是肯定的,但使用场景发生了变化。作为架构师,我们需要分享我们在决策过程中的经验。
边界情况与决策树
在以下场景中,Azure VM 仍然是无可替代的最佳选择:
- 遗留系统的迁移:很多大型企业拥有无法轻易容器化的单体应用。直接“Lift and Shift”(提升并转移)到 VM 是风险最低的路径。
- 高性能计算 (HPC):虽然容器很流行,但对于需要直接访问 GPU 硬件驱动、需要特定内核调优的科学计算任务,裸机或专用 VM 依然占据主导地位。
- 复杂的许可证限制:某些传统软件许可证是与特定的物理硬件 ID 或 MAC 地址绑定的,这在无服务器环境中极难模拟,但在 VM 中可以通过虚拟网卡轻松配置。
什么时候不使用虚拟机?
- 简单的 REST API:请使用 Azure Functions 或 Container Apps。VM 的启动时间和维护成本在这里是浪费。
- 微服务架构:如果你有 50 个微服务,管理 50 个 VM 是一场噩梦。请使用 Kubernetes (AKS)。
工程化实践:不可变基础设施与灾难恢复
在 2026 年,我们不再试图“修复”运行中的生产环境 VM。如果出了问题,我们会销毁它并创建一个新的。这就是 不可变基础设施 的理念。
实战案例:自定义镜像
为了快速恢复,我们不再手动配置 VM。相反,我们会构建一个“黄金镜像”。让我们看看如何使用 PowerShell 创建一个带特定修补程序的镜像版本,以便我们的团队随时可以复现完全一致的环境。
# 场景:我们需要创建一个包含最新安全补丁和特定运行时的标准化 VM 镜像
# 这是一个生产级别的脚本示例,展示了如何从 generalized VM 创建镜像
# 1. 首先解除 VM 的分配并设置 generalize 状态(这类似于 Sysprep)
$vmName = "BaseImage-Builder"
$rgName = "Infra-Core"
# 停止 VM
Stop-AzVM -ResourceGroupName $rgName -Name $vmName -Force
# 将 VM 标记为 Generalized(这意味着 VM 已准备好被复制)
# 注意:此操作不可逆,请确保你在专用模板 VM 上操作,而不是生产服务器
Set-AzVM -ResourceGroupName $rgName -Name $vmName -Generalized
# 2. 创建镜像版本
$galleryName = "ProdImageGallery"
$imageDefName = "Ubuntu-NodeJS-Standard"
# 获取 VM 对象
$vm = Get-AzVM -ResourceGroupName $rgName -Name $vmName
# 创建镜像配置
$imageConfig = New-AzImageConfig -Location ‘EastUS‘ -SourceVirtualMachineId $vm.Id
# 实际创建镜像
New-AzImage -Image $imageConfig -ImageName \"$imageDefName-v1.0\" -ResourceGroupName $rgName
Write-Host \"成功创建不可变镜像。现在,所有新实例都将基于此镜像,确保环境一致性。\"
通过这种方式,如果某个实例因为内存泄漏或配置漂移而挂掉,我们的自动伸缩引擎会立即根据上述镜像创建一个全新的、健康的实例,而不是尝试调试那个已经损坏的节点。
现代化主题:云原生与安全左移
当我们谈论 2026 年的 VM 时,我们不能忽视安全性的演变。
安全左移 与 DevSecOps
在过去,我们在 VM 创建后才配置防火墙和杀毒软件。现在,我们将安全性内置在 Bicep 或 Terraform 模板中。Azure Policy 会在 VM 创建的那一刻进行干预,确保非合规的配置根本无法创建成功。
例如,我们可以创建一个策略,强制所有 VM 必须安装 Microsoft Defender for Cloud 代理,否则网络出口将被阻止。
常见陷阱提示:在我们最近的一个项目中,团队忘记在模板中禁用 SSH 公共 IP 地址(对于 Linux)。这导致了大量的暴力破解攻击日志。
解决方案:使用 Azure Bastion。这是一种经过专门网关访问 VM 的服务,不需要将 SSH/RDP 端口暴露到公共互联网。在现代 Azure 架构中,几乎所有的生产 VM 都应该配合 Bastion 使用,或者完全私有化到虚拟网络(VNet)中,仅通过 VPN 或 ExpressRoute 访问。
替代方案对比与选型建议
最后,让我们做一个快速的技术选型对比,帮助你理解在 2026 年,Azure VM 处于什么位置:
Azure Virtual Machines
Azure Kubernetes Service (AKS)
:—
:—
基础设施即服务
容器编排 (PaaS/Managed)
分钟级
分钟级(取决于节点准备)
高 (需管理 OS 补丁)
中 (需管理集群配置)
遗留应用、强依赖、GPU 计算
复杂的微服务网格、需要高度自定义## 总结
在这篇文章中,我们回顾了 Azure 虚拟机的基础知识,并展望了 2026 年的技术图景。从基础的 Linux/Windows 部署,到利用 AI(Vibe Coding)进行自动化配置,再到不可变基础设施和企业级灾备策略,我们看到虚拟机并没有消失,而是进化成了更强大、更易管理的计算单元。
无论你是需要迁移旧系统,还是构建需要 GPU 加速的 AI 模型训练平台,Azure VM 都提供了不可或缺的灵活性。记住,善用 IaC(基础设施即代码)和 AI 辅助工具,将是你在这个云原生时代取得成功的关键。