你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 虚拟桌面的平台自动化和 DevOps 注意事项

Azure 虚拟桌面是一项托管服务,可为桌面虚拟化环境提供 Microsoft 控制平面。

本文重点介绍运行 Azure 虚拟桌面环境所需的操作任务。 可以单独应用本文中的每条建议。 不需要实施每项建议就能在一定程度上实现自动化。

设计注意事项

规划和设计 Azure 虚拟桌面环境时,请查看以下注意事项。

与 DevOps 集成

自动化不一定意味着与 DevOps 集成,但集成确实提供许多优势。 出于多种原因,值得花时间自动化黄金映像的生成过程:

  • 使用 DevOps 管道时,可以更好地管理自动化流程。
  • 可以从 DevOps 管道接收有关部署的报告和警报。
  • 可以将管道配置为与测试框架集成,并为自动化过程中的各个阶段创建审批入口。
  • 可以从许多预定义事件(例如发布新的库映像、应用程序或使用安排好的计划)启动管道。
  • 自动执行主机池创建时,可以在新位置可用时轻松地将主机池元数据移动到新的地理位置。

基础结构即代码

随着开始采用 DevOps 实践,必须选择一种工具来部署 Azure 资源。 有两种不同的 IaC 工具类别。 首选选项是声明性 IaC 工具。

Azure 提供使用 ARM 模板Azure Bicep 的本机选项。

还可以找到第三方 IaC 工具,例如 HashiCorp 的 Terraform

共用与个人

随着组织横向扩展其环境,大多数工作负载都属于共用配置而不是个人配置

个人配置的运行开销通常高于共用配置。 它们适用于特定的工作负载用户,例如通常需要提升权限的开发人员。 如果在个人模式下运行主机池,请尝试像维护物理桌面设备一样维护计算机,以便减少环境中所需的工具数量。

共用配置在桌面虚拟化中最为流行,正因如此,本文将重点介绍这种配置。 共用环境的更新方式必须与传统环境不同。 以适合组织的正确节奏(通常是每 1-3 个月一次)从黄金映像中更新虚拟机 (VM)。 如果你的组织已高度自动化,可将节奏提高到每周甚至每晚(如有必要)更新一次。

映像创建

在纵向扩展 Azure 虚拟桌面环境时,可以从黄金映像创建一个主机池,理想情况下可以通过自动化过程创建该池。

还可以使用生成清单来纵向扩展。 如果你有一个大型环境,清单过程应该只是初始开发/测试设置的一部分。 黄金映像创建的自动化程度越高,生成的准确性和环境稳定性就越可靠。

我们不建议使用现有的映像来创建使用新应用程序和配置更改进行更新的 VM,然后捕获该映像以用作“新的”黄金映像。 维护此方案会带来重大风险,并且是桌面虚拟化环境变得静态和脆弱的主要因素。

有许多用于创建黄金映像的自动化工具,包括本文稍后所述的 Packer 过程。 使用最适合组织的工具集。 无论选择哪种工具,都请尽量自动创建黄金映像,这样就可以更轻松地保持 Azure 虚拟桌面环境的运行状况。

应用程序安装

可通过两种方式向用户提供应用程序:安装在映像中或按用户动态交付。

安装在映像中的应用程序应该对用户是通用的,并且是自动映像创建过程的一部分。 已安装映像的应用程序可以包括安全产品和 Microsoft 365 套件。

每个用户动态交付的应用程序应该包括需要更灵活方法的所有其他内容。 动态交付的应用程序可以包括限制为特定组的应用程序,以及与其他应用程序不兼容的应用程序。

语言部署

随着 Azure 虚拟桌面环境开始横向扩展,可能需要将映像本地化为用户的本机语言。 如果需要,可以从本地语言开始,或者可以在生成过程中向映像添加其他语言。 选择基础映像时,请考虑此要求。 例如,预优化的 Windows 10 库映像(无论是否包含 Microsoft 365)仅提供英语 - 美国 (en-US)。

注意

如果使用 Windows 10 企业版多会话,则不能使用其他语言生成映像。 在这种情况下,必须调整提供的库映像。 若要调整现有的 en-US 库映像,请在安装其他应用程序之前先安装其他语言。

部署位置

相比于传统桌面环境,在 Azure 虚拟桌面中,可以更自由地选择主机池的地理位置。 之所以有这种灵活性,是因为所有 Azure 位置都支持 Azure 虚拟桌面。 为了避免从广域网 (WAN) 的映像中创建 VM,请使黄金映像与用户在每个相同位置可用。

主机池黄金映像更新

可通过两种方法更新特定主机池中的 VM 所基于的黄金映像。

方法一:

  • 部署第二个主机池,然后在准备就绪后将用户切换到新的主机池。
  • 如果需要回滚,使旧主机池可用。
  • 组织认为新主机池正常运作后,可以删除旧主机池。

方法二:

  • 将现有 VM 设置为主机池中的排出模式。
  • 将更新的黄金映像中的新 VM 部署到同一主机池。
  • 将单个主机池中的 VM 数量翻倍时,注意不要达到资源约束或 API 限制。

设计建议

设计组织的 Azure 虚拟桌面环境时,请查看以下建议。

源代码管理

我们建议使用 Git 来管理源代码并保留简单的分支策略。将 Git 用于环境时:

  • 除非公司策略指定存储库必须是公共的,否则 Git 存储库和 Azure DevOps 项目应该是专用的。
  • 使用 README 文件初始化存储库,以便可以开始填写有关项目的信息。
  • 修改项目权限以允许其他团队成员进行访问。
  • 采用基本工作项进程来开发管道并简化工作负载。
  • 至少应该维护两个存储库:一个存储库用于管理黄金映像生成,另一个存储库用于管理 Azure 虚拟桌面部署。

管道

管道部署系统取决于你选择的源代码管理系统。

如果组织已对 Azure DevOps 进行标准化,请使用 Azure Pipelines。 如果组织已对 GitHub 进行标准化,请使用 GitHub Actions。 任一选项都提供用于在网络中部署自托管代理的功能,这可以带来多种好处,包括:

  • 允许更长的生成时间
  • 能够访问网络中的资源

控制部署管道,以便它们可以自动触发以部署到验证主机池,但不会在没有明确批准的情况下自动推送到生产主机池。

变量和 Azure Key Vault

使用 Azure Pipelines 时,请使用变量组。

  • 通过变量组,可在管道中包含可重复的参数,例如机密和文件位置。
  • 变量组中的变量可以存储为键/值对,但建议的方法是将变量组链接到 Azure 密钥保管库,以拉取在部署管道中使用的机密。

创建 Azure 虚拟桌面映像

使用 Azure 映像生成器 (AIB) 服务自动化黄金映像的生成、更新、sysprep 和分发过程。 此服务可以使用来自 Azure 市场的受支持基础映像完成每次生成,以确保获得最新的更新。

注意

Azure 映像生成器目前在选定区域内可用,但可以在这些区域之外分发映像。

作为黄金映像生成过程的一部分,请考虑需要安装的所有应用程序,并确定它们是否可以通过脚本安装。 确保在 PowerShell 中编写应用程序安装命令的脚本并将其提交到 Git 存储库。 如果无法通过公共 Internet 下载应用程序安装程序,请考虑将应用程序放在 Azure Blob 存储中。 如果应用程序安装过程需要机密,请考虑将机密放在 Azure 密钥保管库中。

若要开始使用 Azure 映像生成器,请参阅使用 Azure VM 映像生成器和 PowerShell 创建 Azure 虚拟桌面映像

若要使用 CI/CD 管道调用 Azure 映像生成器,请使用 Azure Pipelines 的 Azure 映像生成器服务 DevOps 任务,或使用 GitHub Actions 的生成 Azure 虚拟机映像操作

HashiCorp Packer 是一个开源替代产品。 它提供与 Azure 映像生成器(在 HashiCorp Packer 基础上设计)相同的功能,包括分发到 Azure Compute Gallery 的功能。

有关 Packer 的详细信息,请参阅 Packer 网站

Packer 方法具有以下先决条件:

  • Azure DevOps 许可必须使用全套 Packer 工具。
  • 必须在 Microsoft Entra ID 中为用户分配适当的角色。
  • 必须向服务主体授予对订阅的参与者访问权限。
  • 必须有一个用于存储机密的 Azure 密钥保管库,在访问策略中提供服务主体机密管理

在部署管道中使用 Packer 时:

  • 在要在部署管道中使用的生成代理上安装 Packer 工具。
  • 在管道中创建一个验证阶段以验证是否正常生成。
  • 验证后,克隆验证阶段,将部署模式设置为“增量”

有关 Packer 文件存储的其他注意事项:

  • 将 Packer 文件和预配存储在 Azure Pipelines 可以访问的集中位置。 建议使用 Azure 文件共享安全地存储这些文件。
  • 将 Azure 文件存储的访问凭据存储在密钥保管库中。 可以使用管道变量在生成过程中从密钥保管库拉取访问凭据。
  • 此外,将 Packer 文件名和帐户密钥存储在密钥保管库中,该密钥保管库链接到 Azure DevOps 中的变量组。 管道访问这些凭据以将 Packer 文件下载到用于创建映像的 VM。
  • 将 UNC 路径作为变量存储在 Azure DevOps 变量组中。

存储 Azure 虚拟桌面映像

Azure Compute Gallery 服务是围绕黄金映像生成结构和组织的最简单方法。 提供以下功能:

  • 将映像全局复制到不同的 Azure 区域。
    • 请确保已将映像部署到 Azure 虚拟桌面会话主机(VM)部署到的区域。
  • 进行映像版本控制和分组,以便于管理。 版本控制和分组有助于将 Azure 虚拟桌面主机池回滚到以前的映像版本。
  • 在支持可用性区域的区域中,支持具有区域冗余存储 (ZRS) 帐户的高可用性映像。 ZRS 提高了针对区域性故障的恢复能力。
  • Azure 虚拟桌面映像跨订阅共享,甚至通过基于角色的访问控制(RBAC)在 Microsoft Entra 租户之间共享。
  • 在每个区域中使用映像副本进行部署缩放。

有关详细信息,请参阅 Azure Compute Gallery 服务概述

Azure 虚拟桌面映像中的应用程序安装

  • 对于安装在黄金映像中的通用应用程序,请使用本文前面所述的 Packer 方法。
  • App-V 是目前 Microsoft 支持的基于每个用户流式传输应用程序的方法。
  • 当应用程序或插件不能与 App-V 结合使用时,请使用 FSLogix 应用程序掩码来隐藏或显示这些应用程序或插件。
  • 尽可能使用 MSIX 应用附加向用户动态交付应用程序,并减小黄金映像的整体大小。 还可以使用 CI/CD 管道来自动化将应用程序打包为 MSIX 格式的过程。 有关详细信息,请参阅概述

在 Azure 虚拟桌面映像中部署语言

Microsoft 具有手动或自动安装语言包的进程。 建议尽可能减少管理开销,并使语言安装过程自动化。

该过程涉及到将 PowerShell 脚本下载到将转换为映像的 VM 上。 可在 Microsoft 文档中找到示例自动化脚本。 如果遵循有关 Packer 管道的建议,则可以将此过程作为额外的生成任务包括在内。

有关在 Windows 10 企业版多会话中安装语言包的详细信息,请参阅在 Azure 虚拟桌面的 Windows 10 VM 上安装语言包

使用基础结构即代码 (IaC) 方法来部署和自定义 Azure 虚拟桌面资源。 应尽可能使用这些模板以确保部署的一致性。 ARM 模板可用于将 Azure 虚拟桌面资源部署为 CI/CD 管道任务的一部分。 使用 Azure 门户、Azure PowerShell 或 Azure CLI 时,也可以使用这些模板。

下面是建议的主机池更新策略:

  • 设置 CI/CD 管道以生成黄金映像并将其分发到 Azure Compute Gallery。
  • 指定验证主机池并使用 CI/CD 管道将新会话主机部署到验证主机池中。
  • 使用验证主机池测试自动化。
  • 使用生成号或映像版本标记会话主机,以标识它们正在运行的映像版本。
  • 在部署之前进行验证(或检查),以确保订阅中有足够的计算配额。
  • 在验证池中成功测试后,将现有会话主机置于排出模式 - 标记的 VM 将很容易识别。
  • 部署新会话主机并允许用户进行连接。
  • 在生产环境中成功测试后,开始解除分配旧会话主机以便不再产生计算费用,并最终删除这些主机以便不再产生任何托管磁盘费用。
  • 已删除的会话主机只会从 Azure 中移除。 计算机对象将保留在 AD 中,因此需要手动或通过脚本删除这些计算机对象。

上面的示例显示了一种使用 Azure DevOps 及持续集成和持续交付 (CI/CD) 管道实现映像自动化的方法。 这是一种云原生方法,可以降低推出新会话主机的破坏性,且无需停机。 必须注意的是,在逐步淘汰旧映像并将新映像联机时,应考虑虚拟机数量的激增。

如前所述,Azure Compute Gallery 是一项有助于围绕映像生成结构和组织的服务。 在 Azure 虚拟桌面会话主机的 IaC 部署中,可以引用这些映像。 该服务允许对映像进行版本控制、分组和复制。

使用 ARM 模板Terraform 部署会话主机时,建议使用在库中创建的映像的资源 ID 作为 VM 自定义映像源 ID。 必须通过 Azure Compute Gallery 服务将要使用的映像复制到部署 Azure 虚拟桌面主机池的 Azure 区域。

后续步骤

了解如何使用企业规模方案的登陆区域加速器部署 Azure 虚拟桌面。